一個基于AT89C51簡單的4*4按鍵設計,帶實驗文檔說明,仿真圖,帶注釋程序。
圖片1.png (21.14 KB, 下載次數: 68)
下載附件
2017-12-6 09:46 上傳
所有資料51hei提供下載:
新建壓縮(zipped)文件夾.zip
(30.39 KB, 下載次數: 11)
2017-12-6 09:49 上傳
點擊文件名下載附件
仿真文件和程序 下載積分: 黑幣 -5
實驗24 單片機鍵盤顯示控制實驗.doc
(57.5 KB, 下載次數: 5)
2017-12-6 09:47 上傳
點擊文件名下載附件
實驗文檔 下載積分: 黑幣 -5
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int //引用頭文件和定義宏
- uchar n,i;
- uchar code number[]={"0123456789ABCDEF"};
- uchar code k_t[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
- //相連一行為0,不相連為1,找出所有按鍵值(可列表實現)
- //K_T={0xee,...};
- sbit lcdrs=P2^0;
- sbit lcdrw=P2^1;
- sbit lcden=P2^2; //定義LCD的引腳
- void delaylcd() //延時,用于LCD控制
- { uchar i;
- for(i=0;i<125;i++); }
- void delay() //延時20ms
- { uchar i;
- uchar t=20;
- while(t--)
- for(i=0;i<125;i++); }
- void w_lcdcom(uchar com) //寫LCD命令數據
- { lcdrs=0;
- lcdrw=0;
- delay();
- P0=com;
- lcden=1;
- delay();
- lcden=0; }
- void w_lcddat(uchar dat)//寫LCD一個字符數據
- { lcdrs=1;
- lcdrw=0;
- delay();
- P0=dat;
- lcden=1;
- delay();
- lcden=0; }
- void initlcd()//初始化LCD
- { lcden=0;
- w_lcdcom(0x38);
- w_lcdcom(0x06);
- w_lcdcom(0xc); }
- void w_lcdstr(uchar *s)//寫LCD字符串
- { while(*s)
- { w_lcddat(*s);
- s++;} }
- void key()
- { uchar x=0,y=0,i;
- P3=0xf0; //行線送全“1”
- while(P3==0xf0); //無鍵按下等待
- delay(); //延時20ms去抖動
- y=P3; //讀行值
- P3=0xf; //列線送全“1”
- x=P3; //讀列值
- x=x|y; //將4位行值和4位列值,組合成8位的鍵值。
- P3=0xf0;
- while(P3!=0xf0);
- for(i=0;i<16;i++)
- { if(x==k_t[i])
- { n=i; break;}
- }}
- void main()//主程序
- { uint count=0,i;
- initlcd(); //初始化LCD
- while(1)
- { //讀按鍵
- w_lcdcom(0x80); //置光標到第1行第1列
- for(i=0;i<16;i++)
- { key();
- w_lcddat(number[n]);delaylcd();count++; }
- if(count==17) w_lcdcom(0xc0);
-
- {for(i=0;i<16;i++)
- { key();
- w_lcddat(number[n]);delaylcd();count++;}} //顯示
-
- if(count==33) {w_lcdcom(1);count=0;}
- }
- }
復制代碼
|