51单片机使用共阴极数码管定时显示(0~9)定时时长为一秒
时间: 2024-03-21 22:44:13 浏览: 46
以下是使用51单片机和共阴极数码管实现定时器定时1秒并显示0~9的代码:
```c
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40,0x01,0x02,0x04,0x08,0x10}; // 数码管0-F及'-'的显示码
void delay(uint i) // 延时函数
{
uint j;
for(;i>0;i--)
for(j=110;j>0;j--);
}
void display(uchar num) // 数码管显示函数
{
LSA=0; // 共阴极数码管,使能端为低电平
P0=smgduan[num]; // 输出显示码
delay(5); // 延时
LSA=1; // 关闭数码管
}
void timer() interrupt 1 // 定时器中断函数
{
static uchar cnt = 0; // 定义静态变量cnt
TH0=0x3C; // 重新赋值计时1ms
TL0=0xAF;
cnt++; // 计数器加1
if(cnt >= 10) // 计数器值达到10
{
cnt = 0; // 计数器清零
}
display(cnt); // 调用数码管显示函数,显示计数器值
}
void main()
{
TMOD=0x01; // 定时器0工作在模式1下
TH0=0x3C; // 计时1ms
TL0=0xAF;
TR0=1; // 启动定时器0
ET0=1; // 打开定时器0中断
EA=1; // 打开总中断
while(1);
}
```
在该代码中,使用定时器0实现1ms的定时功能,并通过定时器中断函数`timer()`实现了1秒的计时功能。在定时器中断函数中,使用一个静态变量`cnt`作为计数器,每1秒钟`cnt`的值加1,当`cnt`的值达到10时,`cnt`被清零,计数器重新开始计数。在定时器中断函数中调用数码管显示函数`display()`,将计数器的值显示在数码管上。需要注意的是,该代码使用的是共阴极数码管,如果使用共阳极数码管需要将相应的代码进行修改。
阅读全文