带整点报时的时钟

单片机原理与应用

实训报告

题目:具有整点报时带闹钟时间可调的数字钟 学院:盐 城 工 业 职 业 技 术 学 院 班级:计 控 1201 姓名:孙 慧 芳 学号:

完成日期: 2014/12/12

目录

1. 系统整体设计........................................................................................................... 3

1.1 系统设计要求.................................................................................................. 3

1.2 系统整体设计方案........................................................ 错误!未定义书签。

2. 系统硬件设计........................................................................................................... 3

2.1 单片机的电子闹钟系统框图 .......................................................................... 4

2.2 显示及控制模块.............................................................................................. 4

3. 系统软件设计........................................................................................................... 5

3.1 软件计时的分析与计算 ................................................................................ 5

3.2系统软件设计 ................................................................................................. 5

4. 结语........................................................................................................................... 6

5. 参考文献................................................................................................................... 7

附录1:......................................................................................................................... 8

附录二............................................................................................................................ 9

1. 系统整体设计

1.1 系统设计要求

1. 数字时钟显示:小时(两位)分钟(两位)秒钟(两位) 2. 时间可调,要求时、分、秒都可调

3. 可以设定闹铃,当闹铃时间到,蜂鸣器发出闹铃声音。 4. 具有整点报时功能。

1.2 系统整体设计方案

用内部定时器中断计时,三个两位数码管分别显示秒、分、时,STC89C52芯片P2口控制数码管选通,P0口输出数值显示。P3.5口输出高低电平驱动蜂鸣器做闹钟用。 设计功能如下:

(1)用6位LED数码管显示时、分、秒。 (2)可以设定时时间、修改定时时间。 (3)通过按键控制闹铃启动和停止。

(4)定时时间到通过蜂鸣器发出报警器,同时伴有灯光闪烁,由复位键停止报警。

(5)显示时间可调节

2. 系统硬件设计

2.1 系统框图如下:

基于80C51单片机的电子闹钟系统框图

2.2 显示及控制模块

3. 系统软件设计

3.1 软件计时的分析与计算

单片机内部定时器有4种工作模式,方式0是13位计数器,由于计时时间过短,中断频率高,所以不选用此模式;方式2是自动重装式计数器,是8位计数器,同样中断频率过高;方式3也是8位计数器;方式1是16位计数器,综合考虑,选用方式1做精确计时。由于51单片机是12分频,因此机器周期=晶振频率/12。在该设计中,选用频率为12MHz的晶振,因此机器周期=1μs。定时1s需要1000000个机器周期,因此通过20次定时器中断完成1s的定时,每次完成50000个周期的定时,因此每次给定时器的初值应该是TH0=B0H,TL0=3CH。

3.2 系统软件设计

设计两套存储方案,一套存储时钟,一套存储闹钟,两者互不干涉,只有当两者相等时才会调用闹钟播放子程序,而当每次整点时则会调用整点报时子程序。

本设计有调用T0中断,并有以下子程序: void delay(void) //延时子程序

void delay2(void) //1420专用延时子程序 void play(unsigned char temp) //1420播放子程序 void display(void) //显示子程序 void rdisplay(void) //闹钟显示子程序 void ring(void) //闹钟控制子程序 void examring(void) //闹钟播放子程序 void zhengdian(void) //整点报时子程序

4. 结语

通过对该作品的制作,了解了各个模块之间相互协同工作的重要性,初步掌握如何控制好各个模块之间的关系。通过对80C51的使用,了解了语音芯片在设计中的重要作用,有益于对单片机的进一步学习。

通过本次实验,简单模拟了一个时钟的基本功能。可以方便地设定时间,设定闹铃。预设定时间到整点有提示声,能够修改时间的时、分、秒。此系统设计简单、操作方便、程序可靠,具有一定的实用性。另外,在此基础上还可以继续完善和改进,如七彩灯显示等功能,使电子闹钟系统更加美观和智能化。 本次电子综合实践也锻炼了我们的动手能力,但最重要的是锻炼了如何解决问题的能力

5. 参考文献:

1、胡汉才.单片机原理及其接口技术.北京:清华大学出版社,2005 2、阎石.数字电子技术基础.北京:高等教育出版社,2001

