关于单片机中 C语言给P1口赋值问题

[复制链接]
查看11 | 回复4 | 2017-9-4 23:16:48 | 显示全部楼层 |阅读模式
#include
void main()
{

p1=0x55;
}
灯间隔亮。
但是给P1=01010101
灯不是间隔的
请问:给P1=01010101是什么意思,实现什么功能?

回复

使用道具 举报

千问 | 2017-9-4 23:16:48 | 显示全部楼层
单片机中对每个P口的控制都是用二进制控制的 即使你对它赋了八进制或十进制或十六进制的数 它也会先转换成二进制然后再进行计算的 所以P1是一个8位寄存器 P1=0x55 0x是16进制的意思 这样化成二进制就是01010101P1=01010101 好的 你对它进行了八进制的赋值 01010101(你可以试一试 对P1进行0~15的简单十进制赋值 赋3 那么二进制进制是00000011 六个亮两个灭 15 11111111 全灭 八进制同理 数值以0开头为八进制)8位寄存器范围0~255 恭喜你 你赋的值超出范围了 那么255后又从0开始计数 直到01010101赋完 得出的数再转换成二进制 就是你灯亮的状态了 如果你想对P1口的单独的一个位
回复

使用道具 举报

千问 | 2017-9-4 23:16:48 | 显示全部楼层
p1接受的数是用来控制电平的,每一个二进制位的0、1分别表示高低电平。所以0x55转化为二进制是(01010101)正好一高一低的交替。而01010101直接写的话是8进制数转化成那个二进制就不是一高一低的了。而c里面没有直接写2进制的数字只能通过函数或者写成相应的十进制八进制十六进制的数了。ps. 0x开头的是十六进制0开头的是八进制非
回复

使用道具 举报

千问 | 2017-9-4 23:16:48 | 显示全部楼层
C语言中好像不能直接用二进制表示数吧 一般都换成十六进制的数再输出01010101表示第一个口高电平第二个低电平第三个高电平第四个低电平如此一个高一个低,就能实现间隔点亮LED。给分吧
回复

使用道具 举报

千问 | 2017-9-4 23:16:48 | 显示全部楼层
你这变成了直接给P1口上的所有灯赋值了,假如像你写的P1口上有8个灯,执行你这语句以后,8个灯的状态是01010101,直接都定好了,当然不是间隔,你要间隔的话要这样P1^0 =1;delay(100);//延时P1^1=1;delay(100);//延时以此类推
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行