第2節介紹了如何用單片機控制 LED 小燈閃爍起來,在此基礎上,又在上一節讨論了如何制作“呼吸燈”。

缺乏互動的單片機
不過,這兩節制作的小燈時,我們把使用 C語言編寫的控制程式燒寫到單片機後,就無法再控制 LED 小燈了,也就是說,“隻能看不能動”,互動性比較差。接下來兩節,将介紹一種互動方法,目的是燒寫 C語言控制程式到單片機後,仍然能夠從外界控制 LED 小燈。
既然想實作互動,單片機就得能捕捉外界的變化,最簡單的方法就是通過按鍵。不過這裡不打算使用按鍵,而是通過“輸入指令”的方式控制 LED 小燈。
将單片機内部的資訊,printf 傳遞給電腦
一般的軟體開發中,如果想檢視某個變量的值,或者想輸出一句提示資訊,直接使用 printf 将資訊輸出到螢幕即可。遇到分支流程需要外界選擇時,我們也隻需按一下鍵盤就可以。但是對于 51 單片機來說,怎麼輸入指令給它呢?我的這款 51 單片機可既沒有配螢幕,也沒有配鍵盤:
其實 printf 隻是将資訊輸出到終端,終端不一定必須是螢幕,也可以是其他字元裝置,比如一般單片機都會有的序列槽外設。是以,沒有螢幕的 51 單片機也能夠使用 printf 函數,隻需要将其輸出口重定向到序列槽即可。
重定向的工作 keil4 已經做好了,剩下需要我們做的工作僅僅隻是配置一下單片機的序列槽寄存器而已,這項工作非常簡單,C語言代碼可以如下寫,請看:
void init_uart(unsigned int baud){ SCON = 0x5a; TMOD = 0x20; TH1 = TL1 = -(FOSC/12/32/baud); TR1 = 1; ES = 1; EA = 1;}
其中 FOSC 是單片機的晶振頻率,我使用的單片機頻率是 11.0592MHz。現在包含一下“stdio.h”頭檔案就可以使用 printf 函數了:
#include "reg51.h"#include "stdio.h"void main(){ init_uart(9600); printf("hello world, num: %d