3、童诗白 华成英.模拟电子技术基础.北京:高等教育出版社,2001 4、郁有文等.传感器原理及工程应用.西安:西安电子科技大学出版社,2008 5、彭伟.单片机C语言程序设计实训100例. 北京:电子工业出版社,2009 6、潘晓宁.单片机程序设计实践教程.北京:清华大学出版社,2009 7、楼然苗.单片机课程设计指导.北京:机械工业出版社,2007

8、彭芬。单片机C语言应用技术。北京 西安电子科技大学出版社,2009

附录1:

附录二

程序代码如下: #include #define tl 0xba; #define th 0x3c; sbit time=P1^0; //时间设置 sbit timer=P1^1; //闹钟设置 sbit add=P1^2; //加 sbit dec=P1^3; //减 sbit speaker=P3^5; //闹钟输出 bit disp_sd; //数码管闪动显示标志位 bit disp_ms; //数码管显示时间/闹钟标志位 bit disp_sdt; //数码管闪动间隔反转标志位 bit zhengdian=0; //整点报时标志位

unsigned char code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数字0-9的编码

//unsigned char code led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}; //数字0-9的编码

unsigned char time_cc,timer_cc; //调时计数器 unsigned char count0,count1,second,minit,hour; //时间时分秒 unsigned char second1,minit1,hour1; //闹钟时分秒 unsigned char hour_zd; //整点小时记录 void delay(void) { unsigned int i; for(i=0;i

void display(void) { if(disp_ms==0) { if(disp_sd==0) { P0=led[hour/10]; P2=0xFE; delay(); P2=0xFF; P0=0x00; P0=led[hour%10]; P2=0xFD;

delay(); P2=0xFF; P0=0x00;

P0=0x80; P2=0xFB; delay(); P2=0xFF; P0=0x00;

P0=led[minit/10]; P2=0xF7; delay(); P2=0xFF; P0=0x00; P0=led[minit%10]; P2=0xEF; delay(); P2=0xFF; P0=0x00;

P0=0x80; P2=0xDF; delay(); P2=0xFF; P0=0x00; P0=led[second/10]; P2=0xBF; delay(); P2=0xFF;

P0=0x00;

P0=led[second%10]; P2=0x7F; delay(); P2=0xFF; P0=0x00; } else {

if(time_cc==0x01)

{

if(disp_sdt==1)

P0=led[hour/10];

else

P0=0x00;

P2=0xFE;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[hour%10];

else

P0=0x00;

P2=0xFD;

delay();

P2=0xFF;

}

else

{

P0=led[hour/10];

P2=0xFE;

delay();

P2=0xFF;

P0=led[hour%10];

P2=0xFD;

delay();

P2=0xFF;

}

P0=0x80;

P2=0xFB;

delay();

P2=0xFF;

if(time_cc==0x02)

{

if(disp_sdt==1)

P0=led[minit/10];

else

P0=0x00;

P2=0xF7;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[minit%10];

else

P0=0x00;

P2=0xEF;

delay();

P2=0xFF;

}

else

{

P0=led[minit/10];

P2=0xF7;

delay();

P2=0xFF;

P0=led[minit%10];

P2=0xEF;

delay();

P2=0xFF;

}

P0=0x80;

P2=0xDF;

delay();

P2=0xFF;

if(time_cc==0x03)

{

if(disp_sdt==1)

P0=led[second/10];

else

P0=0x00;

P2=0xBF;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[second%10];

else

P0=0x00;

P2=0x7F;

delay();

P2=0xFF;

}

else

{

P0=led[second/10];

P2=0xBF;

delay();

P2=0xFF;

P0=led[second%10];

P2=0x7F;

delay();

P2=0xFF;

}

}

}

else

{

if(disp_sd==0)

{

P0=led[hour1/10];

P2=0xFE;

delay();

P2=0xFF;

P0=led[hour1%10];

P2=0xFD;

delay();

P2=0xFF;

P0=0x80;

P2=0xFB;

delay();

P2=0xFF;

P0=led[minit1/10];

P2=0xF7;

delay();

P2=0xFF;

P0=led[minit1%10];

P2=0xEF;

delay();

P2=0xFF;

P0=0x80;

P2=0xDF;

delay();

P2=0xFF;

P0=led[second1/10];

P2=0xBF;

delay();

P2=0xFF;

P0=led[second1%10];

P2=0x7F;

delay();

P2=0xFF;

}

else

{

if(timer_cc==0x01)

{

if(disp_sdt==1)

P0=led[hour1/10];

else

P0=0x00;

P2=0xFE;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[hour1%10];

else

P0=0x00;

P2=0xFD;

delay();

P2=0xFF;

}

else

{

P0=led[hour1/10];

P2=0xFE;

delay();

P2=0xFF;

P0=led[hour1%10];

P2=0xFD;

delay();

P2=0xFF;

}

P0=0x80;

P2=0xFB;

delay();

P2=0xFF;

if(timer_cc==0x02)

{

if(disp_sdt==1)

P0=led[minit1/10];

else

P0=0x00;

P2=0xF7;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[minit1%10];

else

P0=0x00;

P2=0xEF;

delay();

P2=0xFF;

}

else

{

P0=led[minit1/10];

P2=0xF7;

delay();

P2=0xFF;

P0=led[minit1%10];

P2=0xEF;

delay();

P2=0xFF;

}

P0=0x80;

P2=0xDF;

delay();

P2=0xFF;

if(timer_cc==0x03)

{

if(disp_sdt==1)

P0=led[second1/10];

else

P0=0x00;

P2=0xBF;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[second1%10];

else

P0=0x00;

P2=0x7F;

delay();

P2=0xFF;

}

else

{

P0=led[second1/10];

P2=0xBF;

delay();

P2=0xFF;

P0=led[second1%10];

P2=0x7F;

delay();

P2=0xFF;

}

}

}

}

