51单片机实现四位数码管9999到0000的c语言代码
时间: 2024-03-05 14:53:14 浏览: 74
以下是使用51单片机实现四位数码管显示从9999到0000的C语言代码:
```c
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit LSA=P2^2; //LS138的A片选端口
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit K1=P1^0; //按键K1
sbit K2=P1^1; //按键K2
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //数码管段码表
void delay(uint x) //延时函数
{
uint i,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
void display(uint num) //数码管显示函数
{
uchar i,weishu,temp;
uint shang,yushu;
for(i=0;i<4;i++)
{
weishu=3-i; //计算位数
shang=num/10; //计算商和余数
yushu=num%10;
temp=table[yushu]; //查表获得段码
if(shang==0) //高位数值为0时不显示
temp=0x00;
P0=temp; //将段码输出到P0口
switch(weishu) //位选控制
{
case 0:LSA=0;LSB=0;LSC=0;break;
case 1:LSA=1;LSB=0;LSC=0;break;
case 2:LSA=0;LSB=1;LSC=0;break;
case 3:LSA=1;LSB=1;LSC=0;break;
}
delay(1); //延时
num/=10; //更新数值
}
}
void main()
{
uint i;
while(1)
{
if(K1==0 && K2==1) //按下K1,从9999开始计数
{
for(i=9999;i>=0;i--)
{
display(i);
delay(100); //延时
}
}
if(K1==1 && K2==0) //按下K2,从0000开始计数
{
for(i=0;i<=9999;i++)
{
display(i);
delay(100); //延时
}
}
if(K1==1 && K2==1) //两个按键都未按下,显示0000
{
P0=0x00;
LSA=1;LSB=1;LSC=1;
}
}
}
```
这段代码使用了延时函数实现数码管的动态显示,并且通过按键K1和K2控制计数方向。具体实现可以参考代码注释。
阅读全文