单片机if语句的运用问题

#include <reg52.h>
sbit LED0 = P1^0;
sbit LED1 = P1^1;
sbit we = P2^7; //段选 0x00
sbit du = P2^6; //显示数字
unsigned char counter,time_counter,ge,shi,shii;
unsigned code leddata[]={

0x3F, //"0"
0x06, //"1"
0x5B, //"2"
0x4F, //"3"
0x66, //"4"
0x6D, //"5"
0x7D, //"6"
0x07, //"7"
0x7F, //"8"
0x6F, //"9"
0x77, //"A"
0x7C, //"B"
0x39, //"C"
0x5E, //"D"
0x79, //"E"
0x71, //"F"
0x76, //"H"
0x38, //"L"
0x37, //"n"
0x3E, //"u"
0x73, //"P"
0x5C, //"o"
0x40, //"-"
0x00, //熄灭
0x00 //自定义

};

void main()
{
TMOD = 0x10;
TH1 = 0xB8;
TL1 = 0x00;
TR1 = 1;
while(1)
{
if(TF1 == 1)
{
TF1 = 0;
TH1 = 0x4D;
TL1 = 0xFE;
counter++;
}
if(counter == 5)
{
counter = 0;
LED0 = ~LED0;

we = 1;
P0 = 0xfe;
we = 0;
du = 1;
P0 = leddata[ge];
du = 0;
ge++;
if(ge == 10)
{
ge = 0;
shii++;
}
if(shii >> 0)
{
we = 1;
P0 = 0xfd;
we = 0;
du = 1;
P0 = leddata[shi];
du = 0;
shi = shii;
}
}
}
}
程序进到if(shii >> 0)里面之后 灯就只亮if(shii >> 0)里面的(这个程序是变量,所以看到出在运行)
if(counter == 5)的程序还在走 就是灯 已经 不在亮了。

第1个回答  2016-06-07
if(shii>>0)这句话的意思是shii右移0位还等不等于0,不等于0,就执行if语句下面{}里的程序。你确定程序要执行的是这个意思?本回答被网友采纳
第2个回答  2016-06-07
if(shii >> 0)是什么意思?>>是右移追问

unsigned char shii;

追答

等于是“==”
但大于不是“>>" 是“>" 而 >>是右移
不过此处巧了,右移0位后非0和大于0差不多
shi = shii也不知干什么的,起码该放在显示语句之前
或者直接P0 = leddata[shii];
更不知你问题是什么,首先你要告诉别人你想怎么样,实际是什么样
LED0不是计数5 次翻转一次吗

追问

>>是右移吗?但是我最终板上显示的实际效果就是大于得意思而不是位移。
其次,shii是变量,个人定义的词而已,后来发现多余了被我改掉了。
然后if(counter == 5)
{
counter = 0;
LED0 = ~LED0;
是这样的,只是为了确定 下面
we = 1;
...
后面的程序是不是再运行,LED一闪一闪就知道情况了。

追答

>>就是右移呀
LED闪吗?
若不闪改成大于号试一试

相似回答