void key_scan(void)

{

unsigned int i;

if(time==0)

{

speaker=1;

for(i=0;i

display();

if(time==0)

{

TR0=0;

do

display();

while(time==0);

disp_sd=1;

disp_ms=0;

time_cc++;

if(time_cc==4)

{

TR0=1;

time_cc=0;

disp_sd=0;

}

}

}

if(timer==0)

{

speaker=1;

for(i=0;i

{

display();

}

if(timer==0)

{

do

display();

while(timer==0);

disp_sd=1;

disp_ms=1;

timer_cc++;

if(timer_cc==4)

{

timer_cc=0;

disp_sd=0;

disp_ms=0;

}

}

} //数码管闪动显示 //显示模式为闹钟时间//闪动关闭 //切换到时间模式

if(add==0) { for(i=0;i23) hour=23; break;} case (0x02): { minit++; if(minit>59) minit=59; break;} case (0x03): { second++;if(second>59) second=59; break;} default: break; } } else { switch(timer_cc) { case (0x01): {if(hour1==23) hour1=23; else hour1++; break;} case (0x02): {if(minit1==59) minit1=59; else minit1++; break;} case (0x03): {if(second1==59) second1=59; else second1++; break;} default:break; } } } } if(dec==0) { for(i=0;i

while(dec==0);

if(disp_ms==0)

{

switch(time_cc)

{

case (0x01): {if(hour==0) hour=0; else hour--; break;} case (0x02): {if(minit==0) minit=0; else minit--; break;} case (0x03): {if(second==0) second=0; else second--; break;} default: break;

}

}

else

{

switch(timer_cc)

{

case (0x01): {if(hour1==0) hour1=0; else hour1--; break;} case (0x02): {if(minit1==0) minit1=0; else minit1--; break;} case (0x03): {if(second1==0) second1=0; else second1--; break;} default: break;

}

}

}

}

}

void timer_alam(void)

{

if((disp_ms==0)&&(disp_sd==0)) //正常运行时间的状态下 {

if((hour1==hour)&&(minit1==minit))

{

speaker=disp_sdt;

}

else

{

if(zhengdian==1)

{

speaker=disp_sdt;

}

else

speaker=1;

}

}

}

//3、主函数*************************************************

void main(void)

{

second=0; //时间初始化为00:00:00

minit=0;

hour=0;

second1=0; //闹钟默认为12:00:00

minit1=0;

hour1=12;

count0=0x00;

count1=0x00;

P1=0xFF;

TMOD=0x11;

TL0=tl;

TH0=th;

TL1=tl;

TH1=th;

EA=1;

ET0=1;

ET1=1;

TR0=1;

TR1=1;

while(1)

{

key_scan();

display();

timer_alam();

}

}

