基于51单片机,四位共阳数码管,两位数字每秒自动加一,的keil程序
时间: 2024-03-01 14:55:11 浏览: 82
基于51单片机的数码管程序
以下是基于51单片机,四位共阳数码管,两位数字每秒自动加一的Keil程序:
```
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit key=P3^2;
uchar num=0; //初始数字为0
uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //数码管显示0~9的编码
void delay(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void display() //数码管显示函数
{
LSA=0;LSB=0;LSC=0;P0=table[num/1000];delay(5); //千位
LSA=1;LSB=0;LSC=0;P0=table[num%1000/100];delay(5); //百位
LSA=0;LSB=1;LSC=0;P0=table[num%100/10];delay(5); //十位
LSA=1;LSB=1;LSC=0;P0=table[num%10];delay(5); //个位
}
void main()
{
TMOD=0x01; //定时器0为模式1
TH0=(65536-50000)/256; //装初值,定时50ms
TL0=(65536-50000)%256;
TR0=1; //定时器0开始计时
while(1)
{
if(TF0==1) //定时器0溢出
{
TF0=0;
TH0=(65536-50000)/256; //重新装初值
TL0=(65536-50000)%256;
num++; //数字加1
if(num==100) num=0; //超过99,从0开始
display(); //显示数字
}
}
}
```
程序说明:
1. 通过定义LSA、LSB、LSC三个引脚来控制四位共阳数码管的选择,通过P0口来输出数码管的显示。
2. 定义了一个delay函数用来实现延时,以保证数码管的显示效果。
3. 定义了一个display函数用来实现数码管的显示,通过LSA、LSB、LSC的控制来选择数码管的位数,通过P0的输出来实现数字的显示。
4. 在主函数main中,通过定时器0来实现每秒数字自动加一的功能,当定时器0溢出时,数字加一,超过99则从0开始,然后调用display函数来显示数字。
5. 程序中的数码管编码table数组是通过实验得到的,可以根据不同的数码管型号进行调整。
阅读全文