单片机数码管从00到99C语言_单片机控制数码管显示累减99,不能显示00
时间: 2023-08-16 13:09:45 浏览: 156
好的,这个问题我可以帮你解决。
以下是一个基于C语言的单片机控制数码管显示累减99的示例代码:
```
#include <reg52.h>
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit beep=P1^5;
unsigned char code duan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; //0~9,A,b,C,d,E,F,-,0.
unsigned char num=0;
void delay(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
for(j=0;j<110;j++);
}
void display(unsigned char i)
{
switch(i)
{
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;
case(4):LSA=0,LSB=0,LSC=1;break;
case(5):LSA=1,LSB=0,LSC=1;break;
case(6):LSA=0,LSB=1,LSC=1;break;
case(7):LSA=1,LSB=1,LSC=1;break;
}
}
void main()
{
while(1)
{
num--;
if(num==255) num=99;
P0=duan[num/10];
display(0);
delay(5);
P0=duan[num%10];
display(1);
delay(5);
}
}
```
在这个代码中,我们使用了一个数组duan来存储数码管显示的数字,使用了一个无限循环while(1)来不断更新数码管的显示内容。
具体的实现方法是,我们使用了一个变量num来存储需要显示的数字,然后每次执行while循环时,将num的值减1,直到它的值为255时,将其重新赋值为99,这样就保证了数码管显示的数字范围为00到99。
在更新数码管显示内容时,我们首先将需要显示的十位数码对应的值存储在P0口中,然后调用display函数来设置LSA、LSB和LSC三个引脚的状态,从而控制数码管显示相应的数字。接着等待一段时间后,再将需要显示的个位数码对应的值存储在P0口中,再次调用display函数来更新数码管的显示,完成一次循环。
需要注意的是,为了让数码管显示更加稳定,我们在每次更新数码管显示内容后,都加入了一段短暂的延时,可以根据需要进行调整。
阅读全文