找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2568|回复: 11
收起左侧

关于单片机C语言数组的问题,为什么这个程序在电路中led4会随着led1和led2亮一下呢?

[复制链接]
ID:517235 发表于 2019-7-2 16:33 | 显示全部楼层 |阅读模式
关于数组的问题,这个程序是让led1亮灭三次,led2亮灭三次,led1和led2同时亮四次;
在这个程序没有对led4进行控制,但是在实际电路中led4会随着led1和led2分别亮一下呢?
请教朋友们这是什么原因

单片机源程序如下:
  1. #include <REG51.H>
  2. #include<intrins.h>
  3. sfr P3M0        =   0xB2;   //0000,0000 端口3模式寄存器0
  4. sfr P3M1       =   0xB1;   //0000,0000 端口3模式寄存器1
  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. sbit led1=P3^0;
  8. sbit led2=P3^1;
  9. sbit led3=P3^3;
  10. sbit led4=P3^2;

  11. uchar code Tab0[]={0x02,0x02,0x02,0x03};//闪灯控制表


  12. uint i;
  13. /*****************************************************
  14. 函数功能:延时若Z*10毫秒
  15. 入口参数:z
  16. ***************************************************/

  17. void delay(uint z)
  18. {
  19.         uint i,j;
  20.         for(i=z;i>0;i--)
  21.                 for(j=9200;j>0;j--);
  22. }


  23. void wordliang(void);
  24. /*****************************************************
  25. 函数功能:p1口灯循环点亮

  26. ***************************************************/
  27. main()
  28. {     
  29.      // uint i;
  30.      P3M1=0x30;        // IO口设值(工作模式)
  31.      P3M0=0x0f;        //          IO口设值(工作模式)         
  32.       P3=0X00;
  33.          
  34.         while(1)
  35.         {            
  36.          
  37.                   
  38.           for(i=0;i<3;i++)         //led1灯亮
  39.                         {
  40.                
  41.                             P3=Tab0[i];
  42.                          delay(50);        
  43.                          P3=0x00;  
  44.                          delay(80);
  45.             }           
  46.                                           
  47.                  

  48.                         for(i=3;i<6;i++)                 //led2灯亮
  49.                         {
  50.                         
  51.                             P3=Tab0[i]        ;
  52.                          delay(50);
  53.                          P3=0x00;  
  54.                          delay(80);                                             
  55.             }
  56.                         
  57.                
  58.                         
  59.                         
  60.                    for(i=6;i<10;i++)                 //led1和led2灯一起亮
  61.                         {
  62.                         
  63.                             P3=Tab0[i]        ;
  64.                          delay(50);
  65.                          P3=0x00;  
  66.                          delay(80);                                             
  67.             }         
  68.                
  69.                   
  70.      }               
  71. }
复制代码

回复

使用道具 举报

ID:571958 发表于 2019-7-2 16:55 | 显示全部楼层
你初始化的数组 4, 你用到了 10 ,你已经越界了!
回复

使用道具 举报

ID:332444 发表于 2019-7-2 19:54 | 显示全部楼层
这程序后2个循环都超数组了
回复

使用道具 举报

ID:207882 发表于 2019-7-2 23:30 | 显示全部楼层
P3=Tab0[i]    i为什么是跟for里面的i同一个,,不是直接uchar code Tab0[]={0x01,0x02,0x03};
回复

使用道具 举报

ID:207882 发表于 2019-7-2 23:32 | 显示全部楼层
uchar code Tab0[]={0x01,0x02,0x03}; P3=Tab0[0] led1;亮  P3=Tab0[1] led2;亮 P3=Tab0[2] led12;亮,不是这样? 为什么你的P3=Tab0[i]跟for里面的I同一个,,这个会不会到时找不Tab0[i]的值,就乱了,所以LED4会亮
回复

使用道具 举报

ID:517235 发表于 2019-7-3 09:40 | 显示全部楼层
单片机引脚图
timg.jpg
回复

使用道具 举报

ID:517235 发表于 2019-7-3 12:01 | 显示全部楼层
lihaijun7781 发表于 2019-7-2 16:55
你初始化的数组 4, 你用到了 10 ,你已经越界了!

感谢回复,我也是发完贴后发现程序引用数组的个数超出了范围。
那么,超出后,从第5个i开始引用的数组按什么数据引用的呢?Tab0[]={0x02,0x02,0x02,0x03,0,0,0,0,0,0}这样好像也不对。
回复

使用道具 举报

ID:517235 发表于 2019-7-3 12:01 | 显示全部楼层
xianfajushi 发表于 2019-7-2 19:54
这程序后2个循环都超数组了

感谢回复,我也是发完贴后发现程序引用数组的个数超出了范围。
那么,超出后,从第5个i开始引用的数组按什么数据引用的呢?Tab0[]={0x02,0x02,0x02,0x03,0,0,0,0,0,0}这样好像也不对。
回复

使用道具 举报

ID:517235 发表于 2019-7-3 12:03 | 显示全部楼层
2448289424 发表于 2019-7-2 23:30
P3=Tab0    i为什么是跟for里面的i同一个,,不是直接uchar code Tab0[]={0x01,0x02,0x03};

感谢回复,程序前面只定义了一个uint i,所以就这么用了
回复

使用道具 举报

ID:517235 发表于 2019-7-3 12:04 | 显示全部楼层
2448289424 发表于 2019-7-2 23:32
uchar code Tab0[]={0x01,0x02,0x03}; P3=Tab0[0] led1;亮  P3=Tab0[1] led2;亮 P3=Tab0[2] led12;亮, ...

感谢回复,程序里只定义了一个uint i
回复

使用道具 举报

ID:577104 发表于 2019-7-3 13:55 | 显示全部楼层
越界访问了
回复

使用道具 举报

ID:332444 发表于 2019-7-3 16:21 | 显示全部楼层
ealoo 发表于 2019-7-3 12:01
感谢回复,我也是发完贴后发现程序引用数组的个数超出了范围。
那么,超出后,从第5个i开始引用的数组按 ...

你只描述了异常,没有说要实现什么功能,所以不知道如何回复了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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