代碼:
- #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;
- }
復制代碼
仿真結果
2.jpg (184.04 KB, 下載次數: 0)
下載附件
2024-11-22 12:59 上傳
共陽極好使,共陰極不對。
請問高手,哪里不對?謝謝
|