标题:
单片机时钟,显示时分秒,可按键设置.(用定时器和中断)
[打印本页]
作者:
yangsanyou
时间:
2018-11-5 12:30
标题:
单片机时钟,显示时分秒,可按键设置.(用定时器和中断)
单片机源程序如下:
#include"reg51.h"
sbit key=P3^4;
#define WEI P2
#define SEGNUM P0
unsigint addNum;
unsigned int h,m,s;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00 } ;
void delay (unsigned int num)
{
unsigned i,j;
for(i=num;i>0;i--)
for(j=120;j>0;j--);
}
void main()
{
TMOD=0x02;
TL0=TH0=6; //256次-6次
EA=1; //开中断允许位
ET0=1; //开中断允许位
TR0=1; //启动定时/计数器定时或计数
IT0=1; //边沿触发 (外部中断0)
EX0=1; //开中断允许位
IT1=1; //边沿触发 (外部中断1)
EX1=1; //开中断允许位
TR0=1; //启动定时/计数器定时或计数
while (1)
{
if(!key)
{
delay(10) ;
if(!key)
{
h++; while(!key) ;
}
}
WEI=0xfe; //显示位码
SEGNUM=table[h/10]; // h
delay(5); //十位
WEI=0xfd; //个位
SEGNUM=table[h%10];
delay(5);
WEI=0xfb;
SEGNUM=table[m/10]; //
delay(5);
WEI=0xf7;
SEGNUM=table[m%10];
delay(5);
WEI=0xef;
SEGNUM=table[s/10]; //
delay(5);
WEI=0xdf;
SEGNUM=table[s%10];
delay(5);
}
}
void timer0() interrupt 1 //
{
addNum++;
if(addNum==4000) //1000000/250 1秒除250次
{
s++; //如果一秒到了,s秒表数加一,addNum归零
addNum=0;
}
if(s==60) //如果秒为60,则清零,分加1
{
m++;
s=0;
}
if(m==60)
{
h++;
m=0;
}
if(h==24)
{
h=0;
}
}
void ex0( ) interrupt 0
{
s++; //表示外部中断来时的动作 (外部中断0)
}
void ex1( ) interrupt 2
{
m++;
}
复制代码
所有资料51hei提供下载:
时钟,显示时分秒,可按键设置.(用定时器和中断).rar
(16.31 KB, 下载次数: 61)
2018-11-5 12:29 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
woshijwh
时间:
2018-11-19 10:28
阻塞性按键
作者:
1498847856
时间:
2019-7-3 14:22
很好,帮助很大
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1