是基于單片cpu的LCD動態顯示幕設計 頭檔案找不到了 求大佬幫忙寫一個頭檔案感謝!!
#include<head.h>
#include<lcd.c>
#include<key.c>
#include<show.c>
#include<show1.c>
#include<show2.c>
#include<show3.c>
#include<show4.c>
#include<show5.c>
#include<show6.c>
#include<show7.c>
#include<show8.c>
#include<show9.c>
#include<show10.c>
void main()
{
uchar n=0;
uchar *s="Please start !";
key_n=0;
LcdInitiate();
delayms(10);
show();
WriteAddress(0x00);
while(s[n]!='\0')
{
WriteData(s[n]);
n++;
}
while(key_n!=0)
{
key();
}
while(1)
{
key();
if(key_n==1)show1();//靜止顯示
if(key_n==2)show2();//整體閃爍
if(key_n==3)show3();//單字閃爍
if(key_n==4)show4();//整體向前、向后滾動
if(key_n==5)show5();//單字符移動
if(key_n==6)show6();//兩邊向中間壓縮
if(key_n==7)show7();//中間向兩邊擴張
if(key_n==8)show8();//上下壓縮
if(key_n==9)show9();//文字上下滾動
if(key_n==10)show10();//組合動作
}
#include<reg52.h>
#include"delay.c"
#include"intrins.h"
sbit RS=P2^0; //暫存器選擇位,將RS位定義為P2.0引腳
sbit RW=P2^1; //讀寫選擇位,將RW位定義為P2.1引腳
sbit E=P2^2; //使能信號位,將E位定義為P2.2引腳
sbit BF=P0^7; //忙碌標志位,,將BF位定義為P0.7引腳
/*****************************************************
函式功能:判斷液晶模塊的忙碌狀態
回傳值:result。result=1,忙碌;result=0,不忙
***************************************************/
unsigned char BusyTest(void)
{
bit result;
RS=0; //根據規定,RS為低電平,RW為高電平時,可以讀狀態
RW=1;
E=1; //E=1,才允許讀寫
_nop_(); //空操作
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
result=BF; //將忙碌標志電平賦給result
E=0;
return result;
}
/*****************************************************
函式功能:將模式設定指令或顯示地址寫入液晶模塊
入口引數:dictate
***************************************************/
void WriteInstruction (unsigned char dictate)
{
while(BusyTest()==1); //如果忙就等待
RS=0; //根據規定,RS和R/W同時為低電平時,可以寫入指令
RW=0;
E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,
// 就是讓E從0到1發生正跳變,所以應先置"0"
_nop_();
_nop_(); //空操作兩個機器周期,給硬體反應時間
P0=dictate; //將資料送入P0口,即寫入指令或地址
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=1; //E置高電平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函式功能:指定字符顯示的實際地址
入口引數:x
***************************************************/
void WriteAddress(unsigned char x)
{
WriteInstruction(x|0x80); //顯示位置的確定方法規定為"80H+地址碼x"
}
/*****************************************************
函式功能:將資料(字符的標準ASCII碼)寫入液晶模塊
入口引數:y(為字符常量)
***************************************************/
void WriteData(unsigned char y)
{
while(BusyTest()==1);
RS=1; //RS為高電平,RW為低電平時,可以寫入資料
RW=0;
E=0; //E置低電平(根據表8-6,寫指令時,E為高脈沖,
// 就是讓E從0到1發生正跳變,所以應先置"0"
P0=y; //將資料送入P0口,即將資料寫入液晶模塊
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=1; //E置高電平
_nop_();
_nop_();
_nop_();
_nop_(); //空操作四個機器周期,給硬體反應時間
E=0; //當E由高電平跳變成低電平時,液晶模塊開始執行命令
}
/*****************************************************
函式功能:對LCD的顯示模式進行初始化設定
***************************************************/
void LcdInitiate(void)
{
delayms(15); //延時15ms,首次寫指令時應給LCD一段較長的反應時間
WriteInstruction(0x38); //顯示模式設定:16×2顯示,5×7點陣,8位資料介面
delayms(5); //延時5ms
WriteInstruction(0x38);
delayms(5);
WriteInstruction(0x38);
delayms(5);
WriteInstruction(0x0c); //顯示模式設定:顯示開,有游標,游標閃爍
delayms(5);
WriteInstruction(0x06); //顯示模式設定:游標右移,字符不移
delayms(5);
WriteInstruction(0x01); //清螢屏指令,將以前的顯示內容清除
delayms(5);
}
#include<reg52.h>
#include<head.h>
sbit P23=P2^3;//key_1
sbit P24=P2^4;//2
sbit P25=P2^5;//3
sbit P26=P2^6;//4
sbit P27=P2^7;//5
sbit P10=P1^0;//6
sbit P11=P1^1;//7
sbit P12=P1^2;//8
sbit P13=P1^3;//9
sbit P14=P1^4;//10
void key_init()//按鍵管腳初始化
{
P23=1; P24=1; P25=1; P26=1; P27=1;
P10=1; P11=1; P12=1; P13=1; P14=1;
}
void key()//按鍵掃描
{
key_init();
if(P23==0)//如果P23接的按鍵按下
{
delayms(10);//短暫延時,按鍵去抖
if(P23==0)key_n=1;//如果P23接的按鍵還是按下 的,key_n=1
}
else if(P24==0)
{
delayms(10);
if(P24==0)key_n=2;
}
else if(P25==0)
{
delayms(10);
if(P25==0)key_n=3;
}
else if(P26==0)
{
delayms(10);
if(P26==0)key_n=4;
}
else if(P27==0)
{
delayms(10);
if(P27==0)key_n=5;
}
else if(P10==0)
{
delayms(10);
if(P10==0)key_n=6;
}
else if(P11==0)
{
delayms(10);
if(P11==0)key_n=7;
}
else if(P12==0)
{
delayms(10);
if(P12==0)key_n=8;
}
else if(P13==0)
{
delayms(10);
if(P13==0)key_n=9;
}
else if(P14==0)
{
delayms(10);
if(P14==0)key_n=10;
}
//else key_n=0;
}
void show()
{
uchar *s1=" ";
uchar i=0;
WriteAddress(0x00);
while(s1[i]!='\0')
{
WriteData(s1[i]);
i++;
}
i=0;
WriteAddress(0x40);
while(s1[i]!='\0')
{
WriteData(s1[i]);
i++;
}
}
void show1()
{
uchar *s1="Hello everybody!";
uchar i=0;
show();
WriteAddress(0x00);
while(s1[i]!='\0')
{
WriteData(s1[i]);
i++;
}
while(key_n==1)
{
key();
}
}
void show2()
{
uchar *s1="Hello everybody!";
uchar i=0;
while(key_n==2)
{
key();
show();
delayms(100);
i=0;
WriteAddress(0x00);
while(s1[i]!='\0')
{
WriteData(s1[i]);
i++;
}
key();
delayms(100);
}
}
void show3()
{
uchar *s1="Hello everybody!";
uchar *s2="0123456789";
uchar i=0;
show();
i=0;
WriteAddress(0x00);
while(s1[i]!='\0')
{
WriteData(s1[i]);
i++;
}
/*i=0;
WriteAddress(0x44);
while(s2[i]!='\0')
{
WriteData(s2[i]);
i++;
}*/
i=0;
while(key_n==3)
{ key();
delayms(100);
WriteAddress(0x00+i);
WriteData(' ');
key();
delayms(100);
WriteAddress(0x00+i);
WriteData(s1[i]);
i++;
if(i==16)i=0;
}
}
void show4()
{
uchar *s1="Hello everybody!";
uchar *s2="0123456789 ";
uchar i=0,j=0;
while(key_n==4)
{
for(j=0;j<16;j++)
{ show();
key();
WriteAddress(0x00+j);
i=0;
while(s1[i]!='\0')
{
WriteData(s1[i]);
i++;
}
delayms(100);
if(key_n!=4)break;
}
for(j=0;j<16;j++)
{ show();
key();
WriteAddress(0x00+16-j);
i=0;
while(s1[i]!='\0')
{
WriteData(s1[i]);
i++;
}
delayms(100);
if(key_n!=4)break;
}
// j++;
// if(j==16)j=0;
}
}
void show5()
{
uchar *s1="Hello everybody!";
uchar *s2="0123456789 ";
uchar i=0,j=0;
while(key_n==5)
{
show();
key();
WriteAddress(0x00+i);
WriteData(s1[i]);
i++;
delayms(100);
if(i>16)i=0;
}
}
void show6()
{
uchar *s1="Hello everybody!";
uchar i=0;
while(key_n==6)
{
show();
key();
WriteAddress(0x00);
WriteData(s1[7]);
WriteAddress(15);
WriteData(s1[8]);
delayms(100);
show();
key();
WriteAddress(0x00);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(14);
WriteData(s1[8]);
WriteData(s1[9]);
delayms(100);
show();
key();
WriteAddress(0x00);
WriteData(s1[5]);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(13);
WriteData(s1[8]);
WriteData(s1[9]);
WriteData(s1[10]);
delayms(100);
show();
key();
WriteAddress(0x00);
WriteData(s1[4]);
WriteData(s1[5]);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(12);
WriteData(s1[8]);
WriteData(s1[9]);
WriteData(s1[10]);
WriteData(s1[11]);
delayms(100);
show();
key();
WriteAddress(0x00);
WriteData(s1[3]);
WriteData(s1[4]);
WriteData(s1[5]);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(11);
WriteData(s1[8]);
WriteData(s1[9]);
WriteData(s1[10]);
WriteData(s1[11]);
WriteData(s1[12]);
delayms(100);
show();
key();
WriteAddress(0x00);
WriteData(s1[2]);
WriteData(s1[3]);
WriteData(s1[4]);
WriteData(s1[5]);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(10);
WriteData(s1[8]);
WriteData(s1[9]);
WriteData(s1[10]);
WriteData(s1[11]);
WriteData(s1[12]);
WriteData(s1[13]);
delayms(100);
show();
key();
WriteAddress(0x00);
WriteData(s1[1]);
WriteData(s1[2]);
WriteData(s1[3]);
WriteData(s1[4]);
WriteData(s1[5]);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(9);
WriteData(s1[8]);
WriteData(s1[9]);
WriteData(s1[10]);
WriteData(s1[11]);
WriteData(s1[12]);
WriteData(s1[13]);
WriteData(s1[14]);
delayms(100);
show();
key();
WriteAddress(0x00);
WriteData(s1[0]);
WriteData(s1[1]);
WriteData(s1[2]);
WriteData(s1[3]);
WriteData(s1[4]);
WriteData(s1[5]);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(8);
WriteData(s1[8]);
WriteData(s1[9]);
WriteData(s1[10]);
WriteData(s1[11]);
WriteData(s1[12]);
WriteData(s1[13]);
WriteData(s1[14]);
WriteData(s1[15]);
for(i=0;i<20;i++)
{
delayms(100);
key();
if(key_n!=6)break;
}
}
}
void show7()
{
uchar *s1="Hello everybody!";
uchar i=0;
while(key_n==7)
{
show();
key();
WriteAddress(0x00);
WriteData(s1[0]);
WriteData(s1[1]);
WriteData(s1[2]);
WriteData(s1[3]);
WriteData(s1[4]);
WriteData(s1[5]);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(8);
WriteData(s1[8]);
WriteData(s1[9]);
WriteData(s1[10]);
WriteData(s1[11]);
WriteData(s1[12]);
WriteData(s1[13]);
WriteData(s1[14]);
WriteData(s1[15]);
show();
key();
WriteAddress(0x00);
WriteData(s1[1]);
WriteData(s1[2]);
WriteData(s1[3]);
WriteData(s1[4]);
WriteData(s1[5]);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(9);
WriteData(s1[8]);
WriteData(s1[9]);
WriteData(s1[10]);
WriteData(s1[11]);
WriteData(s1[12]);
WriteData(s1[13]);
WriteData(s1[14]);
delayms(100);
show();
key();
WriteAddress(0x00);
WriteData(s1[2]);
WriteData(s1[3]);
WriteData(s1[4]);
WriteData(s1[5]);
WriteData(s1[6]);
WriteData(s1[7]);
WriteAddress(10);
WriteData(s1[8]);
WriteData(s1[9]);
WriteData(s1[10]);
WriteData(s1[11]);
WriteData(s1[12]);
WriteData(s1[13]);
delayms(100);
show();
key();
WriteAddress(0x00);
WriteData(s1[3]);
WriteData(s1[4]);
WriteDat
uj5u.com熱心網友回復:
你的head.h存放在什么路徑下?如果不在系統默認的include路徑,一般可以通過編譯命令的-I 引數指定include路徑的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/81100.html
標籤:C++ 語言
上一篇:C++制作的五子棋程式
下一篇:做題
