Board logo

标题: LED数码显示电子时钟 [打印本页]

作者: yuchengze    时间: 2016-10-20 13:55     标题: LED数码显示电子时钟

***********************************
//     LED数码显示电子时钟
//***********************************

//***********************************//程序编制思路:
//采用定时中断式数码管动态扫描.
//因为走时部分要求比较精确,故采用定时器自动装载式,用定时器2作为秒发生器,因为定时器2可以设置为16位为自动装载,
#include
#include
#define uchar unsigned char
sure_time (void);
bit dis;
uchar code LED_DATA[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //0~9数字数据
uchar data DATA_TEMP[8]; //显示缓存区,开机时显示00-00-00
uchar data digit; //移位变量(用于动态扫描)
static uchar data t,k,i;
static uchar data sec=0,min=55,hour=22;
main ()
{   
TMOD=0X01;  //定时器0
ET0=1;   //开定时器0中断
EA=1;   //开总中断
TH0=0XFC; //定时器0 定时1ms
TL0=0X18;
TR0=1;    //启动定时器
RCAP2H=0X3C; //定时器2 定时50ms
RCAP2L=0XB0;
ET2=1;
TR2=1;
digit=0xfe;
P3=0XFF;  //关闭显示
sure_time ();
DATA_TEMP[2]=0XBF;
DATA_TEMP[5]=0XBF;
while (1)
  {

  }
}
void displayscanf (void) interrupt 1  //动态显示扫描函数
{   

  TH0=0XFC;
  TL0=0X18;
     P0=DATA_TEMP;
  i++;
  P3=digit;
  digit=_crol_(digit,1);
  if (i>7)
    {
      i=0;
   digit=0xfe;
    }
}
void timer_server (void) interrupt 5     //时钟走时定时
{
  TF2=0;
  t++;
  if (t==20)
   {
     t=0;
  sec++;

  if (sec>59)
    {
      sec=0;
   min++;
  
   if (min>59)
   {
   min=0;
   hour++;
  
     if (hour>23) hour=0;
     
   DATA_TEMP[1]=LED_DATA[hour%10];  
    DATA_TEMP[0]=LED_DATA[hour/10];
   }
  DATA_TEMP[4]=LED_DATA[min%10];
   DATA_TEMP[3]=LED_DATA[min/10];
    }
DATA_TEMP[7]=LED_DATA[sec%10];
  DATA_TEMP[6]=LED_DATA[sec/10];
   }
   
}
sure_time (void)    //对时间初始化赋值,并更新DATA_TEMP数组里的数据
{
DATA_TEMP[1]=LED_DATA[hour%10];  
DATA_TEMP[0]=LED_DATA[hour/10];
DATA_TEMP[4]=LED_DATA[min%10];
    DATA_TEMP[3]=LED_DATA[min/10];
   DATA_TEMP[7]=LED_DATA[sec%10];
   DATA_TEMP[6]=LED_DATA[sec/10];
}

关键字:LED  数码显示  电子时钟




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0