|
这是数字时钟的课程设计,用了一周时间,包括程序代码,设计原理思想,以及proteus仿真图,均为自己原创,希望大家多多指教!
电路原理图如下:
单片机源码:
- #include <stc10.h>
- #include<INTRINS.H>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code
- a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar led1=0xfe;
- uchar led2=0xfb;
- uchar count;
- uchar sec=50;
- uint msec=0;
- uint min=9;
- uint set_sec=10;
- uint set_min=10;
- sbit K1=P0^5; //K4
- sbit K2=P0^6; //K5
- sbit K3=P0^7; //k6
- sbit line1=P3^6;
- sbit line2=P3^7;
- void LED();
- void display(uint x,uint y);
- /************延时函数****************/
- void delay(uint t)//1ms延时函数
- {
- uint I;
- do{
- for(i=0;i<100;i++)
- ;
- }while(--t);
- }
- /***********主函数****************/
- void main(void)
- {
- int j=0;
- TMOD=0x01;
- TH0=0xd8;
- TL0=0xf0;
- ET0=1;
- EA=1;
- P1M1=0X00;
- P1M0=0Xff;
- while(1)
- {
- display(sec,min);
- //启动/停止
- line1=0;
- if(K1==0)
- delay(10);
- if(K1==0)
- { while(!K1)
- display(sec,min);
- TR0=~TR0;
- } while(!K1);
- if(!K2)
- {//清零(K2)
- delay(10);
- if(!K2)
- {
- while(!K2)
- display(sec,min);
- TR0=0;
- msec=0;
- sec=0;
- min=0;
- }
- }
- line1=1;line2=0;
- if(!K1)
- {//调节定时时间(分钟)(K4)
- delay(10); //延时10ms
- if(!K1)
- {
- while(!K1)
- display(sec,min);
- set_min++;
- for(j=100;j--;j>0)
- display(0,set_min);
- }
- }
- if(!K2)
- {//调节定时时间(秒)(K5)
- delay(10);
- if(!K2)
- {
- while(!K2)
- display(sec,min);
- set_sec++;
- for(j=100;j>0;j--)
- display(set_sec,0);
- }
- }
- line2=1;
- //定时时间到,12个灯亮1min
- if(set_min==min&&set_sec==sec)
- {
- P2=0x00;
- P3=0xc3;
- }
- if((set_min+1)==min&&set_sec==sec)
- { P2=0xff;
- P3=0xff;
- }
- if(sec==0)
- //整分钟时,LED出现流水现象,延时0.5秒
- {
- LED();
- }
- }
- }
- /*************中断函数**************/
- void timer0(void) interrupt 1
- {
- TH0=55536/256;
- TL0=55536%256;
- msec++;
- if(msec==100)
- {
- msec=0;
- sec++;
- if(sec==60)
- {
- min++;
- sec=0;
- msec=0;
-
- if(min==60)
- {
- min=0;
- sec=0;
- msec=0;
- }
- }
- }
- }
- /**************LED流水****************/
- void LED()
- {
- uchar k;
- P2=led1;
- for(k=0;k<7;k++)
- {
- led1=_crol_(led1,1);
- delay(20);
- }
- P2=0xff;
- P3=led2;
- for(k=0;k<3;k++)
- {
- led2=_crol_(led2,1);
- delay(20);
- }
- P3=0xff;
- }
- /**************显示函数*****************/
- void display(uint x,uint y)
- {
- P0=0xf7,P1=a[x%10];
- delay(2);
- P1=0;
- P0=0xfb,P1=a[x/10];
- delay(2);
- P1=0;
- P0=0xfd,P1=a[y%10]|0x80;
- delay(2);
- P1=0;
- P0=0xfe,P1=a[y/10];
- delay(2);
- P1=0;
- }
复制代码
|
评分
-
查看全部评分
|