第1个回答 2019-06-26
用10个8段数码管动态扫描显示的:
#include
unsigned
char
const
dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//
显示段码值0123456789
unsigned
char
code
seg[]={0,1,2,3,4,5,6,7,8,9};//分别对应相应的数码管点亮,即位码
/*------------------------------------------------
延时子程序
------------------------------------------------*/
void
delay(unsigned
int
cnt)
{
while(--cnt);
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned
char
i;
while(1)
{
P0=dofly[i];//取显示数据,段码
P2=seg[i];
//取位码
delay(20000);
//扫描间隙延时,时间太长会闪烁,太短会造成重影,自己调试
i++;
if(10==i)
//检测10位扫描完全?
i=0;
}
}
第2个回答 推荐于2016-12-02
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit C1=P2^7;
sbit B1=P2^6;
sbit A1=P2^5;
uchar code wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90};//7段数码管段码表共阳
void display(uchar duan,uchar wei);
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=121;y>0;y--);
}
/**************************************************************/
void display(uchar duan,uchar we)
{
P0=tab[duan];
A1=1;B1=1;C1=1; 开锁存器可以,不要的。
A1=0;B1=1;C1=1;
P0=wei[we];
}
/************************************************************************/
void main(void)
{
while(1)
{
unsigned long a;
uchar b;
for(a=0;a<99999999;a++)
for(b=0;b<1;b++)
{
display(a/10000000,0);
delay(200);
display((a%10000000)/1000000,1);
delay(200);
display((a%1000000)/100000,2);
delay(200);
display((a%100000)/10000,3);
delay(200);
display((a%10000)/1000,4);
delay(200);
display((a%1000)/100,5);
delay(200);
display((a%100)/10,6);
delay(200);
display(a%10,7) ;
delay(200) ;
}
}
}
这是动态显示的。本回答被提问者采纳
第3个回答 2019-12-24
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
sbit
C1=P2^7;
sbit
B1=P2^6;
sbit
A1=P2^5;
uchar
code
wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar
code
tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90};//7段数码管段码表共阳
void
display(uchar
duan,uchar
wei);
void
delay(uint
z)
{
uint
x,y;
for(x=z;x>0;x--)
for(y=121;y>0;y--);
}
/**************************************************************/
void
display(uchar
duan,uchar
we)
{
P0=tab[duan];
A1=1;B1=1;C1=1;
开锁存器可以,不要的。
A1=0;B1=1;C1=1;
P0=wei[we];
}
/************************************************************************/
void
main(void)
{
while(1)
{
unsigned
long
a;
uchar
b;
for(a=0;a<99999999;a++)
for(b=0;b<1;b++)
{
display(a/10000000,0);
delay(200);
display((a%10000000)/1000000,1);
delay(200);
display((a%1000000)/100000,2);
delay(200);
display((a%100000)/10000,3);
delay(200);
display((a%10000)/1000,4);
delay(200);
display((a%1000)/100,5);
delay(200);
display((a%100)/10,6);
delay(200);
display(a%10,7)
;
delay(200)
;
}
}
}
这是动态显示的。
第4个回答 2010-12-10
用10个8段数码管动态扫描显示的:
#include<reg51.h>
unsigned char const dofly[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 显示段码值0123456789
unsigned char code seg[]={0,1,2,3,4,5,6,7,8,9};//分别对应相应的数码管点亮,即位码
/*------------------------------------------------
延时子程序
------------------------------------------------*/
void delay(unsigned int cnt)
{
while(--cnt);
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
unsigned char i;
while(1)
{
P0=dofly[i];//取显示数据,段码
P2=seg[i]; //取位码
delay(20000); //扫描间隙延时,时间太长会闪烁,太短会造成重影,自己调试
i++;
if(10==i) //检测10位扫描完全?
i=0;
}
}