//**********4、整点报时中断服务函数************************************** void time0_int(void) interrupt 1

{

TL0=tl;

TH0=th;

TR0=1;

count0++;

if(count0==20)

{

count0=0;

second++;

if(hour_zd==second) //报时到小时数后关闭报时标志。 zhengdian=0;

if(second==60)

{

second=0;

minit++;

if(minit==60)

{

zhengdian=1; //开启整点报时

minit=0;

hour++;

hour_zd=hour;

if(hour_zd>12)

hour_zd=hour_zd-12; //12小时制报时方式

if(hour==24)

{

hour=0;

}

}

}

}

}

//***5、调时中断服务函数**************************************

void time1_int(void) interrupt 3

{

TL1=tl;

TH1=th;

TR1=1;

count1++;

if(count1==10)

{

count1=0;

disp_sdt=~disp_sdt;

}

}

21

单片机原理与应用

实训报告

题目:具有整点报时带闹钟时间可调的数字钟 学院:盐 城 工 业 职 业 技 术 学 院 班级:计 控 1201 姓名:孙 慧 芳 学号:

完成日期: 2014/12/12

目录

1. 系统整体设计........................................................................................................... 3

1.1 系统设计要求.................................................................................................. 3

1.2 系统整体设计方案........................................................ 错误!未定义书签。

2. 系统硬件设计........................................................................................................... 3

2.1 单片机的电子闹钟系统框图 .......................................................................... 4

2.2 显示及控制模块.............................................................................................. 4

3. 系统软件设计........................................................................................................... 5

3.1 软件计时的分析与计算 ................................................................................ 5

3.2系统软件设计 ................................................................................................. 5

4. 结语........................................................................................................................... 6

5. 参考文献................................................................................................................... 7

附录1:......................................................................................................................... 8

附录二............................................................................................................................ 9

1. 系统整体设计

1.1 系统设计要求

1. 数字时钟显示:小时(两位)分钟(两位)秒钟(两位) 2. 时间可调,要求时、分、秒都可调

3. 可以设定闹铃,当闹铃时间到,蜂鸣器发出闹铃声音。 4. 具有整点报时功能。

1.2 系统整体设计方案

用内部定时器中断计时,三个两位数码管分别显示秒、分、时,STC89C52芯片P2口控制数码管选通,P0口输出数值显示。P3.5口输出高低电平驱动蜂鸣器做闹钟用。 设计功能如下:

(1)用6位LED数码管显示时、分、秒。 (2)可以设定时时间、修改定时时间。 (3)通过按键控制闹铃启动和停止。

(4)定时时间到通过蜂鸣器发出报警器,同时伴有灯光闪烁,由复位键停止报警。

(5)显示时间可调节

2. 系统硬件设计

2.1 系统框图如下:

基于80C51单片机的电子闹钟系统框图

2.2 显示及控制模块

3. 系统软件设计

3.1 软件计时的分析与计算

单片机内部定时器有4种工作模式,方式0是13位计数器,由于计时时间过短,中断频率高,所以不选用此模式;方式2是自动重装式计数器,是8位计数器,同样中断频率过高;方式3也是8位计数器;方式1是16位计数器,综合考虑,选用方式1做精确计时。由于51单片机是12分频,因此机器周期=晶振频率/12。在该设计中,选用频率为12MHz的晶振,因此机器周期=1μs。定时1s需要1000000个机器周期,因此通过20次定时器中断完成1s的定时,每次完成50000个周期的定时,因此每次给定时器的初值应该是TH0=B0H,TL0=3CH。

3.2 系统软件设计

设计两套存储方案,一套存储时钟,一套存储闹钟,两者互不干涉,只有当两者相等时才会调用闹钟播放子程序,而当每次整点时则会调用整点报时子程序。

本设计有调用T0中断,并有以下子程序: void delay(void) //延时子程序

void delay2(void) //1420专用延时子程序 void play(unsigned char temp) //1420播放子程序 void display(void) //显示子程序 void rdisplay(void) //闹钟显示子程序 void ring(void) //闹钟控制子程序 void examring(void) //闹钟播放子程序 void zhengdian(void) //整点报时子程序

4. 结语

通过对该作品的制作,了解了各个模块之间相互协同工作的重要性,初步掌握如何控制好各个模块之间的关系。通过对80C51的使用,了解了语音芯片在设计中的重要作用,有益于对单片机的进一步学习。

