• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

用C写的时钟,自己测试过了,时间精度还行,供朋友们参考!!!

/*P1接数码管的段,P3接八个位.显示,时时,分分,秒秒
P0.0,0.1,0.2接三个按键,调节时间.
采用24小时制*********************************/
#include
#define uchar unsigned char
#define uint unsigned int
#define off 0
#define on 1
uchar SEC,MIN,HOUR,DIGIT,FLASH; //秒,分,时,位
uint COUN; //4ms计数器,250次为1s
sbit P37=P3^7; //显示秒的I/O口
sbit P17=P1^7;
uchar data paragraph[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//0-10数字

/****************************************************************************************
定时器0的中断程序**/
void t0(void)interrupt 1 using 1
{TH0=0x4c;
TL0=0x00;
COUN=COUN+1; //计数器20ms加1,一直加50次到1s
  if(COUN==20) //如果COUN到250
  {COUN=off; //则清0
//FLASH=!FLASH; //秒取反
    SEC=SEC+1;} //秒加1
  if(SEC==60) //如果秒到60
{SEC=off; //则清0
MIN=MIN+1;} //秒进位后分加1
if(MIN==60) //如果分到60
{MIN=off; //则清0
HOUR=HOUR+1;} //分进位后时加1
if(HOUR==24) //如果时到24
   {HOUR=off;} //时清0,一天到重新
}

/*****************************************************************************************
毫秒延时程序**/
void delay(uchar i)
{uchar a,b;
while(i--)
  {for(a=0;a<5;a++)
   for(b=0;b<100;b++);
   }
}
/*****************************************************************************************
显示刷新程序**/
void refurbish(void)
{
     P1=paragraph[SEC%10]; //余数送P1
     P3=DIGIT; //位左移5
delay(1);

     P1=paragraph[SEC/10]; //整数送P1
     P3=DIGIT<<1; //位驱动4
     delay(1); //延时1ms

   P1=paragraph[MIN%10]; //余数送P1
   P17=off;
   P3=DIGIT<<2; //位左移3
   delay(1);

   P1=paragraph[MIN/10]; //整数送P1
   P3=DIGIT<<3; //位驱动2
   delay(1); //延时1ms

P1=paragraph[HOUR%10]; //余数送P1
P17=off;
P3=DIGIT<<4; //位左移1
delay(1);

P1=paragraph[HOUR/10]; //整数送P1
P3=DIGIT<<5; //位驱动
delay(1);
}
//*****************************************************************************************
//主程序
void main(void)
{P1=0xff;
P3=0xff;
DIGIT=0X01; //位选择
TMOD=0X01; //定时器T0开作于模试1(16位计数器)
TH0=0x4c;
TL0=0x00;
SEC=off; //秒清0
MIN=off; //分清0
HOUR=off; //时清0
COUN=off; //20ms计数器
TR0=on; //打开定时器0
EA=on; //打开总中断
ET0=on; //打开T0中断
while(1)
  refurbish();
}
全部回复(2)
正序查看
倒序查看
易陶
LV.2
2
2006-07-16 18:27
程序写的这么简单啊
这就是全部吗?
0
回复
bailsfi
LV.4
3
2006-07-25 11:58
@易陶
程序写的这么简单啊这就是全部吗?
还在改进,改好再发上来
0
回复