c51单片机流水灯程序。求问大神他为什么把16进制数定义成unsign char
#includereg52.h
#define uint unsigned int
#define uchar unsigned char
void delayxms(uint xms);
uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯数据表
void delayxms(uint xms)//xms延时函数
{
uint i,j;
for(i=xms;i0;i--)
for(j=113;j0;j--);
}
void main()//主函数
{
uchar i;
while(1)
{
for(i=0;i8;i++)
{
P1=tab[i];
delayxms(200);
P1=0xff;
}
}
}
但是 比如我给仅仅给P1管脚附1。但是其他管脚连的灯也亮了,,其实我最大的问题是。比如我p0-7 共八个管脚。 八个灯。每个灯代表1bit格子。的话。我想操作一个变量的位。
谢谢您啊。 麻烦您了
追答首先纠正你一个错误,不是p0-7,是P0.0-P0.7,或者P1.0-P1.7,你直接把P0当成一个bit是错误的,因为P0本身就是8个bit,即P0.1-0.7。
只操作一个bit的话也简单,比如你要控制p1.1,实际上1.1是第二bit,也就是说应该给P1整体赋值为二进制的0000 0010是不是,这样的话就只有p1.1亮了,那么你直接写P1=0X02就ok,因为0x02这个十六进制数对应的二进制数就是0000 0010.
为了更符合人类的直观思维,程序员都是这样写的,P1|=(1<<5)|(1<<2),或者P1|=0x11,这两句话效果是一样的,都是第2个和第5个灯亮,也即P1.1和P1.4亮。
另外51单片机本身就支持单个bit操作,P1.1和P1.4亮你也可以这样写:
sbit P11 P1^1;
sbit P14 P1^4;
P11=1;
P14=1;
那个竖线什么意思啊
就是p1后面那个竖线。不是后面的
如果sbitp11那样。系统说p11什么没定义
追答竖线是C语言的“或运算”,那个P要用大写
追问大神。我想让。5 2先亮。再43。
为什么不行呢。。