共陰極數(shù)碼管做數(shù)字時鐘有一段微亮。仿真沒有問題,實物出現(xiàn)這樣現(xiàn)象,單片機程序如下:
單片機源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- sbit P0_0 = P0^0;
- sbit P0_1 = P0^1;
- sbit P0_2 = P0^2;
- sbit P0_3 = P0^3;
- sbit P0_4 = P0^4;
- sbit P0_5 = P0^5;
- sbit key_hour=P3^2;//s1
- sbit key_min=P3^3;//s2
- sbit key_sec=P3^4;//s3
- sbit key_rst=P3^5;//s4
- static unsigned char second,minute,hour;
- unsigned int tcount;
- uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- void delay(uchar i)
- {
- uchar j,k;
- for(j=i;j>0;j--)
- for(k=125;k>0;k--);
- }
- void display()
- {
- P1=table[hour/10];
- P0_0 = 0;
- delay(5);
- P0_0 = 1;
- P1=(table[hour%10]|0x80);
- P0_1 = 0;
- delay(5);
- P0_1 = 1;
- P1=table[minute/10];
- P0_2 = 0;
- delay(5);
- P0_2 = 1;
- P1=(table[minute%10]|0x80);
- P0_3 = 0;
- delay(5);
- P0_3 = 1;
-
- P1=table[second/10];
- P0_4 = 0;
- delay(5);
- P0_4 = 1;
- P1=table[second%10];
- P0_5 = 0;
- delay(5);
- P0_5 = 1;
- }
- void main(void)
- {
-
- TMOD=0x02;
- TH0=0x06;
- TL0=0x06;
- TR0=1;
- ET0=1;
- EA=1;
- //hour=16,minute=48,second=0;
- while(1)
- {
- display();
-
- if(key_hour==0)
- {
- delay(10);
- if(key_hour==0)
- {
- hour++;
- if(hour==24) hour=0;
- }
- while(!key_hour);
- }
- if(key_min==0)
- {
- delay(10);
- if(key_min==0)
- {
- minute++;
- if(minute==60) minute=0;
- }
- while(!key_min);
- }
- if(key_sec==0)
- {
- delay(10);
- if(key_sec==0)
- {
- second++;
- if(second==24) second=0;
- }
- while(!key_sec);
- }
- if(key_rst==0)
- {
- delay(10);
- if(key_rst==0)
- {
- hour=0;
- minute=0;
- second=0;
- }
- while(!key_rst);
- }
- }
- }
- void t0(void) interrupt 1 using 0
- {
- tcount++;
- if(tcount==5000)
- {
- tcount=0;
- second++;
- if(second==60)
- {
- second=0;
- minute++;
- if(minute==60)
- {
- minute=0;
- hour++;
- if(hour==24)
- {
- hour=0;minute=0;second=0;
- }
- }
- }
- }
- }
復制代碼
|