两位数码管显示计时器
一、题目
用定时0的方式1实现数码管两位59S循环计时(计时器)
二、思路方案 本实验利用单片机的定时器/计数器定时和计数的原理,通过proteus 仿真软件来实现模拟实现。模拟利用AT89C51单片机、LED数码管实现秒表的计时。 其中一个两位数码管用来显示数据,一位用来显示个位秒,另一位用来显示十位秒。当计数超过范围时所有数码管全部清零重新计数。
三、实验设计原理图
四、程序流程图
五、程序代码如下:
#include
#define uchar unsigned char
#define uint unsigned int
uchar num,count,ge,shi;
void delay uint ;
void display uchar,uchar ;
uchar SEG[] 0xc0,0xf9,0xa4,0xb0,0x99, //显示数码管0-9数字 0x92,0x83,0xf8,0x80,0x98 ;
void main TMOD 0x01; //设置定时器工作方式 T0的工作方式为1
TH0 65536-45872 /256; //装初值11.0592M晶振定时50ms数为45872
TL0 65536-45872 %256; EA 1; //开总中断
ET0 1; //开定时器0中断
TR0 1; //启动定时器0
while 1 //程序在这里不停的对数码管动态扫描同时等待中断发生 display shi,ge ; /*以下是设计中断服务程序的时间和显示*/
void T0_time interrupt 1 TH0 65536-45872 /256; //重装初值
TL0 65536-45872 %256;
if ++num 20 //如果到了20次,说明1秒时间到 num 0; //然后把num清0重新再记20次
if ++count 60 //这个数用来送数码管显示,到60后归0
count 0;
shi count/10; //把一个2位数分离后分别送数码管显示,十位和个位
ge count%10; /*以下为延迟函数*/
void delay uint xms uint i,j;
for i xms;i 0;i-- //延迟时间为 xms乘以50ms
for j 110;j 0;j-- ; /*以下为显示数码管的子函数*/
void display uchar shi,uchar ge P3 0xfe; //打开P3.0,及打开数码管1引脚
P2 SEG[ge];
delay 20 ;
P3 0xfd; //打开P3.1,及打开数码管2引脚
P2 SEG[shi];
delay 20 ; 六实验过程遇到的问题总结
由于重新接触单片机,软硬件较生疏,刚看题目没思路,只能网上查资料看,再理解,相当的费力。
连接硬件找不到元器件,英文的都看不到,只能一个个翻译才找到元器件,英文真的很重要。以下是用到组别的英文单词
Microprocessor ICs 微处理器ptoelectronics 光电学