1628驱动按键程序
/*文件名:TM1628 *单片机型号: AT89S52 *开发环境:Keil uVision3 *晶震频率:12M */ #include #include #include “tm1628.h“ #define uchar unsigned char #define uintunsigned int //定义控制端口 sbit DIO =P2^0; sbit CLK =P2^1; sbit STB =P2^2; //定义数据 unsigned char const CODE[]={0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 xef,0 x6f}; //共阴数 码管 0-9 的编码 unsigned char KEY[5]={0};//为存储按键值开辟的数组 //向 TM1628 发送 8 位数据,从低位开始------------------------ void send_8bit(uchar dat) { uchar i; for(i=0;i1; } } //向 TM1628 发送命令-------------------------------------- void command(uchar com) { STB=1; STB=0; send_8bit(com); } //读取按键值并存入 KEY[]数组,从低字节开始,从低位开始---- void read_KEY() { uchar i,j; command(0 x42);//读键盘命令 DIO=1;//将 DIO 置高 for(j=0;j1; CLK=0; CLK=1; if(DIO) KEY[j]=KEY[j]|0X80; } STB=1; } //显示函数,1-7 位数码管显示数字 0-6---------------------------- void nodisplay(unsigned char *s) { uchar i; command(0 x03);//设置显示模式,7 位 10 段模式 command(0 x40);//设置数据命令,采用地址自动加 1 模式 command(0 xc0);//设置显示地址,从 00H 开始 for(i=0;i7;i++)//发送显示数据 { send_8bit(*s);//从 00H 起,偶数地址送显示数据 s++; send_8bit(0);//因为 SEG9-14 均未用到,所以奇数地址送全“0” } command(0 x8F);//显示控制命令,打开显示并设置为最亮 //read_KEY();//读按键值 STB=1; } //按键处理函数------------------------------------------------- /*void KEY_process() { //由用户编写 } */ //下边重新写定义 unsigned char key_process() { switch(KEY[0]) 实际是 { case 0 x01:return 1; break; case 0 x02:return 2; break; case 0 x08:return 3; break; case 0 x10:return 4; break; default:return 0;break; } switch(KEY[1]) { case 0 x01:return 5; break; case 0 x02:return 6; break; case 0 x08:return 7; break; case 0 x10:return 8; break; default:return 0;break; } switch(KEY[2]) { case 0 x01:return 9; break; case 0 x02:return 10; break; case 0 x08:return 11; break; case 0 x10:return 12; break; default:return 0;break; } switch(KEY[3]) { case 0 x01:return 13; break; case 0 x02:return 14; break; case 0 x08:return 15; break; case 0 x10:return 16; break; default:return 0;break; } switch(KEY[4]) { case 0 x01:return 17; break; case 0 x02:return 18; break; case 0 x08:return 19; break; case 0 x10:return 20; break; //k1ks1k2ks1 0 k2ks1k2ks2 0(k0-k7)高地位对调k7-k0 default:return 0;break; } } /* //主函数------------------------------------------------------- void main() { display();//显示 while(1) { read_KEY();//读按键值 key_process();//按键处理 } } */ #ifndef __tm1628_H__ #define __tm1628_H__ #define uchar unsigned char #define uintunsigned int //向 TM1628 发送 8 位数据,从低位开始------------------------ void send_8bit(uchar dat) ; //向 TM1628 发送命令-------------------------------------- void command(uchar com) ; //读取按键值并存入 KEY[]数组,从低字节开始,从低位开始---- void read_KEY() ; //显示函数,1-7 位数码管显示数字 0-6---------------------------- void nodisplay(unsigned char *s) ; //按键处理函数------------------------------------------------- /*void KEY_process() { //由用户编写 } */ //下边重新写定义 unsigned char key_process(); #endif