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有問題沒有賦初值
推薦閱讀: