51单片机使用共阴极数码管定时显示定时时长为一秒
时间: 2024-03-21 10:44:08 浏览: 45
基于51单片机的4位共阴极数码管秒表
5星 · 资源好评率100%
您好,针对您的问题,可以使用以下的代码实现51单片机使用共阴极数码管定时显示定时时长为一秒:
```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) // 数码管显示函数
{
uchar i,j,k;
i=num%10; // 个位
j=num/10%10; // 十位
k=num/100%10; // 百位
LSA=0; // 共阴极数码管,使能端为低电平
P0=smgduan[i]; // 输出个位显示码
delay(5); // 延时
LSA=1; // 关闭个位数码管
LSB=0;
P0=smgduan[j]; // 输出十位显示码
delay(5); // 延时
LSB=1;
LSC=0;
P0=smgduan[k]; // 输出百位显示码
delay(5); // 延时
LSC=1;
}
void main()
{
TMOD=0x01; // 定时器1工作在模式1下
TH1=(65536-1000)/256; // 计时1ms
TL1=(65536-1000)%256;
TR1=1; // 启动定时器1
while(1)
{
if(TF1==1) // 定时器1溢出
{
TF1=0; // 清除溢出标志
TH1=(65536-1000)/256; // 重新赋值计时1ms
TL1=(65536-1000)%256;
display(100); // 显示100ms
}
}
}
```
这段代码将使用定时器1实现1s的定时功能,当定时器溢出时,调用数码管显示函数`display()`,该函数将显示100ms,可以根据需要将其修改为1s即可。
需要注意的是,此代码使用的是共阴极数码管,如果使用共阳极数码管需要将相应的代码进行修改。
阅读全文