资讯详情

51单片机4位数码管电子钟源程序

/***************************************************************************标题:     定时器中断 24小时时钟程序效果:     数码管显示24小时制时钟(具有调时功能)说明:     使用12M晶振        ,key1=P3^7; key2=P3^6; key3=P3^5;key4=P3^4;                  数码管位选P1.0~P1.3   ,段选P0******************************************************************************/ #include<reg52.h> #define uchar unsigned char;#define uint unsigned int;                                               uchar position;           uchar tt;             uchar second;       uchar minute;uchar hour;         uchar code table[]=                            {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0--9                   sbit smg_q = P1^0;  //数码管千位引脚sbit smg_b = P1^1; sbit smg_s = P1^2;sbit smg_g = P1^3; sbit key1=P3^7;                 //按键定义sbit key2=P3^6;sbit key3=P3^5;sbit key4=P3^4;  void keyscan();                   //函数声明void display(unsigned char hour,unsignedchar minute);void delay(unsigned int timer);void init();                                              /***********************************************************                                     主函数***********************************************************/void main(){         init();                                             while(1)         {                   if(tt==20)                   {                                                      tt=0;                            second++;                            if(second==60)                            {                                     second=0;                                     minute++;                                     if(minute==60)                                     {                                                      minute=0;                                               hour++;                                               if(hour==24)                                                        hour=0;                                     }                            }                   }                    keyscan();                   display(hour,minute);                         delay(1);         }}/***********************************************************                                     调时***********************************************************/void keyscan(){         if(key1==0)        //小时加1         {                   TR0=0;                   hour++;                            if(hour==24)                                     hour=0;                   delay(200)        ;                   TR0=1;         }         if(key2==0)                 // 小时减         {                   TR0=0;                   hour--;                            if(hour<0)                                     hour=23;                   delay(200)        ;                   TR0=1;         }          if(key3==0)                   // 分钟加         {                   TR0=0;                   minute++;                            if(minute==60)                                     minute=0;                   delay(200)        ;                   TR0=1;         }                    if(key4==0)                    //        分钟减         {                   TR0=0;                   minute--;                            if(minute<0)                                     minute=59;                   delay(200)        ;                   TR0=1;         }} /***********************************************************                                                初始化***********************************************************/void init(){         tt=0;         position=0;                        second=0;          minute=0;                 hour=0;            smg_q=1;         smg_b=1;         smg_s=1;         smg_g=1;         key1=1;         key2=1;          TMOD=0X01;           TH0=(65536-50000)/256;                 TL0=(65536-50000)%256;         EA=1;                         ET0=1;                       TR0=1;              } /***********************************************************                                                  定时器TO中断***********************************************************/void t0() interrupt 1{         TH0=(65536-50000)/256;                 TL0=(65536-50000)%256;         tt++;                                              } /***********************************************************                                          显示***********************************************************/void display(unsigned char hour,unsignedchar minute){         P0=0XFF;                                      switch(position)         {         case0:                                 smg_g=1;                   smg_q=0;                   P0=table[hour/10];                    break;          case1:                   smg_q=1;                           smg_b=0;                           P0=table[hour%10];                    if(tt>=10)                            P0&=0x7f;                  //小数点以半秒的时间闪烁                   break;          case2:                       smg_b=1;                                     smg_s=0;                                     P0=table[minute/10];                   break;         case3:                                          smg_s=1;                   smg_g=0;                   P0=table[minute%10];                   break;         }         position++;                        if(position>3)                   position=0;      } /***********************************************************                                                 延时***********************************************************/void delay(unsigned int time){                         unsignedint x,y;         for(x=time;x>0;x--)                   for(y=110;y>0;y--);}
-电子元器件采购网(www.ruidan.com)是本土元器件目录分销商,采用“小批量、现货、样品”销售模式,致力于满足客户多型号、高质量、快速交付的采购需求。 自建高效智能仓储,拥有自营库存超过50,000种,提供一站式正品现货采购、个性化解决方案、选型替代等多元化服务。
锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台