本帖最后由 xuanhuanzi 于 2019-2-19 22:32 编辑
- *文件名: TM1628
- *单片机型号: AT89S52
- *开发环境: Keil uVision3
- *晶震频率: 12M
- */
- #include
- #include
- #define uchar unsigned char
- #define uint unsigned int
-
- //定义控制端口
- sbit DIO =P2^0;
- sbit CLK =P2^1;
- sbit STB =P2^2;
-
- //定义数据
- uchar const CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xef,0x6f}; //共阴数码管0-9的编码
- uchar KEY[5]={0}; //为存储按键值开辟的数组
-
- //向TM1628发送8位数据,从低位开始------------------------
- void send_8bit(uchar dat)
- {
- uchar i;
- for(i=0;i<8;i++)
- {
- if(dat&0x01)
- DIO=1;
- else DIO=0;
- CLK=0;
- CLK=1;
- dat=dat>>1;
- }
- }
-
- //向TM1628发送命令--------------------------------------
- void command(uchar com)
- {
- STB=1;
- STB=0;
- send_8bit(com);
- }
-
- //读取按键值并存入KEY[]数组,从低字节开始,从低位开始----
- void read_key()
- {
- uchar i,j;
- command(0x42); //读键盘命令
- DIO=1; //将DIO置高
- for(j=0;j<5;j++)//连续读取5个字节
- for(i=0;i<8;i++)
- {
- KEY[j]=KEY[j]>>1;
- CLK=0;
- CLK=1;
- if(DIO)
- KEY[j]=KEY[j]|0X80;
- }
- STB=1;
- }
-
- //显示函数,1-7位数码管显示数字0-6----------------------------
- void display()
- {
- uchar i;
- command(0x03); //设置显示模式,7位10段模式
- command(0x40); //设置数据命令,采用地址自动加1模式
- command(0xc0); //设置显示地址,从00H开始
- for(i=0;i<7;i++) //发送显示数据
- {
- send_8bit(CODE[i]); //从00H起,偶数地址送显示数据
- send_8bit(0); //因为SEG9-14均未用到,所以奇数地址送全“0”
- }
- command(0x8F); //显示控制命令,打开显示并设置为最亮
- //read_key(); //读按键值
- STB=1;
- }
-
- //按键处理函数-------------------------------------------------
- void key_process()
- {
- //由用户编写
- }
-
- //主函数-------------------------------------------------------
- void main()
- {
- display(); //显示
- while(1)
- {
- read_key(); //读按键值
- key_process(); //按键处理
- }
- }
|