取暖器上拆下来的TM1628+共阳数码管 7段10位 现在使用其中的2个数码管显示时间 定时器0计时 显示有闪烁感,求助各位不吝赐教,谢谢!
单片机源程序如下:
- #include <STC89C5xRC.H>
- #include <intrins.h>
- #define u8 unsigned char
- #define u16 unsigned int
- #define u32 unsigned long
- sbit STB=P1^0;
- sbit CLK=P1^3;
- sbit DIO=P1^5;
- //BK9021共阳 硬件说明=脚位 1-7seg1-7 8-10seg10-9-8 11-12-13GRID5-6-7 14-17GRID1-2-3-4
- /*
- u8 const code DM[69][14]={
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00},//分 11脚GRID5地址08 SEG1
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00},//电源 12脚GRID6地址0A SEG1
- {0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T1 14脚GRID1地址00 SEG1
- {0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T2 15脚GRID2地址02 SEG1
- {0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T3 16脚GRID3地址04 SEG1
- {0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T4 17脚GRID4地址06 SEG1
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00},//T5 11脚GRID5地址08 SEG2
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00},//T6 12脚GRID6地址0A SEG2
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00},//T7 13脚GRID7地址0C SEG2
- {0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T8 14脚GRID1地址00 SEG2
- {0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T9 15脚GRID2地址02 SEG2
- {0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T10 16脚GRID3地址04 SEG2
- {0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T11 17脚GRID4地址06 SEG2
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00},//T12 11脚GRID5地址09 SEG9
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00},//T13 12脚GRID6地址0B SEG9
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01},//T14 13脚GRID7地址0D SEG9
- {0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T15 14脚GRID1地址01 SEG9
- {0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T16 15脚GRID2地址03 SEG9
- {0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T17 16脚GRID3地址05 SEG9
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00},//T18 17脚GRID4地址07 SEG9
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00},//T19 11脚GRID5地址08 10脚SEG8
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00},//T20 12脚GRID6地址0A 10脚SEG8
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x00},//T21 13脚GRID7地址0C 10脚SEG8
- {0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T22 14脚GRID1地址00 10脚SEG8
- {0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T23 15脚GRID2地址02 10脚SEG8
- {0x00,0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//T24 16脚GRID3地址04 10脚SEG8
- {0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//1a 17脚GRID4地址06 SEG3
- {0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//1b 16脚GRID3地址04 SEG3
- {0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//1c 15脚GRID2地址02 SEG3
- {0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//1d 14脚GRID1地址00 SEG3
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00},//1e 13脚GRID7地址0C SEG3
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00},//1f 12脚GRID6地址0A SEG3
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00},//1g 11脚GRID5地址08 SEG3
- {0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//2a 17脚GRID4地址06 SEG4
- {0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//2b 16脚GRID3地址04 SEG4
- {0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//2c 15脚GRID2地址02 SEG4
- {0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//2d 14脚GRID1地址00 SEG4
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00},//2e 13脚GRID7地址0C SEG4
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00},//2f 12脚GRID6地址0A SEG4
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x00,0x00},//2g 11脚GRID5地址08 SEG4
- {0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//3a 17脚GRID4地址06 SEG5
- {0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//3b 16脚GRID3地址04 SEG5
- {0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//3c 15脚GRID2地址02 SEG5
- {0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//3d 14脚GRID1地址00 SEG5
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00},//3e 13脚GRID7地址0C SEG5
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00},//3f 12脚GRID6地址0A SEG5
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00,0x00},//3g 11脚GRID5地址08 SEG5
- {0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//4a 17脚GRID4地址06 SEG6
- {0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//4b 16脚GRID3地址04 SEG6
- {0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//4c 15脚GRID2地址02 SEG6
- {0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//4d 14脚GRID1地址00 SEG6
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00},//4e 13脚GRID7地址0C SEG6
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00},//4f 12脚GRID6地址0A SEG6
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00},//4g 11脚GRID5地址08 SEG6
- {0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//5a 17脚GRID4地址06 SEG7
- {0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//5b 16脚GRID3地址04 SEG7
- {0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//5c 15脚GRID2地址02 SEG7
- {0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//5d 14脚GRID1地址00 SEG7
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00},//5e 13脚GRID7地址0C SEG7
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00},//5f 12脚GRID6地址0A SEG7
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00},//5g 11脚GRID5地址08 SEG7
- {0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//换气14脚GRID1地址01 8脚SEG10
- {0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//吹风15脚GRID2地址03 8脚SEG10
- {0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//取暖1 16脚GRID3地址05 8脚SEG10
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00},//取暖2 17脚GRID4地址07 8脚SEG10
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00},//s 11脚GRID5地址09 8脚SEG10
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00},//°C 12脚GRID6地址0B 8脚SEG10
- {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02}, //照明13脚GRID7地址0D 8脚SEG10
- {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff} //全显
- };
- */
- //d c b a g f e
- u8 const code time5[10][14]={
- {0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x40,0x00,0x40,0x00},//第5个数码管显示0
- {0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//第5个数码管显示1
- {0x40,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x40,0x00},//第5个数码管显示2
- {0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00},//第5个数码管显示3
- {0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x00,0x00},//第5个数码管显示4
- {0x40,0x00,0x40,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00},//第5个数码管显示5
- {0x40,0x00,0x40,0x00,0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00},//第5个数码管显示6
- {0x00,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//第5个数码管显示7
- {0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00},//第5个数码管显示8
- {0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x00,0x00},//第5个数码管显示9
- };
- u8 const code time4[10][14]={
- {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x20,0x00},//第4个数码管显示0
- {0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//第4个数码管显示1
- {0x20,0x00,0x00,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x20,0x00},//第4个数码管显示2
- {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00},//第4个数码管显示3
- {0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x20,0x00,0x00,0x00},//第4个数码管显示4
- {0x20,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00},//第4个数码管显示5
- {0x20,0x00,0x20,0x00,0x00,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00},//第4个数码管显示6
- {0x00,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00},//第4个数码管显示7
- {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00},//第4个数码管显示8
- {0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x20,0x00,0x00,0x00},//第4个数码管显示9
- };
- //u8 key[5]={0};//储存按键值
- //u8 o=0;
- //u8 k=0;
- u8 aa,bb,cc;
- void display_du(u8 a);
- void delayms(u16 z)
- {
- u16 x;
- u8 y;
- for(x=z;x>0;x--)
- for(y=112;y>0;y--);
- }
- //向TM1628发送数据,低位开始
- void send_8bit(u8 dat)
- {
- u8 i;
- for(i=0;i<8;i++)
- {
- if(dat&0x01)
- DIO=1;
- else
- DIO=0;
- CLK=1;
- _nop_();_nop_();_nop_();
- CLK=0;
- dat>>=1;
- }
- }
- //向TM1628发送命令
- void send_com(u8 com)
- {
- STB=1;
- _nop_();_nop_();_nop_();
- STB=0;
- send_8bit(com);
- }
- //读取按键值并存入key【】数组,从低字节开始,从低位开始
- /*
- void read_key()
- {
- u8 i,j;
- send_com(0x42);//读键盘命令
- DIO=1;
- 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 display5()
- {
- u8 i;
- send_com(0x03);//设置显示模式,7位10段
- send_com(0x40);//设置数据命令,采用地址自动加1模式
- send_com(0xc0);//设置显示地址,从00h开始
- for(i=0;i<14;i++) //发送显示数据
- {
- send_8bit(time5[aa][i]);//因为seg9-14均未用到,所以奇数地址全送0
- }
- send_com(0x8f);//显示控制命令。打开显示并设为最亮
- // send_com(0x80);//显示控制命令。关显示
- //read_key(); //读按键值
- STB=1;
- }
- void display4()
- {
- u8 i;
- send_com(0x03);//设置显示模式,7位10段
- send_com(0x40);//设置数据命令,采用地址自动加1模式
- send_com(0xc0);//设置显示地址,从00h开始
- for(i=0;i<14;i++) //发送显示数据
- {
- send_8bit(time4[bb][i]);//因为seg9-14均未用到,所以奇数地址全送0
- }
- send_com(0x8f);//显示控制命令。打开显示并设为最亮
- // send_com(0x80);//显示控制命令。关显示
- //read_key(); //读按键值
- STB=1;
- }
- /*
- void display1()
- {
- u8 i;
-
- send_com(0x03);//设置显示模式,7位10段
- send_com(0x40);//设置数据命令,采用地址自动加1模式
- send_com(0xc0);//设置显示地址,从00h开始
- for(i=0;i<14;i++) //发送显示数据
- {
- send_8bit(DM[o][i]);//
- }
- send_com(0x8f);//显示控制命令。打开显示并设为最亮
- // send_com(0x80);//显示控制命令。关显示
- //read_key(); //读按键值
- STB=1;
- }
- */
- //显示函数,1-7位数码管显示数组0-6
- //void display1()
- //{
- // u8 i;
- // send_com(0x03);//设置显示模式,7位10段
- // send_com(0x44);//设置数据命令,采用固定地址模式
- // send_com(0xcd);//设置显示地址0dh
- // send_8bit(0x03);//显示分
- // send_com(0x8f);//显示控制命令。打开显示并设为最亮
- // STB=1;
- //}
- void display_du(u8 a)
- {
- aa=a/10;
- bb=a%10;
- display5();
- display4();
- }
- //按键处理函数
- /*
- void key_press()
- {
-
- }
- */
- void timer0init()
- {
- TMOD|=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=1;
- ET0=1;
- EA=1;
- }
- void main()
- {
- timer0init();
- while(1)
- {
- // read_key();
- // key_press();
- display_du(k);
- if(cc==20)
- {
- cc=0;
- k++;
- if(k==100)
- k=0;
- }
- }
- }
- void timer0isr() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- cc++;
- }
复制代码
|