結合4X4矩陣鍵盤與LCD液晶屏顯示器,將矩陣按鍵號顯示在液晶屏上。在液晶屏的第一行顯示實驗者的姓名英文拼寫,第二行顯示:“KEY VALUE:矩陣按鍵號”
單片機源程序如下:
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define key P1
- sbit rw=P2^5;
- sbit rs=P2^6;
- sbit ep=P2^7;
- uchar pose;
-
- void delay(uint z)
- {
- uint x,y;
- for(x=0;x<z;x++)
- for(y=0;y<100;y++);
- }
- bit lcd_bz()
- {
- bit result;
- rw=1;
- rs=0;
- ep=1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- result=(bit)(P0&0x80);
- ep=0;
- return result;
- }
- void lcd_wdat(uchar dat)
- {
- while(lcd_bz());
- rs=1; //rs為1表示數據
- rw=0;
- ep=0;
- _nop_();
- _nop_();
- P0=dat;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- ep=1;
- delay(1);
- ep=0;
- }
-
- void lcd_w(uchar cmd)
- {
- while(lcd_bz());
- rs=0;//rs為0表示指令
- rw=0;
- ep=0;
- _nop_();
- _nop_();
- P0=cmd;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- ep=1;
- delay(1);
- ep=0;
- }
- void lcd_pos(uchar lie,uchar hang)
- {
- if(hang==1)
- lcd_w(lie+0x80);
- else
- lcd_w(0x40+lie+0x80);
- }
- //液晶屏設置初始化
- void lcd_init()
- {
- lcd_w(0x01);//清除顯示內容
- delay(1);
- lcd_w(0x38);//功能設置:雙行顯示 //數據位為8,字形大小為5X7
- delay(1);
- lcd_w(0x38);
- delay(1);
- lcd_w(0x0c);//顯示開關控制
- delay(1);
- lcd_w(0x06);//輸入方式設置
- delay(1);
- }
- uchar scankey()
- {
- uchar hang,lie;
- key=0xf0;
- if(key!=0xf0)
- {
- switch(key)
- {
- case 0x70: hang=3;break;
- case 0xb0: hang=2;break;
- case 0xd0: hang=1;break;
- case 0xe0: hang=0;break;
- default:break;
- }
- delay(5);
- key=0x0f;
- if(key!=0x0f)
- {
- switch(key)
- {
- case 0x07: lie=3;break;
- case 0x0b: lie=2;break;
- case 0x0d: lie=1;break;
- case 0x0e: lie=0;break;
- default:break;
- }
- pose=hang*4+lie;
- return 1;
- }
- else
- return 0;
- }
- else
- return 0;
- }
- void main()
- {
-
- char i;
- uchar code str1[]="xiaoming";
- uchar code str2[]="KEY VALUE: ";
- uchar c[ ]={48,49,50,51,52,53,54,55,56,57,65,66,67,68,69,70};
- lcd_init(); //液晶初始化
- delay(10);
- lcd_pos(0,1);
- i=0;
- while(str1[i]!='\0')
- {
- lcd_wdat(str1[i]);
- i++;
- }
- //換行顯示
- lcd_pos(0,2);
- i=0;
- while(str2[i]!='\0')
- {
- lcd_wdat(str2[i]);
- i++;
- }
- while(1)
- {
- if(scankey())
- {
- lcd_pos(12,2);
- lcd_wdat(c[pose]);
- }
- }
-
- }
復制代碼
所有資料51hei提供下載:
lcd.rar
(1.02 KB, 下載次數: 39)
2019-4-30 10:03 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|