找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1072|回复: 6
打印 上一主题 下一主题
收起左侧

请问这串代码为什么无法实现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;
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-11-22 14:53 | 只看该作者

回复

使用道具 举报

板凳
ID:1052650 发表于 2022-11-22 16:28 | 只看该作者

太感谢你了大佬
回复

使用道具 举报

地板
ID:999824 发表于 2022-11-22 20:30 | 只看该作者
中断有问题,得改一下
回复

使用道具 举报

5#
ID:1052650 发表于 2022-11-22 23:50 来自手机 | 只看该作者
XCYYLX 发表于 2022-11-22 20:30
中断有问题,得改一下

好的感谢你
回复

使用道具 举报

6#
ID:308903 发表于 2022-11-23 08:29 | 只看该作者
i          num0=~num0;             这句,因为前面定义了这个数组  unsigned char a[]={0xff,0x00};,所以这里也要用数组
回复

使用道具 举报

7#
ID:77589 发表于 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;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表