首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

LED数码显示电子时钟

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  数码显示  电子时钟
返回列表