代码:
- #include <reg52.h>
- #include <intrins.h>
- #define uchar unsigned char
-
- uchar code Table[] =
- { // 0 1 2 3 4 5 6 7 8 9 A b C d E F -
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x86,0xFF,0xbf
- };
- //-----------------------------------------------------------------------------
- sbit SER = P1^0; //串行数据输入端
- sbit STCP = P1^1; //时钟脉冲信号——上升沿有效 存储寄存器时钟输入端,并行输出
- sbit SHCP = P1^2; //输入信号————上升沿有效 移位寄存器时钟输入端
- sbit key1 = P3^0; //选择键
- sbit key2 = P3^1; //加键
- sbit key3 = P3^2; //减键
- sbit key4 = P3^3;
- uchar shan,A,K,C,D,E,F;
- uchar knum; //选择键计数变量
- void TimerInit();
- void KeyScan();
- void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao); // 数码管显示
- void SMG_Int(uchar Dat); // 数码管单字节串行移位函数
- //*****************************************************************************
- // 主程序
- void main ()
- {
- unsigned int i;
- TimerInit();
- while(1)
- {
- Display (A,K,C,D,E,F);
- KeyScan();
- //for(i=0;i<300;i++);
- }
- }
- void KeyScan()
- {
-
- }
- void Display (uchar shi10,uchar shi,uchar fen10,uchar fen,uchar miao10,uchar miao)
- {
- uchar i;
- //显示第1位 小时10位
- i = Table[shi10];
- SMG_Int(i);
- SMG_Int(0x01);
- STCP = 0; //数据并行输出,(借助上升沿)
- _nop_();
- _nop_();
- STCP = 1;
- //显示第2位 小时个位
- i = Table[shi];
- SMG_Int(i);
- SMG_Int(0x02);
- STCP = 0;
- _nop_();
- _nop_();
- STCP = 1;
- //显示第3位 -
- if(shan<10) //"-" 闪烁
- i = Table[16];
- else
- i = Table[15];
- SMG_Int(i);
- SMG_Int(0x04);
- STCP = 0;
- _nop_();
- _nop_();
- STCP = 1;
- //显示第4位 分钟10位
- i = Table[fen10];
- SMG_Int(i);
- SMG_Int(0x08);
- STCP = 0;
- _nop_();
- _nop_();
- STCP = 1;
- //显示第5位 分钟个位
- i = Table[fen];
- SMG_Int(i);
- SMG_Int(0x10);
- STCP = 0;
- _nop_();
- _nop_();
- STCP = 1;
- //显示第6位 -
- if(shan<10) //"-" 闪烁
- i = Table[16];
- else
- i = Table[15];
- SMG_Int(i);
- SMG_Int(0x20);
- STCP = 0;
- _nop_();
- _nop_();
- STCP = 1;
- //显示第7位 秒10位
- i = Table[miao10];
- SMG_Int(i);
- SMG_Int(0x40);
- STCP = 0;
- _nop_();
- _nop_();
- STCP = 1;
- //显示第8位 秒个位
- i = Table[miao];
- SMG_Int(i);
- SMG_Int(0x80);
- STCP = 0;
- _nop_();
- _nop_();
- STCP = 1;
- }
- void SMG_Int(uchar Dat) //通过8次循环将8位数据移入74HC595
- {
- uchar i;
- for(i=8;i>=1;i--)
- {
- if (Dat & 0x80)
- {
- SER = 1;
- }
-
- else
- {
- SER = 0;
- }
- Dat <<= 1;
- SHCP = 0;
- _nop_();
- _nop_();
- SHCP = 1;
- }
- }
- void TimerInit() //定时器0初始化
- {
- TMOD = 0x01;
- TH0 = (65536-50000)/256; //50ms初值
- TL0 = (65536-50000)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void Timer0() interrupt 1
- {
- static uchar cnt,shi=12,fen=59,miao=30;
-
- TH0 = (65536-50000)/256;
- TL0 = (65536-50000)%256;
-
- shan++;
- if(shan==20)
- shan=0;
- cnt++;
- if(cnt==20)
- {
- cnt = 0;
- miao++;
- if(miao == 60)
- {
- miao = 0;
- fen++;
- if(fen==60)
- {
- fen = 0;
- shi++;
- if(shi==24)
- {
- shi=0;
- }
- }
- }
- }
- A=shi/10;
- K=shi%10;
- C=fen/10;
- D=fen%10;
- E=miao/10;
- F=miao%10;
- }
复制代码
仿真结果
共阳极好使,共阴极不对。
请问高手,哪里不对?谢谢
|