通过本次实验,简单模拟了一个时钟的基本功能。可以方便地设定时间,设定闹铃。预设定时间到整点有提示声,能够修改时间的时、分、秒。此系统设计简单、操作方便、程序可靠,具有一定的实用性。另外,在此基础上还可以继续完善和改进,如七彩灯显示等功能,使电子闹钟系统更加美观和智能化。 本次电子综合实践也锻炼了我们的动手能力,但最重要的是锻炼了如何解决问题的能力

5. 参考文献:

1、胡汉才.单片机原理及其接口技术.北京:清华大学出版社,2005 2、阎石.数字电子技术基础.北京:高等教育出版社,2001

3、童诗白 华成英.模拟电子技术基础.北京:高等教育出版社,2001 4、郁有文等.传感器原理及工程应用.西安:西安电子科技大学出版社,2008 5、彭伟.单片机C语言程序设计实训100例. 北京:电子工业出版社,2009 6、潘晓宁.单片机程序设计实践教程.北京:清华大学出版社,2009 7、楼然苗.单片机课程设计指导.北京:机械工业出版社,2007

8、彭芬。单片机C语言应用技术。北京 西安电子科技大学出版社,2009

附录1:

附录二

程序代码如下: #include #define tl 0xba; #define th 0x3c; sbit time=P1^0; //时间设置 sbit timer=P1^1; //闹钟设置 sbit add=P1^2; //加 sbit dec=P1^3; //减 sbit speaker=P3^5; //闹钟输出 bit disp_sd; //数码管闪动显示标志位 bit disp_ms; //数码管显示时间/闹钟标志位 bit disp_sdt; //数码管闪动间隔反转标志位 bit zhengdian=0; //整点报时标志位

unsigned char code led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数字0-9的编码

//unsigned char code led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}; //数字0-9的编码

unsigned char time_cc,timer_cc; //调时计数器 unsigned char count0,count1,second,minit,hour; //时间时分秒 unsigned char second1,minit1,hour1; //闹钟时分秒 unsigned char hour_zd; //整点小时记录 void delay(void) { unsigned int i; for(i=0;i

