51单片机用八个发光管演示二进位, 我写的这个哪里有问题?为什么他只亮一个灯?
把a的值列印出来
列印成二进位去看
初学者一般是只会写,不懂调试,这样弊端很大。
看了代码,好像没什么问题,全局变数应该是一开始被初始化为0的,具体现象是怎样,一直只亮一个灯?还是同一个?
首先第一点
~1 = 1111 1110
~2 = 1111 1101
~3 = 1111 1100
~4 = 1111 1011
~5 = 1111 1010
也就是你的代码不会让其顺序点亮,点亮的顺序比较奇怪哈
另外找了半天这个原理图,p1埠和Led之间存在74HC573这个器件,你对这个器件没有任何操作
对于74HC573这个器件,你得操作其LE埠和OE埠
保证OE埠为0,LE埠为1,这样其输入电平才可等于输出电平
还有一点,LED的一端接VCC,高电平;想要使LED点亮,则必须要有电流,也就是压差,也就是其实写0才是点亮
网上找的远离提,可能有点问题,不要全信!
首先可以不对位操作
P1=0
P1++
就可以而且不用担心溢出的问题
溢出又会变成0
试著去掉a这个临时变数
懂我意思不咯。
main函数放在最后试试
啊……
看来你还没有理解单片机编程的本质
对於单独一个LED 控制的是「位」 是Bit 这是计算机最小的单位
比如你用的51 是8位的 所以一个char应该有8个bit 你现在让一个char自增然后控制LED或者说引脚 你觉得可能吗?
顺著这个思路回去改程序吧 提醒一下 sbit这个关键字
没有用过你这个单片机 但网上查到的「51单片机」资料都说的是LED是P0控制的而不是P1。 看看电路图是不是用错变数了?
a给个初值试试吧
没啥问题看著
至于是不是非要用sbit关键字
直接给P1整个口赋值也无不可啊
俺觉得没毛病
-a什么鬼?a是多少?
a有问题没有赋初值
推荐阅读: