单片机弄一个计时器使周期为50ms的方波切此计时器在0~5959秒范围内循环计时时,每次增加一秒。当复位键有效时,该计时器清零时不再计时。当复位键无效时,当使能键有效时该计时器开始计时,当使能键无效时该计时器暂停计时且使用两位数码管动态显示计时值
时间: 2023-05-20 21:02:32 浏览: 55
以下是实现单片机计时器的代码,可以实现周期为50ms的方波切,同时在0~5959秒范围内循环计时,每次增加一秒。当复位键有效时,该计时器清零时不再计时。当复位键无效时,当使能键有效时该计时器开始计时,当使能键无效时该计时器暂停计时且使用两位数码管动态显示计时值。
```
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit EN=P3^2; // 使能键
sbit CLR=P3^3; // 复位键
sbit DIO=P2^0; // 数码管数据线
sbit CLK=P2^1; // 数码管时钟线
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f // 数码管显示0~9的编码
};
void delay(uint t) // 延时函数
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<125;j++);
}
void display(uint num) // 数码管动态显示函数
{
uchar i;
for(i=0;i<8;i++)
{
DIO=num%10; // 取出个位数
num/=10; // 去掉个位数
CLK=0; // 时钟线拉低
CLK=1; // 时钟线拉高
}
}
void main()
{
uint cnt=0; // 计时器计数值
uchar i; // 循环计数器
EN=1; // 使能键有效
CLR=1; // 复位键有效
while(1)
{
if(CLR==0) // 复位键有效
{
cnt=0; // 计数器清零
display(cnt); // 数码管显示0
while(CLR==0); // 等待复位键释放
}
if(EN==0) // 使能键有效
{
while(EN==0) // 等待使能键释放
{
delay(50); // 延时50ms
cnt++; // 计数器加1
if(cnt>5959) cnt=0; // 计数器循环计时
display(cnt); // 数码管动态显示计数器值
}
}
else // 使能键无效
{
display(cnt); // 数码管静态显示计数器值
}
}
}
```
希望这个代码能够帮到你!