void display(void) { if(disp_ms==0) { if(disp_sd==0) { P0=led[hour/10]; P2=0xFE; delay(); P2=0xFF; P0=0x00; P0=led[hour%10]; P2=0xFD;

delay(); P2=0xFF; P0=0x00;

P0=0x80; P2=0xFB; delay(); P2=0xFF; P0=0x00;

P0=led[minit/10]; P2=0xF7; delay(); P2=0xFF; P0=0x00; P0=led[minit%10]; P2=0xEF; delay(); P2=0xFF; P0=0x00;

P0=0x80; P2=0xDF; delay(); P2=0xFF; P0=0x00; P0=led[second/10]; P2=0xBF; delay(); P2=0xFF;

P0=0x00;

P0=led[second%10]; P2=0x7F; delay(); P2=0xFF; P0=0x00; } else {

if(time_cc==0x01)

{

if(disp_sdt==1)

P0=led[hour/10];

else

P0=0x00;

P2=0xFE;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[hour%10];

else

P0=0x00;

P2=0xFD;

delay();

P2=0xFF;

}

else

{

P0=led[hour/10];

P2=0xFE;

delay();

P2=0xFF;

P0=led[hour%10];

P2=0xFD;

delay();

P2=0xFF;

}

P0=0x80;

P2=0xFB;

delay();

P2=0xFF;

if(time_cc==0x02)

{

if(disp_sdt==1)

P0=led[minit/10];

else

P0=0x00;

P2=0xF7;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[minit%10];

else

P0=0x00;

P2=0xEF;

delay();

P2=0xFF;

}

else

{

P0=led[minit/10];

P2=0xF7;

delay();

P2=0xFF;

P0=led[minit%10];

P2=0xEF;

delay();

P2=0xFF;

}

P0=0x80;

P2=0xDF;

delay();

P2=0xFF;

if(time_cc==0x03)

{

if(disp_sdt==1)

P0=led[second/10];

else

P0=0x00;

P2=0xBF;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[second%10];

else

P0=0x00;

P2=0x7F;

delay();

P2=0xFF;

}

else

{

P0=led[second/10];

P2=0xBF;

delay();

P2=0xFF;

P0=led[second%10];

P2=0x7F;

delay();

P2=0xFF;

}

}

}

else

{

if(disp_sd==0)

{

P0=led[hour1/10];

P2=0xFE;

delay();

P2=0xFF;

P0=led[hour1%10];

P2=0xFD;

delay();

P2=0xFF;

P0=0x80;

P2=0xFB;

delay();

P2=0xFF;

P0=led[minit1/10];

P2=0xF7;

delay();

P2=0xFF;

P0=led[minit1%10];

P2=0xEF;

delay();

P2=0xFF;

P0=0x80;

P2=0xDF;

delay();

P2=0xFF;

P0=led[second1/10];

P2=0xBF;

delay();

P2=0xFF;

P0=led[second1%10];

P2=0x7F;

delay();

P2=0xFF;

}

else

{

if(timer_cc==0x01)

{

if(disp_sdt==1)

P0=led[hour1/10];

else

P0=0x00;

P2=0xFE;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[hour1%10];

else

P0=0x00;

P2=0xFD;

delay();

P2=0xFF;

}

else

{

P0=led[hour1/10];

P2=0xFE;

delay();

P2=0xFF;

P0=led[hour1%10];

P2=0xFD;

delay();

P2=0xFF;

}

P0=0x80;

P2=0xFB;

delay();

P2=0xFF;

if(timer_cc==0x02)

{

if(disp_sdt==1)

P0=led[minit1/10];

else

P0=0x00;

P2=0xF7;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[minit1%10];

else

P0=0x00;

P2=0xEF;

delay();

P2=0xFF;

}

else

{

P0=led[minit1/10];

P2=0xF7;

delay();

P2=0xFF;

P0=led[minit1%10];

P2=0xEF;

delay();

P2=0xFF;

}

P0=0x80;

P2=0xDF;

delay();

P2=0xFF;

if(timer_cc==0x03)

{

if(disp_sdt==1)

P0=led[second1/10];

else

P0=0x00;

P2=0xBF;

delay();

P2=0xFF;

if(disp_sdt==1)

P0=led[second1%10];

else

P0=0x00;

P2=0x7F;

delay();

P2=0xFF;

}

else

{

P0=led[second1/10];

P2=0xBF;

delay();

P2=0xFF;

P0=led[second1%10];

P2=0x7F;

delay();

P2=0xFF;

}

}

}

}

void key_scan(void)

{

unsigned int i;

if(time==0)

{

speaker=1;

for(i=0;i

display();

if(time==0)

{

TR0=0;

do

display();

while(time==0);

disp_sd=1;

disp_ms=0;

time_cc++;

if(time_cc==4)

{

TR0=1;

time_cc=0;

disp_sd=0;

}

}

}

if(timer==0)

{

speaker=1;

for(i=0;i

{

display();

}

if(timer==0)

{

do

display();

while(timer==0);

disp_sd=1;

disp_ms=1;

timer_cc++;

if(timer_cc==4)

{

timer_cc=0;

disp_sd=0;

disp_ms=0;

}

}

} //数码管闪动显示 //显示模式为闹钟时间//闪动关闭 //切换到时间模式

if(add==0) { for(i=0;i23) hour=23; break;} case (0x02): { minit++; if(minit>59) minit=59; break;} case (0x03): { second++;if(second>59) second=59; break;} default: break; } } else { switch(timer_cc) { case (0x01): {if(hour1==23) hour1=23; else hour1++; break;} case (0x02): {if(minit1==59) minit1=59; else minit1++; break;} case (0x03): {if(second1==59) second1=59; else second1++; break;} default:break; } } } } if(dec==0) { for(i=0;i

while(dec==0);

if(disp_ms==0)

{

switch(time_cc)

{

case (0x01): {if(hour==0) hour=0; else hour--; break;} case (0x02): {if(minit==0) minit=0; else minit--; break;} case (0x03): {if(second==0) second=0; else second--; break;} default: break;

}

}

else

{

switch(timer_cc)

{

case (0x01): {if(hour1==0) hour1=0; else hour1--; break;} case (0x02): {if(minit1==0) minit1=0; else minit1--; break;} case (0x03): {if(second1==0) second1=0; else second1--; break;} default: break;

}

}

}

}

}

