標(biāo)題: 請問這串代碼為什么無法實現(xiàn)8個LED的閃爍,麻煩各位指出一下問題 [打印本頁]

作者: luogu34    時間: 2022-11-22 08:01
標(biāo)題: 請問這串代碼為什么無法實現(xiàn)8個LED的閃爍,麻煩各位指出一下問題
#include <REGX51.H>

int count0=0,num0=0;
int temp=1;
unsigned char a[]={0xff,0x00};

void delay()
{
        int i,j;
        for(i=0;i<20;i++){
                for(j=0;j<120;j++);
        }
}
void inittimer0()
{
        TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        TR0=1;
        EA=1;
        ET0=1;
}
void main(){
        inittimer0();
        while(1){                        
            P2=a[num0];
        }
}
void timer0_isr() interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        count0++;
        if(count0==20){
                num0=~num0;
                count0=0;
        }
}


作者: lkc8210    時間: 2022-11-22 14:53


作者: luogu34    時間: 2022-11-22 16:28
lkc8210 發(fā)表于 2022-11-22 14:53

太感謝你了大佬
作者: XCYYLX    時間: 2022-11-22 20:30
中斷有問題,得改一下
作者: luogu34    時間: 2022-11-22 23:50
XCYYLX 發(fā)表于 2022-11-22 20:30
中斷有問題,得改一下

好的感謝你
作者: 1261867136qq    時間: 2022-11-23 08:29
i          num0=~num0;             這句,因為前面定義了這個數(shù)組  unsigned char a[]={0xff,0x00};,所以這里也要用數(shù)組
作者: Longan.Wang    時間: 2022-11-23 14:40
明顯這句錯了啊num0=~num0;
不應(yīng)該使用按位取反操作,按位取反操會讓num0由0x00變成0xFF,當(dāng)num0==0xFF時,執(zhí)行P2=a[num0];就會導(dǎo)致一個致使錯誤“數(shù)組越界”,系統(tǒng)會出現(xiàn)你想不到的現(xiàn)象。
基于你的思路,現(xiàn)有兩種改法:
1、刪除unsigned char a[]={0xff,0x00};    把P2=a[num0]修改成P2=num0
2、其它地方不變,把num0 =~num0;修改成
num0 = num0 > 0 ? 0 : 1;




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1