倒计时闹钟。(主要定时器、外部中断和外部电路)
有源蜂鸣器鸣响,4位数码管倒计时显示剩余时间。 可以直接使用shumaguan_c电路图 要求: 1. 每2分钟蜂鸣8秒。(包含长时间定时和蜂鸣器鸣响控制) 2.开机后数码管显示0200 (分钟 秒数),并开始倒计时每秒递减, 时间到达00 08时,鸣响8秒,直到显示0000时,鸣响停止。 由外部中断0实现按键,控制倒计时过程的暂停或继续。 由外部中断1实现按键,可以在鸣响期间停止鸣响,不影响计时。 3. 上述过程反复执行
一、描述和设计要求
1.1 描述1、每2分钟蜂鸣8秒。(包含长时间定时和蜂鸣器鸣响控制) 2、开机后数码管显示02 00 (分钟 秒数),并开始倒计时每秒递减, 时间到达00 08时,鸣响8秒,直到显示00 00时,鸣响停止。 3、由外部中断0实现按键,控制倒计时过程的暂停或继续。 由外部中断1实现按键,可以在鸣响期间停止鸣响,不影响计时。 4、上述过程反复执行。 1.2 技术指标(1) 所使用的CPU引脚,中断类型等参数;
(2) 定时器时钟周期是50毫秒,定时的周期是2分钟; (3)其他涉及的参数 采用的是四位共阳数码管;蜂鸣器是由三极管作为开关控制。 二、实现方案和可行性分析
2.1 实现思路和可行性分析(1) 实现思路: 第一步:显示数码管函数
voiddisplay_time(unsigned char fen,unsigned char miao)
{ unsigned char i;
unsigned char f[4];
f[0]=fen/10;
f[1]=fen%10;
f[2]=miao/10;
f[3]=miao%10;
for(i=0;i<4;i++)
{
P2=wei;
P0=~duanma[f];
delay_ms(1);
}
}
第二步:采用定时器0倒计时
void Timer0()interrupt1
{
TL0 = 0xB0;
TH0 = 0x3C;
time++;
if(time>20)
{
time=0;
miao--;
}
if(miao<0)
{
miao=59;
fen--;
}
if(fen==0&&miao==0&&time==19)
{
time=0;
miao=0;
fen=2;
}
}
第三步:采用外部中断0和1 void key() interrupt 0 { if(key0==0) {delay_ms(1); if(key0==0) { TR0 =!TR0; } } } void key_() interrupt 2 { if(key1==0) {delay_ms(1); if(key1==0) { TR0 =1; n=1; } } } (2) 可行性分析: 1、数码管显示模块: 采用的是四位共阳数码管,其数码管的段码引脚接到单片机的P0^0~P0^7;数码管的位码则是由单片机P2^4~P2^7引脚输出控制四个三极管的基极,当三极管的基极为低电平时,三极管导通从而控制数码管位码。 2、外部中断按键控制模块 采用按键按下使外部中断0/1的引脚P3^3/P3^4接地,从而使单片机执行外部中断里面的程序,即由外部中断0实现按键,控制倒计时过程的暂停或继续, 由外部中断1实现按键,可以在鸣响期间停止鸣响,不影响计时。 3、蜂鸣器模块 蜂鸣器模块是采用单片机的P3^7引脚控制三极管的基极,当三极管的基极为低电平时,三极管导通从而控制蜂鸣器的鸣叫。 2.2 流程图file:///C:/Users/LSC/AppData/Local/Temp/msohtmlclip1/01/clip_image002.jpg 三、电路描述和程序实现
3.1 电路连接图file:///C:/Users/LSC/AppData/Local/Temp/msohtmlclip1/01/clip_image004.jpg 3.2 程序代码void main() { Timer0Init(); EX0_Init(); n=1; while(1) { display_time(fen,miao); if(key1==1) { if(fen==0&&miao<9) { n=!n; delay_ms(1); } } } } 四、运行结果(1) 涉及的数值结果, 以图表的形式给出
(2) 实验板运行状态的照片, 主要涉及LED和数码管等显示环节的显示内容的变化。 开机数码管的初始状态 时间到达00 08时,鸣响8秒 file:///C:/Users/LSC/AppData/Local/Temp/msohtmlclip1/01/clip_image006.jpg file:///C:/Users/LSC/AppData/Local/Temp/msohtmlclip1/01/clip_image008.jpg 时间到达00 00时,鸣响停止 到计时结束后,自动回到初始状态 |