void timer_alam(void)

{

if((disp_ms==0)&&(disp_sd==0)) //正常运行时间的状态下 {

if((hour1==hour)&&(minit1==minit))

{

speaker=disp_sdt;

}

else

{

if(zhengdian==1)

{

speaker=disp_sdt;

}

else

speaker=1;

}

}

}

//3、主函数*************************************************

void main(void)

{

second=0; //时间初始化为00:00:00

minit=0;

hour=0;

second1=0; //闹钟默认为12:00:00

minit1=0;

hour1=12;

count0=0x00;

count1=0x00;

P1=0xFF;

TMOD=0x11;

TL0=tl;

TH0=th;

TL1=tl;

TH1=th;

EA=1;

ET0=1;

ET1=1;

TR0=1;

TR1=1;

while(1)

{

key_scan();

display();

timer_alam();

}

}

//**********4、整点报时中断服务函数************************************** void time0_int(void) interrupt 1

{

TL0=tl;

TH0=th;

TR0=1;

count0++;

if(count0==20)

{

count0=0;

second++;

if(hour_zd==second) //报时到小时数后关闭报时标志。 zhengdian=0;

if(second==60)

{

second=0;

minit++;

if(minit==60)

{

zhengdian=1; //开启整点报时

minit=0;

hour++;

hour_zd=hour;

if(hour_zd>12)

hour_zd=hour_zd-12; //12小时制报时方式

if(hour==24)

{

hour=0;

}

}

}

}

}

//***5、调时中断服务函数**************************************

void time1_int(void) interrupt 3

{

TL1=tl;

TH1=th;

TR1=1;

count1++;

if(count1==10)

{

count1=0;

disp_sdt=~disp_sdt;

}

}

21


    相关文章

    数字钟电路

    情境3 任务1 数字钟的设计与制作 一.工作原理 1.计时电路: 计时电路共分三部分:计秒.计分和计时.其中计秒和计分都是60进制,而计时为24进制. ⑴计秒.计分电路 ●个位向十位的进位实现. 用两片74LS90异步计数器接成一个异步的6 ...

    数字电子钟实验报告

    <开放创新实践1>报告 题 目 学 年2014-2015 学 期: 1 专 业:电子信息工程 班 级 学 号姓 名 学 号姓 名陈锦锋 指导教师: 王 阳 时 间: 2014年 12 月 21日- 2015年 1 月 4 日 浙 ...

    1多功能数字钟设计

    EDA(二)实验报告 多功能数字钟设计 摘要 本实验根据设计要求,利用QuartusII 软件设计了一个多功能闹钟,并对其进行编译.综合.仿真.调试.下载到器件中从而实现功能.本次实验设计的闹钟具有24小时正常计时.校时.校分.整点报时.显 ...

    电子钟课程设计心得

    这次电子技术课程设计,我很用心的去完成,当总原理图绘好的那一刻,心里有说不出的满足感.从这次课程设计中,我真正学到了很多有用的知识. 拿到课题后,我首先将<数字电子技术>中有关本次设计的内容复习了一遍,比如七段译码显示器.计数器 ...

    数字钟课程设计心得

    一.设计目的 数字钟是一种用数字电路技术实现时.分.秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用. 数字钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路. ...

    智能仪器论文

    目: 程: 名: 业: 级: 号: 导教师: 课 程 论 文 数字电子时钟 职称: 年 月 日 题课 姓 专班学指 数字电子时钟 摘要:20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会 ...

    二年级奥数时钟问题

    时钟问题一 专题解析 同学们已经学习了" 时.分.秒", 认识了时钟, 知道了1时=60分,1分=60秒. 这一讲我们就来研究钟和时间的计算问题. 研究钟面和时间的计算问题, 要知道钟面上的时针.分针所在的某一特定位置的 ...

    电子钟设计

    摘要: (1)电子钟的发展及应用 1957年,Ventura发明了世界上第一个电子表,从而奠定了电子时钟的基础,电子时钟开始迅速发展起来.现代的电子时钟是基于单片机的一种计时工具,采用延时程序产生一定的时间中断,用于一秒的定义,通过计数方式 ...

    数字密码锁

    前 言 20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗透了社会的各个领域,大力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步改善,产品更新换代的节奏越来越快.作为电子专业的在校大学生为适 ...