关于使单片机输出高低电平的问题。
举个例子:用C语言写一个使单片机P3口高四位LED和低四位LED轮流点亮的程序我自己写的程序里主函数是voidmain(void){while(1){P3=0xfe;//...
举个例子:用C语言写一个使单片机P3口高四位LED和低四位LED轮流点亮的程序
我自己写的程序里主函数是
void main(void)
{
while(1)
{
P3=0xfe; //第一个灯亮
P3=0xfd; //第二个灯亮
P3=0xfb; //第三个灯亮
P3=0xf7; //第四个灯亮
delay(); //调用延时函数
P3=0xef; //第五个灯亮
P3=0xdf; //第六个灯亮
P3=0xbf; //第七个灯亮
P3=0x7f; //第八个灯亮
delay(); //调用延时函数
而正解只要这样
void main()
{
P3=0x0f;
while(1)
{
P3=~P3;
delay();
}
}
为什么只要P3=0x0f就能代替我自己写的一大堆程序呢?0x0f是输出高电平还是低电平?P3=~P3里的~P3又是什么意思?
问题比较多,请各位大侠多多赐教哦~ 展开
我自己写的程序里主函数是
void main(void)
{
while(1)
{
P3=0xfe; //第一个灯亮
P3=0xfd; //第二个灯亮
P3=0xfb; //第三个灯亮
P3=0xf7; //第四个灯亮
delay(); //调用延时函数
P3=0xef; //第五个灯亮
P3=0xdf; //第六个灯亮
P3=0xbf; //第七个灯亮
P3=0x7f; //第八个灯亮
delay(); //调用延时函数
而正解只要这样
void main()
{
P3=0x0f;
while(1)
{
P3=~P3;
delay();
}
}
为什么只要P3=0x0f就能代替我自己写的一大堆程序呢?0x0f是输出高电平还是低电平?P3=~P3里的~P3又是什么意思?
问题比较多,请各位大侠多多赐教哦~ 展开
3个回答
展开全部
把0x0f转化成二进制是B’00001111’,这8位数字由右往左对应你的第1到8个灯,其实就是P3的8个口,0表示这个口输出低电平,1是输出高电平。看你的程序是设定低有效的,就是0的时候灯亮。正解按题目要求分高4位和低4位每次亮四个灯(每次4个数字是0),0x0f就是高4位亮,~是取反符,P3=~P3就是把P3的值取反后再赋给P3,就是0变1,1变0,这样0x0f取反变成0xf0,就是B‘11110000’,这样原来亮的4个灯变暗,原来暗的4个灯被点亮。而你的程序每亮一个灯就把上面的灯关掉了,和正解是不一样的,不能说正解可以代替你的程序,是你回答错了,呵呵。
展开全部
P3=0xfe; //第一个灯亮
P3=0xfd; //第二个灯亮
P3=0xfb; //第三个灯亮
P3=0xf7; //第四个灯亮
它们之间执行时间很短,所以和P3=0xf0的效果一样,也就是前差不多同时亮四个亮,
接下来delay();
然后P3=0x0f后四个亮,
然后delay();
然后while(1);
P3=0xfd; //第二个灯亮
P3=0xfb; //第三个灯亮
P3=0xf7; //第四个灯亮
它们之间执行时间很短,所以和P3=0xf0的效果一样,也就是前差不多同时亮四个亮,
接下来delay();
然后P3=0x0f后四个亮,
然后delay();
然后while(1);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
0x0f是十六进制,对应二进制就是00001111,对应8个引脚一目了然
P3=~P3是取反(即P3取反后的值赋予给P3),0x0f取反后就是0xf0(即为11110000),0xf0再取反就恢复为原先的0x0f,这样循环,就形成了高4bit和低4bit交替变换
P3=~P3是取反(即P3取反后的值赋予给P3),0x0f取反后就是0xf0(即为11110000),0xf0再取反就恢复为原先的0x0f,这样循环,就形成了高4bit和低4bit交替变换
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询