|
之前自己練習(xí)1602液晶顯示的成果,1602的驅(qū)動(dòng)編寫和調(diào)用里面解釋很詳細(xì)了
結(jié)合我的解釋,仔細(xì)看我編程的結(jié)構(gòu)和思路
慢慢的你會(huì)對(duì)1602的使用有所了解
自己專研下肯定會(huì)讓你收益頗豐,
發(fā)出來(lái)也是對(duì)自己學(xué)習(xí)的鼓勵(lì)吧!加油各位�。�
P]_0}3E~@7`O]3V`A@6DKWX.png (19.11 KB, 下載次數(shù): 79)
下載附件
2018-6-27 23:13 上傳
TIM截圖20180627230656.png (32.35 KB, 下載次數(shù): 77)
下載附件
2018-6-28 00:30 上傳
- /**************************************************/
- /*
- 1602 模擬顯示車輛速度、溫度、油量
- 1.歡迎語(yǔ)句 Welcome GXUST 第二行car system
- 2. place select 1 2 3 功能選項(xiàng)
- 3.輪流顯示1.speed
- 2.temperatuer
- 3.oil mass
-
- 我一直認(rèn)為單片機(jī)是開(kāi)放的,可以思考的,我做的這份
- 是個(gè)引子,讀者看懂了自然可以快速自己加入自己想顯示的字符。
- ***************************************************/
- #include<reg52.h>
- #include<stdio.h>
- #include<intrins.h>
- #define Data P0//數(shù)據(jù)端口
- #define GPIO_KEY P1 //鍵盤口
- sbit RS = P2^0; //Pin4
- sbit RW = P2^1; //Pin5
- sbit E = P2^2; //Pin6
- unsigned char KeyValue;
- unsigned char kk=0;
- char TimeNum[16]="Welcome GXUSt";
- char Test1[16]="car systen";
- char Test2[16]="place select 123";
- char speed[16]=" 1.speed";
- char temperatuer[16]=" 2.temperatuer";
- char oil[16]=" 3.oil mass"; /*這些是定義字符串,方便顯示調(diào)用*/
- void DelayUs(unsigned char us)//微秒級(jí)延時(shí)函數(shù)
- {
- unsigned char uscnt;
- uscnt=us>>1;
- while(--uscnt);
- }
- void DelayMs(unsigned int ms) //毫秒級(jí)延時(shí)函數(shù)
- {
- while(--ms)
- {
- DelayUs(250);
- DelayUs(250);
- DelayUs(250);
- DelayUs(250);
- }
- }
- void WriteCommand(unsigned char c)//寫命令函數(shù)
- {
- DelayMs(5);//操作前短暫延時(shí),保證信號(hào)穩(wěn)定
- E=0; //使能清零
- RS=0; //選擇寫命令
- RW=0; //選擇寫入
- // _nop_(); //延時(shí)一會(huì)
- // E=1;
- Data=c; //送數(shù)
- DelayMs(1);
- E=1;
- DelayMs(5);//等待寫入完成
- E=0;
- }
- void WriteData(unsigned char c) //寫數(shù)據(jù)函數(shù)
- {
- DelayMs(5);//操作前短暫延時(shí),保證信號(hào)穩(wěn)定
- E=0;
- RS=1;
- RW=0;
- _nop_();
- E=1;
- Data=c;
- E=0;
- RS=0;
- }
- void ShowChar(unsigned char pos,unsigned char c)//寫字符函數(shù) 哪個(gè)位置寫
- {
- unsigned char p;
- if (pos>=0x10)
- p=pos+0xb0; //是第二行則命令代碼高4位為0xc 從第二行開(kāi)始寫
- else
- p=pos+0x80; //是第二行則命令代碼高4位為0x8 從第一行的POS開(kāi)始寫
- WriteCommand (p);//寫命令
- WriteData (c);//寫數(shù)據(jù)
- }
- void lcd_sfm(unsigned char add,unsigned char date)//顯示位置和數(shù)據(jù) 在哪里add顯示 顯示數(shù)據(jù)date
- {
- unsigned char shi,ge;
- shi=date/10;
- ge=date%10;
- WriteCommand(0x80+0x40+add);
- WriteData(0x30+shi);
- WriteData(0x30+ge);
- }
- void ShowString (unsigned char line,char *ptr)//寫字符串函數(shù) line:行
- {
- unsigned char l,i;
- l=line<<4;//若line=0,則地址的高四位為0;若line=1.則地址的高四位為1 寫哪一行
- for (i=0;i<16;i++)
- ShowChar (l++,*(ptr+i));//循環(huán)顯示16個(gè)字符
- }
- void InitLcd()//初始化函數(shù)
- {
- DelayMs(15);
- WriteCommand(0x38); //display mode
- WriteCommand(0x38); //display mode
- WriteCommand(0x38); //display mode
- WriteCommand(0x06); //顯示光標(biāo)移動(dòng)位置
- WriteCommand(0x0c); //顯示開(kāi)及光標(biāo)設(shè)置 不顯示光標(biāo)
- WriteCommand(0x01); //顯示清屏
- // WriteCommand(0x80+0x10); //設(shè)定數(shù)據(jù)指針起始點(diǎn)
- }
- unsigned char keyscan() //鍵盤掃描函數(shù)
- {
- char a=0;
- GPIO_KEY=0x0f; //P1口值準(zhǔn)備
- if(GPIO_KEY!=0x0f)
- {
- DelayMs(10); //延時(shí)消抖
- if(GPIO_KEY!=0x0f)//再次判斷
- {
- GPIO_KEY=0x0f; //再次裝值準(zhǔn)備
- switch(GPIO_KEY) //測(cè)試行
- {
- case(0x07):KeyValue=0;break; //第一行
- case(0x0b):KeyValue=1;break; //第二行
- case(0x0d):KeyValue=2;break; //第三行
- case(0x0e):KeyValue=3;break; //第四行
- }
- GPIO_KEY=0xf0; //高四位賦1,判斷準(zhǔn)備
- switch(GPIO_KEY) //測(cè)試行
- {
- case(0x70):KeyValue=KeyValue;break; //0-3
- case(0xb0):KeyValue=KeyValue+4;break; //4-7
- case(0xd0):KeyValue=KeyValue+8;break; //8-11
- case(0xe0):KeyValue=KeyValue+12;break; //12-15
- }
- while((GPIO_KEY!=0x0f)&&(a<20)) //判斷是否松手,假若沒(méi)有松手,一段延時(shí)后依舊判斷松手完成
- {
- DelayMs(5);
- a++;
- }
- a=0;
- }
- }
- return KeyValue;
- }
- void cjm() //初始界面
- {
- ShowString(1,Test2); //顯示plaace
- DelayMs(1000);
- WriteCommand(0x01); //顯示清屏
-
- ShowString(0,speed); //顯示speed
- DelayMs(1000);
- WriteCommand(0x01); //顯示清屏
-
- ShowString(0,temperatuer);//顯示temperatuer
- DelayMs(1000);
- WriteCommand(0x01); //顯示清屏
- ShowString(0,oil); //顯示oil
- DelayMs(1000);
- WriteCommand(0x01); //顯示清屏
- }
- void jin()//進(jìn)入界面
- {
- DelayMs(15);//延時(shí)保證信號(hào)穩(wěn)定
- ShowString(0,TimeNum); //寫字符串
- DelayMs(15);
- ShowString(1,Test1);//寫字符串
- DelayMs(2000);
- WriteCommand(0x01); //顯示清屏
- }
- void Intput0() //外部中斷
- {
- IT0=1; //跳變沿觸發(fā)
- EX0=1; //開(kāi)外部中斷允許
- EA=1; //開(kāi)總中斷
- }
- void main(void)//主函數(shù)
- {
-
- InitLcd(); //初始化
- jin(); //進(jìn)入界面
- while(1)
- {
- kk=keyscan();
- cjm();
- }
- }
- void exit0() interrupt 0//中斷處理
- {
- if(kk==1)
- {
- kk=0;
- WriteCommand(0x01); //顯示清屏
- ShowString(0, "the speed is:");
- ShowString(1, " 0.return");
- DelayMs(2000);
- WriteCommand(0x01); //顯示清屏
- }
- if(kk==2)
- {
- kk=0;
- WriteCommand(0x01); //顯示清屏
- ShowString(0, "temperatuer is:");
- ShowString(1, " 0.return");
- DelayMs(2000);
- WriteCommand(0x01); //顯示清屏
- }
- if(kk==3)
- {
- kk=0;
- WriteCommand(0x01); //顯示清屏
- ShowString(0,"the oil is: ");
- ShowString(1, " 0.return");
- DelayMs(2000);
- WriteCommand(0x01); //顯示清屏
- }
- if(kk==0) //返回界面
- {
- WriteCommand(0x01); //顯示清屏
- cjm();
- jin();
- }
- kk=0;
- }
復(fù)制代碼
|
-
TIM截圖20180627230656.png
(33.85 KB, 下載次數(shù): 79)
下載附件
2018-6-27 23:14 上傳
-
-
1602液晶顯示顯示屏顯示.rar
2018-6-28 00:33 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
91.72 KB, 下載次數(shù): 18, 下載積分: 黑幣 -5
1602顯示
-
-
1602液晶資料.pdf
2018-6-28 00:34 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
261.92 KB, 下載次數(shù): 11, 下載積分: 黑幣 -5
1602的數(shù)據(jù)手冊(cè)
評(píng)分
-
查看全部評(píng)分
|