标题:
51单片机控制两个数码管动态显示00,11,22,33,44,55,66,77,88,99循环
[打印本页]
作者:
DBHZG
时间:
2024-10-5 19:15
标题:
51单片机控制两个数码管动态显示00,11,22,33,44,55,66,77,88,99循环
#include<reg52.h>
sbit ENLED=P1^4;
sbit ADDR3=P1^3;
sbit ADDR2=P1^2;
sbit ADDR1=P1^1;
sbit ADDR0=P1^0;
unsigned char code LedChar[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
void delay_ms(unsigned char cnt)
{
unsigned char i;
unsigned char j;
while(cnt--)
{
for(i=0;i<=110;i++);
for(j=0;j<=110;j++);
}
}
void main()
{
ENLED=0;
ADDR3=1;
while(1)
{
unsigned char i;
ADDR2=0;
ADDR1=0;
ADDR0=0;
{P0=LedChar[i];
i++;
delay_ms(1000);
if(i==10)
{
i=0;
}
}
{ unsigned char j;
ADDR2=0;
ADDR1=0;
ADDR0=1;
{P0=LedChar[j];
j++;
delay_ms(1000);
if(j==10)
{
j=0;
}
}
}
}
}
但是它确实两个数码管之间跳动显示,求解答,修改
作者:
lkc8210
时间:
2024-10-5 21:29
2024-10-05_212924.png
(13 KB, 下载次数: 1)
下载附件
2024-10-5 21:29 上传
作者:
188610329
时间:
2024-10-5 21:45
显示用定时器,走数用主循环
作者:
405616736
时间:
2024-10-6 01:27
#include<reg52.h>
sbit ADDR0=P1^0;
sbit ADDR1=P1^1;
sbit ADDR2=P1^2;
sbit ADDR3=P1^3;
sbit ENLED=P1^4;
unsigned char code LedChar[17]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xff};
void delay_ms(unsigned char cnt)
{
unsigned char i;
unsigned char j;
while(cnt--)
{
for(i=0;i<=110;i++);
for(j=0;j<=110;j++);
}
}
void main()
{
unsigned char i,j;
ENLED=0;
while(1)
{
for(i=0;i<10;i++) //循环扫描,修改i可设置时长
{
ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=0;P0=LedChar[17]; //消隐
ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=1;P0=LedChar[j]; //显示数字
delay_ms(20); //动态扫描显示延时,不能修改
ADDR0=0;ADDR1=0;ADDR2=0;ADDR3=0;P0=LedChar[17]; //消隐
ADDR0=0;ADDR1=0;ADDR2=1;ADDR3=0;P0=LedChar[j]; //显示数字
delay_ms(20); //动态扫描显示延时,不能修改
}
if(j++==10) j=0; //数字指针累加
}
}
作者:
xiaobendan001
时间:
2024-10-6 17:57
也没看到电路,ADDR是数码管位还是译码器的输入?
看起来两个在闪是你延时太长了。
代码有点看不懂,多两个大括弧,不知道干啥用的。还有什么时候KEIL可以在函数任意位置定义变量了?我都不知道呢。
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1