一个基于AT89C51简单的4*4按键设计,带实验文档说明,仿真图,带注释程序。
所有资料51hei提供下载:
新建压缩(zipped)文件夹.zip
(30.39 KB, 下载次数: 11)
实验24 单片机键盘显示控制实验.doc
(57.5 KB, 下载次数: 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;}
- }
- }
复制代码
|