0
点赞
收藏
分享

微信扫一扫

单片机简易时钟开发(protues)

河南妞 2022-03-18 阅读 48

C51单片机简易时钟设计,显示分秒时,手动时、分进位,自动进位。

#include<reg51.h>
typedef unsigned int u16;
typedef unsigned char u8;
unsigned char code smgduan[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};          
unsigned char Time;                                                                                     
void DigDisplay();                                                                                                                                                 
void delay(u16 i);
void Timer0Cofig(void);
u8 m=55,f=59,s=23;
sbit K2=P1^2;
sbit K1=P1^1;                                                                                       
void main(void)
{                
        P2=0X00;
        P1=0XFF;
		Timer0Cofig();
        while(1)
   {
           if(!K1)
          {
          	delay(10);
           if(!K1)
          	f++;
          	while(!K1);                                                                         
          }
           if(!K2)
          {
          	delay(10);
          if(!K2)
         	 s++;
         	 while(!K2);                                                                         
          }
                if(m==60)                                                                             //秒进位
                {
                m=0;
                f++;
                }
                if(f==60)                                                                             //分钟进位
                {
                f=0;
                s++;
                }
                if(s==24)                                                                             //小时进位
                {
                s=0;
				m=0;
                }                                               
   DigDisplay();
   }
}
void delay(u16 i)
{
        while(i--);        
}
void DigDisplay()                                                                            //显示秒分时函数
{
   u16 i,i1;                                                                                 //显示秒
   i=m%10;
   i1=(m/10)%10;
   P2=0X80;
   P0=smgduan[i];
   delay(1);                                                                                 
   P2=0X40;
   P0=smgduan[i1];
   delay(1);                                                                                 
   P2=0X20;                                                                                         
   P0=0xBF;
   delay(1);
//显示分钟
   i=f%10;
   i1=(f/10)%10;
   P2=0X10;
   P0=smgduan[i];
   delay(1);                                                                                 
   P2=0X08;
   P0=smgduan[i1];
   delay(1);                                                                                 
   P2=0X04;           
   P0=0xBF;
   delay(1);
   //显示小时
   i=s%10;
   i1=(s/10)%10;
   P2=0X02;
   P0=smgduan[i];
   delay(1);                                                                                 
   P2=0X01;
   P0=smgduan[i1];
   delay(1);
   delay(80);                                                                                      
}
void Timer0Cofig(void)
{
        TMOD = 0x01;     //定时器0选择工作方式1
    TH0  = 0x3C;         //设置初始值,定时50MS
    TL0  = 0xB0; 
    EA   = 1;             //打开总中断
    ET0  = 1;                 //打开定时器0中断
    TR0  = 1;                 //启动定时器0        
}
void Timer0() interrupt 1
{
        TH0 = 0x3C;             //设置初始值
        TL0 = 0xB0;
        Time++;
        if(Time == 20)
        {
                m++;
                Time = 0;
        }
}

protues仿真示例图:
分配好端口

视频示例:

单片机时钟示例

举报

相关推荐

0 条评论