单片机计数显示器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子秒表显示器
一、设计要求及目的
设计要求:在Keil C中用C51语言编程,并在Proteus中模拟51单片机的电子秒表显示器,并在电子秒表显示器中加入中断和定时,使得电子秒表显示
器反复的显示某个区间(0~60)的值。
设计目的:熟悉51单片机的基本输入/输出应用,掌握Proteus ISIS模块的原理图绘图方法及单片机系统仿真运行方法,同时,掌握C51语言的编程方式
和数据结构,掌握中断和定时的概念以及在51系列单片机中的应用。
二、实验环境
操作平台:Windows 编程软件:Keil C 模拟仿真软件:Proteus8
三、元器件列表
四、实验原理
1.实验电路原理图如图1所示,图中有如下5个分支点路:由共阴极数码管LED1
和LED2、P0口、P2口、上拉电阻RP1以及V cc组成的输出电路;由按钮开关BUT、、和接地点组成的输入电路;由C1、C2、晶振X1、引脚XTAL1、XTAL2与接地点组成的时钟电路;由C3、R1、引脚RST和V cc组成的上电复位电路;
由V cc和引脚EA组成片内ROM选择电路(简称片选电路)。
图表 1 实验原理图
2.数码管的初始显示值为“00”;当1s产生时,秒计数器加1;秒计数器到60
时清零,并从“00”重新开始,如此周而反复。
3.软件编程原理:采用T0定时方式1中断法编程,其中1s定时采用20次50ms
定时中断的方案实现。程序设计的流程图如图2所示。
主函数
变量定义初始化T0定时方式1初始
化
计数初值初始化数码管显示初始化T0中断初始化
启动T0
原地循环
T0中断函数
中断计数器加1
1s计时到?
秒计数器加1,
中断计数器清0
60s计时到?
秒计数器清0
秒值输出显示
重装计数初值
中断返回
Y
Y
N
N 图表2 程序流程图
五、程序源代码
#include<>
unsigned char count1=0; //中断计数器
unsigned char count2=0; //计数器变量
usigned char code table[ ]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f}; //LED显示字符
timer0() interrupt 1{ //T0中断函数
count1++; //计数器增1
if(count1==20){ //将1s分为20个50ms
count1=0; count2++;
}
if(count2==60) count2=0; //计数器达到 60时清零P0=table[count2/10]; //显示十位数字
P2=table[count2%10]; //显示个位数字
TH0=0x3c; TL0=0xb0; }
main(){
TMOD=0x01; //设置T0技术方式为1
TH0=0x3c; //计数初值
TL0=0xb0;
P0=table[count2/10]; //显示初值"00"
P2=table[count2%10];
ET0=1;
EA=1; //开启中断
TR0=1; //启动T0
while(1); } //循环
六、实验结果
图表3 数码管初始显示
图表4 数码管经过一个定时周期显示
说明:图3显示的是初始时刻数码管的显示(“00”),图4显示的是数码管在经过一个定时周期60s后显示的值(“59”)。当数码管显示如图4所示时,在下一时刻,数目管将从“00”开始重新显示,如此反复。
七、总结
通过一个学期的单片机
知识的学习和平时实验课的学习,使我对51单片机的原理有了深刻的认识,并对51单片机的应用有了一定的了解和掌握。同时,通过本次设计计数显示器的实验学习,使我对51系列单片机的中断、定时的概念以及有关单片机的并行
I/O口有了很好的理解,并学会了与中断和定时相关的编程,不仅如此,在对51系列单片机的C语言编程方面有了更好的提高。但是,在实验过程中,也存在很多的问题等待自己去进一步的学习,比如对模拟仿真软件的使用不够熟练、在定时和中断的编程方面有时不能灵活运用等。