|
这是一个51单片机的时钟设计,可以调节
秒,分,时的数。一共有四个键一个复位,
其他分别是调节秒分时的键。- #include<reg51.h>
- #include<absacc.h>
- #define uchar unsigned char
- #define uint unsigned int
- /*七段共阴管显示定义*/
- uchar code dispcode[ ]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
- 0xBF,0x86,0xCB,0xCF,0xEF,0xED,0xFD,0x87,0xFF,0xDF};
- /*定义并初始化变量*/
- uchar seconde=0;
- uchar minite=0;
- uchar hour=0;
- uchar mstcnt=0;
- sbit P1_0=P1^0; // second 调整定义
- sbit P1_1=P1^1; //minite调整定义
- sbit P1_2=P1^2; //hour调整定义
- sbit P1_3=P1^3; //暂停定义
- /*函数声明*/
- void delay(uchar k ); //延时子程序
- void time_pro( ); //时间处理子程序
- void display( ); //显示子程序
- void keyscan( ); //键盘扫描子程序
- /*延时子程序*/
- void delay (uchar k)
- {
- uchar j;
- while((k--)!=0)
- {
- for(j=0;j<125;j++)
- {;}
- }
- }
- /*时间处理子程序*/
- void time_pro( void)
- {
- if(seconde==60) //秒钟设为60进制
- { seconde=0;
- minite++;
- if( minite==60) //分钟设为60进制
- { minite=0;
- hour++;
- if(hour==24) //时钟设为24进制
- {hour=0; }
- }
- }
- }
- /* 显示子程序*/
- void display(void)
- {
- P2=0x01;
- P0=dispcode[hour/10]; //显示小时的十位
- delay(10);
- P2=0x02;
- P0=dispcode[hour%10]; //显示小时的个位
- delay(10);
- P2=0x04;
- P0=dispcode[minite/10]; //显示分的十位
- delay(10);
- P2=0x08;
- P0=(dispcode[minite%10]); //显示分的个位
- delay(10);
- P2=0x10;
- P0=dispcode[seconde/10]; //显示秒的十位
- delay(10);
- P2=0x20;
- P0=dispcode[seconde%10]; //显示秒的个位
- delay(10);
- }
- /*键盘扫描子程序*/
- void keyscan (void)
- {
- if(P1_0==0) //按键1秒的调整
- {
- delay(30);
- if(P1_0==0)
- {
- seconde++;
- if(seconde==60)
- {seconde=0; }
- }
- }
- if(P1_1==0) //按键2分的调整
- {
- delay(30);
- if(P1_1==0)
- {
- minite++;
- if(minite==60)
- {minite=0;}
- }
- }
- if(P1_2==0) //按键3小时的调整
- {
- delay(30);
- if(P1_2==0)
- {
- hour++;
- if(hour==24)
- {hour=0; }
- }
- }
- if(P1_3==0)
- {
- delay(30);
- if(P1_3==0)
- {
- while(!P1_3);
- {TR0=~TR0;} //启动或停止定时器0
- }
- }
- }
- void timer0(void) interrupt 1
- {
- TH0=0x3c;
- TL0=0xb0;
- mstcnt++;
- if(mstcnt==20)
- {
- seconde++;
- mstcnt=0; //清零
- } //
- }
- /*主函数*/
- void main(void)
- { P1=0xff; //初始化p1口,全设为1
- TMOD = 0x11; //time0为定时器,方式1
- TH0=0x3c; //预置计数初值
- TL0=0xb0;
- EA=1;
- ET0=1;
- TR0=1;
- while (1)
- {
- keyscan( ); //按键扫描
- time_pro( ); //时间处理
- display( ); //显示时间
- }
- }
复制代码
|
|