标题: 请问这串代码为什么无法实现8个LED的闪烁,麻烦各位指出一下问题 [打印本页]

作者: luogu34    时间: 2022-11-22 08:01
标题: 请问这串代码为什么无法实现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 发表于 2022-11-22 14:53

太感谢你了大佬
作者: XCYYLX    时间: 2022-11-22 20:30
中断有问题,得改一下
作者: luogu34    时间: 2022-11-22 23:50
XCYYLX 发表于 2022-11-22 20:30
中断有问题,得改一下

好的感谢你
作者: 1261867136qq    时间: 2022-11-23 08:29
i          num0=~num0;             这句,因为前面定义了这个数组  unsigned char a[]={0xff,0x00};,所以这里也要用数组
作者: Longan.Wang    时间: 2022-11-23 14:40
明显这句错了啊num0=~num0;
不应该使用按位取反操作,按位取反操会让num0由0x00变成0xFF,当num0==0xFF时,执行P2=a[num0];就会导致一个致使错误“数组越界”,系统会出现你想不到的现象。
基于你的思路,现有两种改法:
1、删除unsigned char a[]={0xff,0x00};    把P2=a[num0]修改成P2=num0
2、其它地方不变,把num0 =~num0;修改成
num0 = num0 > 0 ? 0 : 1;




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1