switch 语句困惑?

2019-03-24 18:59发布

#include <reg52.h>
sbit ENLED = P1^4;
sbit ADDR3 = P1^3;
sbit ADDR2 = P1^2;
sbit ADDR1 = P1^1;
sbit ADDR0 = P1^0;

unsigned char code Ledcode[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
unsigned char val=0;
// 延时
void delay(unsigned int i)
{
while (i--);
}

main()
{
unsigned int val=0, n=0;

while (1)
{
  n++;
  if (n >13)
  {
   n = 0;
   if (val >= 9)
    val = 0;
   else
    val++;
   P0 = Ledcode[val];
  }
  switch (n%6)
  {
   case 0:
    ADDR0 = 0;
    ADDR1 = 0;
    ADDR2 = 0;
    break;
   case 1:
    ADDR0 = 1;
    ADDR1 = 0;
    ADDR2 = 0;
    break;
   case 2:
    ADDR0 = 0;
    ADDR1 = 1;
    ADDR2 = 0;
    break;
   case 3:
    ADDR0 = 1;
    ADDR1 = 1;
    ADDR2 = 0;
    break;
   case 4:
    ADDR0 = 0;
    ADDR1 = 0;
    ADDR2 = 1;
    break;
   case 5:
    ADDR0 = 1;
    ADDR1 = 0;
    ADDR2 = 1;
    break;
  }
// delay(100);
}
}
以上程序运行没问题,仿真单步 case 0: case 2:中44,45,54,55几句不执行如图?哪里错误?请教! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
14条回答
Li_Lei
1楼-- · 2019-03-25 04:07
没看出来有问题

[ 本帖最后由 huo_hu 于 2012-9-7 12:08 编辑 ]
wrlsohu
2楼-- · 2019-03-25 07:41
我用kEILl调试单步就如上图,程序没看出错,问题在哪?
Li_Lei
3楼-- · 2019-03-25 11:28
(n%6)成逻辑值了吧
ddllxxrr
4楼-- · 2019-03-25 12:59
这是因为你的case 0: case 2:永远也到达不了
zw357234798
5楼-- · 2019-03-25 17:56
 精彩回答 2  元偷偷看……
lcofjp
6楼-- · 2019-03-25 18:05
楼主需要看看生成的汇编代码,是不是被优化了。

一周热门 更多>