51单片机带整点报时

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
disdata[5]=s%10;//秒钟低位
for(i=0;i<6;i++)//循环显示
{
P1=0xff;
P1=seg7[disdata[i]];
P2=disp[i];
Delayms(2);//显示延时
}
}
void time0(void)interrupt 1 using 0 //时间计数函数
{
TH0=0xfc;//(65536-20000)/256;
{
BUZ =~BUZ;
Delayms(80);
}
if((m==59)&&(s==57))//判断时间符合低音条件
{
BUZ =~BUZ;
Delayms(80);
}
if((m==59)&&(s==59))//判断时间符合高音条件
{
BUZ =~BUZ;
Delayms(55);
}
}
void keyscan()//键盘扫描
unsigned char code seg7[]=
//{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管0-9码值
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共阴极数码管0-9码值
TL0=0x18;//(65536-20000)%256;
if(++tmcnt==1000)//计数1000次1秒
{
tmcnt=0;
s++;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++;
if(change==0&&h==12)//按下进制转换键为12进制
{h=0;}
if(change==1&&h==24)//未按下进制转换键为24进制
ms--;
}
}
void display()//扫描显示
{ unsigned char i;
disdata[0Hale Waihona Puke Baidu=h/10;//数据处理,小时高位
disdata[1]=h%10;//小时低位
disdata[2]=m/10;//分钟高位
disdata[3]=m%10;//分钟低位
disdata[4]=s/10;//秒钟高位
{h=0;}
}
}
}
}
void voice()//发声函数
{
if((m==59)&&(s==51))//判断时间符合低音条件
{
BUZ =~BUZ;
Delayms(80);
}
if((m==59)&&(s==53))//判断时间符合低音条件
{
BUZ =~BUZ;
Delayms(80);
}
if((m==59)&&(s==55))//判断时间符合低音条件
#include<reg51.h>
sbit BUZ =P3^3;
sbit HOURADD=P3^0;//小时加1
sbit MITADD=P3^1;//分钟加1
sbit change=P3^2;//进制转换
unsigned int tmcnt;//定时器计数
unsigned int h=0,m=59,s=50;//h为小时,m为分钟,s为秒钟
while(HOURADD==0);
h++;
if(h==24)
{h=0;}
}
}
if(MITADD==0)//判断是否按下分钟加1键
{
Delayms(10);
if(MITADD==0)
{
while(MITADD==0);
m++;
if(m==60)
{m=0;}
}
}
}
main()
{ unsigned int time();
TMOD=0x01;//软件启动计数器、工作方式为方式1
EA=1;
ET0=1;//允许定时计数器中断
TR0=1;//启动计数
while(1)
{ keyscan();//扫描键盘
display();//显示
voice();//发声
}
}
结束
unsigned char code disp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位扫描
unsigned char data disdata[6];
void Delayms(int ms) //延时函数
{
while(ms)
{
unsigned char i;
for (i=0; i<120; i++);
{
if(change==0)//判断是否按下进制转换键,
{
Delayms(10);
if(change==0&&h>=12)//若h>12,则执行h-12,转换成12进制
{ h=h-12;}
}
if(HOURADD==0)//判断是否按下小时加1键
{
Delayms(10);
if(HOURADD==0)
{
相关文档
最新文档