取暖器上拆下來的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++;
- }
復制代碼
|