- 單片機C語言程序設計實訓100例
- 彭偉編著
- 447字
- 2018-12-27 05:12:01
第3章 基礎程序設計
通過對前兩章的學習,讀者進一步熟悉了8051 單片機的基本硬件結構與內部資源,歸納了用C語言開發單片機程序必須參考和重點掌握的技術內容,了解了用C語言開發調試單片機系統的優勢,同時,還熟悉了Proteus的基本操作,Proteus與μ V3的聯合調試技術等,這為本章及后續章節Proteus環境下C語言程序設計案例的學習調試與研究作好了準備。
本章案例全面涉及8051單片機內部資源的程序設計及基本外圍元件的應用,案例包括3部分:
第1部分是1~23號案例,涉及基本I/O控制,包括LED、數碼管、按鍵、開關與繼電器、蜂鳴器等程序設計。
第2部分是24~42號案例,主要涉及外部中斷與定時計數器程序設計。
第3部分是43~48號案例,內容涉及串口控制,包括通過串口進行串并、并串轉換、雙單片機通信、單片機與PC通信等。
通過對這些案例的學習研究與跟蹤調試,并對各案例中提出的修改要求或新的設計目標的實踐與實訓,讀者將全面掌握8051單片機的C語言基礎程序設計技術,熟練使用C語言控制和運用單片機內部資源,為8051單片機擴展資源的應用及8051單片機系統的綜合設計打下良好基礎。
3.1 閃爍的LED
本例單片機P1.0引腳連接LED,程序按設定的時間間隔取反P1.0,使LED按固定時間間隔持續閃爍。
本例電路如圖3-1所示,注意電路中限流電阻R2的阻值不能過大,否則LED不會閃爍。

圖3-1 閃爍的LED電路
程序設計調試與實訓:
本程序頭文件reg51.h不能省略,否則,編譯時將會提示:
TEXT1.C(??): error C202: 'P1': undefined identifier
Keil C認為P1是未定義的標識符,因為頭文件reg51.h定義了所有的特殊功能寄存(SFR),錯誤提示中(??)是錯誤所在的行號。當然,讀者也可以在省略該頭文件時,添加一行代碼:sfr P1= 0x90; 因為P1的地址為0x90。
注意本例中的延時子程序放在main()函數前面,如果要放在main()函數后,則在#define的下面添加以下相應的函數申明語句:
void DelayMS(uint x);
要增加延時間隔時,可修改源程序中的延時值150,由于參數類型為uint,因此,最大可設延時為65535,如果延時參數類型為uchar,則參數最大值不要超過255。
另外,本程序及后續多道程序中均有uchar和uint的宏定義,雖然并非每個程序都同時使用了uchar和uint類型,但本書幾乎所有程序中都同時定義了這兩種類型。
讀者閱讀調試后可修改本例,控制多個LED閃爍,并改變它們的閃爍速度。
源程序代碼:
//----------------------------------------------------------------- // 名稱: 閃爍的LED //----------------------------------------------------------------- // 說明: LED按設定的時間間隔閃爍。 //----------------------------------------------------------------- #include <reg51.h> #define uchar unsigned char #define uint unsigned int sbit LED = P1^0; //----------------------------------------------------------------- // 延時 //----------------------------------------------------------------- void DelayMS(uint x) { uchar i; while(x--) { for(i = 0; i < 120; i++); } } //----------------------------------------------------------------- // 主程序 //----------------------------------------------------------------- void main() { while(1) { LED = ~LED; DelayMS(150); } }
- Python 3.7網絡爬蟲快速入門
- 零基礎PHP學習筆記
- Apache Spark 2 for Beginners
- Python網絡爬蟲從入門到實踐(第2版)
- TypeScript實戰指南
- Visual C++應用開發
- Drupal 8 Module Development
- 深入淺出Serverless:技術原理與應用實踐
- Unity 2D Game Development Cookbook
- Programming with CodeIgniterMVC
- 工業機器人離線編程
- Web程序設計:ASP.NET(第2版)
- Android編程權威指南(第4版)
- 跟小樓老師學用Axure RP 9:玩轉產品原型設計
- PhantomJS Cookbook