Timer

1 post

80C51单片机Proteus仿真实验:设计一个可调时、定时报警的时钟

功能 使用单片机定时器中断计时; 实现时、分、秒循环计时; 可以使用4×4键盘调节时钟时间; 可以设置报警时间,报警响两秒; 按下按键具有声音反馈; 调节数码管显示器中指定位置的时间时,数码管对应的位置闪烁。 仿真工具 Windows 10 x64 Proteus Professional 8.9 SP0 Keil C51 Version 9.59 仿真器件选型 单片机:80C51,时钟频率(Clock Frequency)默认12MHz; 数码管:7SEG-MPX8-CA-BLUE,该数码管为共阳极7段8位蓝色数码管; 蜂鸣器:BUZZER,工作电压(Operating Voltage)调为5V; 电阻:RES,电阻阻值(Resistance)调为1k; 三极管:PNP; 键盘:KEYPAD-SMALLCALC,该键盘为4*4计算器键盘; 排阻:RESPACK-8,作P0口上拉电阻; 电源:POWER两个; 接地:GROUND一个; 仿真器件连接方式及最终实验效果图 实现原理 main函数 main函数是程序入口,其中有三个模式: 模式0(mode=0):为显示计时模式,程序一运行默认进入该模式,并且程序立即从0时0分0秒开始计时。当处在其它模式时,按“÷”键便可返回模式0; 模式1(mode=1):为报警设定模式,按“×”键进入该模式。进入后可以设定报警时间,当到达报警时间时,蜂鸣器持续蜂鸣两秒钟。另外,报警时间默认值为0时0分0秒,即刚启动程序时便会警报一次。 模式2(mode=2):为计时调节模式,按“=”键进入该模式,进入后可调节当前计时时间。 定时器计时1s的计算 因为定时器工作方式1可以使用16位计数结构,是所有定时器工作方式中位数最大的,故使用定时器0的工作方式1中断的形式实现计时。但是工作方式1的16位也不足以定时1秒。在12MHz晶振周期的定时器工作方式1下的最大定时时间为: $$\rm (2^{16}-0)\times\frac{1}{12MHz}\times 12=65536 \mu s=65.536ms$$ 可以看出在定时器工作方式1下,最大定时时间远远达到1秒。故采用多次中断时间累计的形式实现1秒计时。我们知道50 ms<65.536 ms,且20×50 ms=1 s,因此,可以使用设置定时器0每50 […]