设计一个0~99.9秒的正计时的定时器用AT89C52在普中51实验板上实现

1个回答
展开全部
摘要 亲,根据您的描述,以下是基于AT89C52单片机的C语言代码实现0~99.9秒的正计时定时器。主要实现功能包括:1. 使用定时器0产生1ms的中断,计数器累加,精度为0.1秒。2. 通过数码管显示当前计时时间。3. 通过按键控制开始、暂停和复位计时器。```#include#define uint unsigned int //定义无符号整型常量#define uchar unsigned char //定义无符号字符型常量
咨询记录 · 回答于2023-05-08
设计一个0~99.9秒的正计时的定时器用AT89C52在普中51实验板上实现
亲,根据您的描述,以下是基于AT89C52单片机的C语言代码实现0~99.9秒的正计时定时器。主要实现功能包括:1. 使用定时器0产生1ms的中断,计数器累加,精度为0.1秒。2. 通过数码管显示当前计时时间。3. 通过按键控制开始、暂停和复位计时器。```#include#define uint unsigned int //定义无符号整型常量#define uchar unsigned char //定义无符号字符型常量
#define uchar unsigned char //定义无符号字符型常量 sbit S2=P3^4; //定义S2按键端口sbit S3=P3^5; //定义S3按键端口sbit S4=P3^6; //定义S4按键端口uchar code table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, //0~9的数码管编码 0xbf,0xff //"."和" "的数码管编码};uchar num[8]={0,0,0,0,0,0,0,0}; //num数组用于存储时、分、秒的数码管显示值uchar sec=0,ms=0; //用于存储计时器的秒数和毫秒数uchar status=0; //用于存储计时器状态
void init() //定时器初始化函数{ TMOD=0x01; //选择定时器0,工作方式1 TH0=0x3c; //定时器初值为0x3c TL0=0xb0; ET0=1; //开定时器0中断 EA=1; //开全局中断 TR0=1; //启动定时器0}void keyscan() //按键扫描函数{ if(S2==0) //S2按键按下 { while(!S2); //等待按键松开 status=1; //进入计时状态 TR0=1; //启动定时器0 } if(S3==0) //S3按键按下 { while(!S3); //等待按键松开 status=2; //暂停计时状态 TR0=0; //停止定时器0 }
if(S4==0) //S4按键按下 { while(!S4); //等待按键松开 status=0; //复位计时状态 sec=0; ms=0; num[0]=0; num[1]=0; num[2]=0; num[3]=10; //数码管显示"." num[4]=0; num[5]=0; num[6]=0; num[7]=10; //数码管显示"." P2=0xff; //关闭数码管 }}void display() //数码管显示函数{ uint i;
for(i=0;i<8;i++) { P2=0xff; //关闭数码管 switch(i) //选择对应的数码管位 { case 0:P0=0xfe;break; //开启第1位数码管 case 1:P0=0xfd;break; //开启第2位数码管 case 2:P0=0xfb;break; //开启第3位数码管 case 3:P0=0xf7;break; //开启第4位数码管 case 4:P0=0xef;break; //开启第5位数码管 case 5:P0=0xdf;break; //开启第6位数码管 case 6:P0=0xbf;break; //开启第7位数码管 case 7:P0=0x7f;break; //开启第8位数码管 }
P2=table[num[i]]; //将对应的数码管编码送入P2口 for(ms=0;ms<1;ms++); //延时一定时间,以使数码管显示正常 }}void timer0() interrupt 1 //定时器0中断函数{ TH0=0x3c; //定时器初值为0x3c TL0=0xb0; ms++; //毫秒累加 if(ms==10) //达到1秒 { ms=0; //毫秒清零 sec++; //秒累加 if(sec==99) //达到99秒 { sec=0; //秒清零 } num[7]=sec/10; //计算并存储秒数的十位数码管显示值 num[6]=sec%10; //计算并存储秒数的个位数码管显示值 }}
void main(){ init(); //定时器初始化 while(1) { keyscan(); //按键扫描 display(); //数码管显示 }}```
哥们这个嘛
收到
这个有吗
有点长
我看看哈
感谢感谢
全部内容有吗
这个内容不全的小老弟
下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消