C51定時器實作流水燈從右到左再從左到右,但是真值表跑完一遍會出現亂碼,我是新手,能請大佬幫忙看看問題在哪嗎
#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[ ]={
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0xBF,0xDF,0xEF,0xF7,0xFB,0xFD
};
void main()
{
unsigned char cnt;
unsigned char sec;
ENLED=0;
ADDR3=1;
ADDR2=1;
ADDR1=1;
ADDR0=0;
TMOD=0x01;
TH0=0xB8;
TL0=0x00;
TR0=1;
while(1)
{
if(TF0==1)
{
TF0=0;
TH0=0xB8;
TL0=0x00;
cnt++;
if(cnt>=50)
{
cnt=0;
P0=LedChar[sec];
sec++;
if(sec>=15)
{
sec=0;
}
}
}
}
}
uj5u.com熱心網友回復:
陣列LedChar[ ]只定義了14個元素,即LedChar[0]~LedChar[13]。當判斷條件是sec>=15時,有2個值并沒有從陣列LedChar中獲取,所以會出現亂碼。這是C語言陣列定義的基本知識,建議樓主多學習學習C語言。uj5u.com熱心網友回復:
樓上正解,改為if(sec>=sizeof(LedChar))
uj5u.com熱心網友回復:
不好意思,更正一下:在判斷條件是sec>=15時,應該是有1個值沒有從陣列LedChar中獲取。
uj5u.com熱心網友回復:
改成>=14,就完事了轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/105544.html
標籤:單片機/工控
上一篇:求助:搭配ARM 9AF344MA處理器用的電壓變換電路
下一篇:一個64k*8位的存盤器可由32片16k*1位的存盤芯片組成,但是每次讀出一個存盤字時,只需選中8片。為什么是8片?
