微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 电子时钟显示,有惊喜,呵呵!

电子时钟显示,有惊喜,呵呵!

时间:10-02 整理:3721RD 点击:
#include < reg52.h >
#include <intrins.h>
sbit LS138A=P2^2;  //定义 138管脚
sbit LS138B=P2^3;
sbit LS138C=P2^4;
unsigned int LedNumVal,LedNumVa,LedOut[8];
// 此表为 LED 的字模            // 0    1    2    3    4    5    6   7    8    9    A    b    c    d    E    -    L   P    U    Hidden  _ (20)
unsigned char code Disp_Tab[] = { ~0xC0,~0xF9,~0xA4,~0xB0,~0x99,~0x92,~0x82,~0xF8,~0x80,~0x90,~0x88,~0x83,~0xC6,~0xA1,~0x86,~0xbf,~0xc7,~0x8c,~0xc1, ~0xff,  ~0xf7 };
/***********************************************************
purpose: 系统初始化
/**********************************************************/
void system_Ini()
{
     TMOD = 0x01; //选择模式0  13位计数 最大计数8192
  
   // TH0=0x1C;   //12.000M  预装初值
    //TL0=0x18;
  TH0 = (65536 - 50000)/255;
  TL0 = (65536 - 50000)%255;
     IE = 0x8A;   //中断
     TR0  = 1;    //开启T0定时器
}
void delay(unsigned int i)
{
    char j;
    for(i; i > 0; i--)
        for(j = 200; j > 0; j--);
}
/********主函数****/
main()
{
   system_Ini() ;


   while(1)
   {
   unsigned char i;
   if( LedNumVa==20)
    {
       LedNumVal++;
       LedNumVa=0;
       if(LedNumVal>=86400)LedNumVal=0;
    }
   
    //记数并显示
   if(LedNumVal>=36000)
         LedOut[0]=Disp_Tab[LedNumVal%36000/36000];
   if(LedNumVal>=3600)
         LedOut[1]=Disp_Tab[LedNumVal%36000/3600];
   if(LedNumVal>=600)
         LedOut[2]=Disp_Tab[LedNumVal%3600/600];
   if(LedNumVal>=60)
         LedOut[3]=Disp_Tab[LedNumVal%600/60];
   if(LedNumVal>=10)
         LedOut[4]=Disp_Tab[LedNumVal%60/10];
         LedOut[5]=Disp_Tab[LedNumVal%10];
  for( i=0; i<6; i++)  //位选
  {  
          P0 = LedOut[i];
   
   switch(i)      
      {     
   case 0:
     
        LS138A=0; LS138B=0; LS138C=0;
                            break;
                          
   case 1:
   
     
      LS138A=1; LS138B=0; LS138C=0;
                            break;
                          
   case 2:
   
      
       LS138A=0; LS138B=1; LS138C=0;
                            break;
                          
    case 3:
   
     
      LS138A=1; LS138B=1; LS138C=0;
                            break;
                           
   case 4:
   
     
       LS138A=0; LS138B=0; LS138C=1;
                            break;
                        
   case 5:
   
      
      LS138A=1; LS138B=0; LS138C=1;
                            break;
                        
      
               
   
      }
  delay(150);
  }
  }
}
/*************************************
[ T0 (1ms)中断] 中断
*************************************/
void T0zd(void) interrupt 1      //定时器1的中断
{
  //TH0 = 0xFc;    //12.000
  //TL0 = 0x18;
  TH0 = (65536 - 50000)/255;
  TL0 = (65536 - 50000)%255;
   LedNumVa++;
  
}
//本人是新人,请大家多多指教,多谢!                                                                    

顶贴。

我也是新人,交流交流,谢谢小编

希望有图有真相!那就更好了

学习一下

学习学习

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top