关于使单片机输出高低电平的问题。

举个例子:用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又是什么意思?
问题比较多,请各位大侠多多赐教哦~
展开
 我来答
VENUS9000
推荐于2016-03-26 · TA获得超过3245个赞
知道大有可为答主
回答量:919
采纳率:100%
帮助的人:1266万
展开全部
把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个灯被点亮。而你的程序每亮一个灯就把上面的灯关掉了,和正解是不一样的,不能说正解可以代替你的程序,是你回答错了,呵呵。
董卫卫14934
2012-02-28 · 超过11用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:35.9万
展开全部
P3=0xfe; //第一个灯亮
P3=0xfd; //第二个灯亮
P3=0xfb; //第三个灯亮
P3=0xf7; //第四个灯亮
它们之间执行时间很短,所以和P3=0xf0的效果一样,也就是前差不多同时亮四个亮,
接下来delay();
然后P3=0x0f后四个亮,
然后delay();
然后while(1);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
eryong1125
2012-02-28 · 超过44用户采纳过TA的回答
知道小有建树答主
回答量:85
采纳率:0%
帮助的人:72.9万
展开全部
0x0f是十六进制,对应二进制就是00001111,对应8个引脚一目了然
P3=~P3是取反(即P3取反后的值赋予给P3),0x0f取反后就是0xf0(即为11110000),0xf0再取反就恢复为原先的0x0f,这样循环,就形成了高4bit和低4bit交替变换
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式