求助一簡單C51單片機編程:聯排數碼管向左流水移位怎么寫?下面這個程式我覺得也可以,但不行為什么怎么改?謝謝
#include <AT89X51.H>
int j;
void delay()
{
for(j=0;j<30000;j++);
}
void main()
{
unsigned char led[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
// 1 2 3 4 5 6 7 8
unsigned char wei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
unsigned int a;
unsigned int b;
while(1)
{
for(a=0;a<8;a++)
{
for(b=0;b<=a;b++)
{
P0=led[b];
P1=wei[a-b];
}
delay();
}
}
}
uj5u.com熱心網友回復:
從代碼上看,內嵌回圈太快,因此眼睛是看不到變化的。以后發布用代碼段這樣看起來有層次感。
uj5u.com熱心網友回復:
#include <AT89X51.H>
unsigned char led[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
// 1 2 3 4 5 6 7 8
unsigned char wei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
int j;
void delay()
{
for(j=0;j<30000;j++);
}
void main()
{
unsigned int a;
unsigned int b;
while(1)
{
for(a=0;a<8;a++)
{
for(b=0;b<=a;b++)
{
P0=led[b];
P1=wei[a-b];
}
delay();
}
}
}
uj5u.com熱心網友回復:
其實效果應該是:設定8個數,可以向左一位一位移動,數碼管顯示出完整的8個數后再回圈。比如說開始顯示1,再顯示12,再顯示123,再顯示1234……這樣向左移,到12345678后下一次顯示1,再顯示12……這樣回圈……
我內回圈加個延時也不對
這是個流水燈樣子,應該內回圈快可以讓數碼管每個位顯示不同數吧
求助怎么寫?謝謝
uj5u.com熱心網友回復:
unsigned char led[8]={254,252,248,240,224,192,128,0};//流水燈一個接一個亮全亮后從頭開始
unsigned char wei[8]={0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F};//替換掉段值
void delay()
{
unsigned int j;
for(j=0;j<55555;j++);
}
void main()
{
unsigned char a;
unsigned char b;
while(1)
{
for(a=0;a<8;a++)
{
for(b=0;b<=a;b++) P0=wei[b];
P1=led[a];
delay();
}
}
}
用我的LED和數碼管值,修改了測驗正常,不過你的代碼數碼管只有段值,沒位值,你再去寫,有問題再說。
數碼管例子參考https://blog.csdn.net/xianfajushi/article/details/85511846
uj5u.com熱心網友回復:
unsigned char led[8]={254,252,248,240,224,192,128,0};//流水燈一個接一個亮全亮后從頭開始
void delay()
{
unsigned int j;
for(j=0;j<55555;j++);
}
void main()
{
unsigned char a;
unsigned char b;
while(1)
{
for(a=0;a<8;a++)
{
for(b=0;b<=a;b++) P0=led[b];
P1=led[a];
delay();
}
}
}
加入你是說只給數碼管位值,那么就沒段值,是不會顯示8這樣段符號的,那么,完全可以用LED值顯示,不過看不到8這樣的顯示,程式依然運行正常。
uj5u.com熱心網友回復:
另外按你的代碼也不對LED和WEI的值反了,修改后還是可以看到程式運行效果
unsigned char wei[8]={0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f};
// 1 2 3 4 5 6 7 8
unsigned char led[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay()
{
unsigned int j;
for(j=0;j<30000;j++);
}
void main()
{
unsigned char a;
unsigned char b;
while(1)
{
for(a=0;a<8;a++)
{
for(b=0;b<=a;b++)P1=wei[b];
P0=led[a];
delay();
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/133461.html
標籤:單片機/工控
上一篇:求大佬幫忙
