项目四 51单片机项目(数码管倒计时—定时器中断)
【实验内容】
1.熟悉软件流程(Proteus8Professional,KeiluVision5),熟悉烧录流程,熟悉定时器中断有关知识。
2.编写程序代码。
3.用软件搭建实验电路,实现数码管倒计时的功能。
【实验原理】
该项目的电路实验原理如下:
- 数码管接口
数码管共阴极的连接方式和端口定义如下:
- 数码管第一个引脚(最左边)连接到P0.0;
- 数码管第二个引脚连接到P0.1;
- 数码管第三个引脚连接到P0.2;
- 数码管第四个引脚连接到P0.3;
- 数码管第五个引脚连接到P0.4;
- 数码管第六个引脚连接到P0.5;
- 数码管第七个引脚连接到P0.6;
- 数码管第八个引脚(最右边)连接到P0.7。
- 控制端口
在本项目中,使用P1端口来控制数码管的选通。具体的控制方式是:
- P1.0用于控制个位数码管的选通,即P1=0x01;
- P1.1用于控制十位数码管的选通,即P1=0x02。
- 定时器
本项目中使用了定时器0来实现定时器中断功能。定时器0的接口及其工作原理如下:
- T0为定时器0的计数器;
- TMOD为定时器模式寄存器,用于设置定时器的工作模式;
- TH0和TL0为定时器0的高低字节计数器;
- ET0为定时器0的中断允许寄存器,用于使能定时器0中断;
- TR0为定时器0启动/停止控制位。
在本项目中,定时器0被设置为模式1,即16位定时器模式。同时,预装载值被设置为50000,以便实现大约10ms的定时器中断时间。当定时器计数器计数达到预装载值时,将会触发定时器中断,进而执行timer0()函数的内容。
- 倒计时实现
在main()函数中使用了两层循环来实现倒计时功能。在每次内层循环结束后调用show()函数显示当前倒计时的值。
- 延时函数
delay()函数用于实现延时,延时的时间由函数参数k控制。在函数中使用两个循环嵌套来实现延时,具体流程如下:
- 外层循环执行60次,控制延时的精度;
- 内层循环执行k次,根据参数k的值来控制延时的时间。
【实验记录与结果分析】
电路原理图: