相互学习,有错误请指出 没事~分享数字时钟电路设计!~
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit dula=P2^0;
- sbit wela=P2^1;
- sbit s1=P1^0;
- sbit s2=P1^1;
- sbit s3=P1^2;
- sbit s4=P1^3;
- sbit g_56=P2^5;
- sbit g_34=P2^6;
- sbit g_12=P2^7;
- uchar nian,yue,ri,shi,fen,miao,leap,flag,num;
- uint t;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x00
- };
- uchar code table1[2][13]=
- {
- {0,31,28,31,30,31,30,31,31,30,31,30,31},
- {0,31,29,31,30,31,30,31,31,30,31,30,31}
- };
- void delay(uint z);
- void time0_init(void);
- void display_sfm(uchar shi_,uchar fen_,uchar miao_);
- void init_time();
- void display_nyr();
- void keyscan();
- void main()
- {
- dula=0;
- wela=0;
- init_time();
- time0_init();
- while(1)
- {
- if(nian%4==0)
- leap=1;
- else
- leap=0;
- if(num==1)
- { g_56=~g_56;
- g_34=0;
- g_12=0;
- delay(10);
- }
- if(num==2)
- {
- g_56=0;
- g_34=~g_34;
- g_12=0;
- delay(10);
- }
- if(num==3)
- {
- g_56=0;
- g_34=0;
- g_12=~g_12;
- delay(10);
- }
- if(num==0)
- {
- g_56=0;
- g_34=0;
- g_12=0;
- }
- if(t>=3120)
- {
- t=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- fen=0;
- shi++;
- if(shi==24)
- {
- shi=0;
- ri++;
- if(ri==(table1[leap][yue]+1))
- {
- ri=1;
- yue++;
- if(yue==13)
- {
- yue=1;
- nian++;
- if(nian==100)
- {
- nian=0;
- }
-
- }
-
-
- }
- }
- }
-
- }
-
- }
- if(flag==0)
- display_sfm(shi,fen,miao);
- else
- //display_nyr();
- display_sfm(nian,yue,ri);
- keyscan();
- }
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void time0_init(void)
- {
- TMOD=0x02;
- TH0=0;
- TL0=0;
- //TH0=(65536-50000)/256;
- //TL0=(65536-50000)%256;
- ET0=1;
- EA=1;
- TR0=1;
-
- }
- void init_time()
- {
- t=0;
- flag=0;
- num=0;
- g_56=0;
- g_34=0;
- g_12=0;
- shi=0;
- fen=0;
- miao=0;
- nian=11;
- yue=6;
- ri=3;
- }
- void time0() interrupt 1
- {
- //TH0=(65535-50000)/256;
- //TL0=(65535-50000)%256;
- t++;
- }
- void display_sfm(uchar shi_,uchar fen_,uchar miao_)
- {
- wela=1;
- P0=0xfe;
- wela=0;
- dula=1;
- P0=table[shi_/10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xfd;
- wela=0;
- dula=1;
- P0=table[shi_%10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xfb;
- wela=0;
- dula=1;
- P0=table[fen_/10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xf7;
- wela=0;
- dula=1;
- P0=table[fen_%10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xef;
- wela=0;
- dula=1;
- P0=table[miao_/10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xdf;
- wela=0;
- dula=1;
- P0=table[miao_%10];
- dula=0;
- delay(1);
- }
- void display_nyr()
- {
- wela=1;
- P0=0xfe;
- wela=0;
- dula=1;
- P0=table[nian/10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xfd;
- wela=0;
- dula=1;
- P0=table[nian%10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xfb;
- wela=0;
- dula=1;
- P0=table[yue/10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xf7;
- wela=0;
- dula=1;
- P0=table[yue%10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xef;
- wela=0;
- dula=1;
- P0=table[ri/10];
- dula=0;
- delay(1);
- wela=1;
- P0=0xdf;
- wela=0;
- dula=1;
- P0=table[ri%10];
- dula=0;
- delay(1);
- }
- void keyscan()
- {
- if(s1==0)
- {
- delay(5);
- if(s1==0)
- {
- while(!s1);
- flag=~flag;
- }
-
- }
- if(s2==0)
- {
- delay(5);
- if(s2==0)
- {
- while(!s2);
- num++;
- if(num==1)
- {
- TR0=0;
- }
- if(num==4)
- {
- TR0=1;
- num=0;
- }
-
- }
-
-
- }
- if(s3==0)
- {
- delay(5);
- if(s3==0)
- {
- while(!s3);
- if(num==1&&flag==0)
- {
- shi++;
- if(shi==24)
- shi=0;
- }
- if(num==1&&flag!=0)
- {
- nian++;
- if(nian==100)
- nian=0;
- }
- if(num==2&&flag==0)
- {
- fen++;
- if(fen==60)
- fen=0;
- }
- if(num==2&&flag!=0)
- {
- yue++;
- if(yue==13)
- yue=1;
- }
- if(num==3&&flag==0)
- {
- miao++;
- if(miao==60)
- miao=0;
- }
- if(num==3&&flag!=0)
- {
- ri++;
- if(ri==(table1[leap][yue]+1))
- ri=1;
- }
-
- }
-
- }
- if(s4==0)
- {
- delay(5);
- if(s4==0)
- {
- while(!s4);
- if(num==1&&flag==0)
- {
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
数字时钟电路设计(proteus仿真电路 C源程序).zip
(390.61 KB, 下载次数: 43)
|