用定时器实现10s秒表的计时功能,精确到小数点后一位,即能够有0.1s显示,有开始,暂停,清零的功能(C语
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用定时器实现10s秒表的计时功能,精确到小数点后一位,即能够有0.1s显示,有开始,暂停,清零的功能(C语相关的知识,希望对你有一定的参考价值。
加一些扩展
参考技术A /* 名称:10s 的秒表说明:首次按键计时开始,再次按键暂停,第三次按键清零。
*/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P3^7;
uchar
i,Second_Counts,Key_Flag_Idx;
bit Key_State;
uchar
DSY_CODE[]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;
//延时
void DelayMS(uint ms)
uchar t;
while(ms--) for(t=0;t<120;t++);
//处理按键事件
void Key_Event_Handle()
if(Key_State==0)
Key_Flag_Idx=(Key_Flag_Idx+1)%3;
switch(Key_Flag_Idx)
case 1: EA=1;ET0=1;TR0=1;break;
case 2: EA=0;ET0=0;TR0=0;break;
case 0: P0=0x3f;P2=0x3f;i=0;Second_Counts=0;
//主程序
void main()
P0=0x3f; //显示 00
P2=0x3f;
i=0;
Second_Counts=0;
Key_Flag_Idx=0; //按键次数(取值 0,1,2,3)
Key_State=1; //按键状态
TMOD=0x01; //定时器 0 方式 1
TH0=(65536-50000)/256; //定时器 0:15ms
TL0=(65536-50000)%256;
while(1)
if(Key_State!=K1)
DelayMS(10);
Key_State=K1;
Key_Event_Handle();
//T0 中断函数
void DSY_Refresh() interrupt 1
TH0=(65536-50000)/256; //恢复定时器 0 初值
TL0=(65536-50000)%256;
if(++i==2) //50ms*2=0.1s 转换状态
i=0;
Second_Counts++;
P0=DSY_CODE[Second_Counts/10];
P2=DSY_CODE[Second_Counts%10];
if(Second_Counts==100) Second_Counts=0; //满 100(10s)后显示 00
图片上传不了……
开发板制作秒表计时器---我太难了丶
制作一个秒表计时器,记录0-15秒时间。要求精准,可控。
1.能够用按键控制秒表开始
2.能够用按键控制秒表停止
3.能够用按键控制秒表清零
4.使用定时器控制时间,要求精确。
5.使用1个数码管和多个按键实现功能。
将下面代码复制粘贴到C51软件里,编译运行生成.hex文件,再将文件添加到下面电路中,运行。(软件文件,安装方法,创建工程,电路图在我前面博客里有)
右边数码管呈现从1到9数字一次增加,鼠标点击连接接口P1的按钮,数码管启动,再次按下数码管数字停止;点击连接接口P2的按钮,数码管数字清零,从0开始计时。
功能就是这样,喜欢的可以给个关注谢谢~
#include<reg52.h> sbit an = P1^0; sbit qing = P1^1; unsigned int i = 0; unsigned int s = 0; code unsigned char LED_CODE[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E}; void INT_T0(void) { TMOD = 0X01; //打开定时器0 ,使用模式1定时 TH0 = 0XFC; TL0 = 0X18; //初始值 EA = 1;//打开总开关 ET0 = 1;//打开中断T0开关 } void main(void) { INT_T0(); TR0 = 0; //定时功能关闭 while(1) { if(an == 0) TR0 = 1; //判断按键按下 ,是则打开定时功能 else TR0 = 0; // 关闭定时功能 if(qing == 0) break; //跳出循环,关闭程序,重新启动 } } void time0(void) interrupt 1 { TH0 = 0XFC; TL0 = 0X18; //初始值 if(i < 1000) { i++; } else { P0 = LED_CODE[s]; i = 0; if(s<15) s++; else s = 0; } }
以上是关于用定时器实现10s秒表的计时功能,精确到小数点后一位,即能够有0.1s显示,有开始,暂停,清零的功能(C语的主要内容,如果未能解决你的问题,请参考以下文章