發布成功
贊賞金額:
支付金額:5元
支付方式:
贊賞成功!
你的贊賞是對作者最大的肯定~?
【編者按】設計PCB,單片機語言,通過結構體Hardware_Init的函數指針調用系統初始化函數,完成GPIO的初始化,接著進入主循環,延時500ms將運行指示燈翻轉,實現LED閃爍功能。可應用在實現交通燈、熒光棒、燈牌等產品,實現技術產品化。
一、工具鏈接
1、Keil c51 UV4
https://yunpan.360.cn/surl_yrIfYYmeRFk
2、STC-ISP下載軟件
https://yunpan.360.cn/surl_yxH4CuUUvI3
二、學習板獲取方式
方法1:自己設計PCB,自行打板焊接;
方法2:用作者設計的PCB,自行打板焊接。
三、程序功能
1、將通過Delay延時實現LED閃爍的代碼結構調整為面向對象結構;
2、用定時器實現LED閃爍。
四、硬件部分
五、面向對象知識
面向對象是軟件開發方法,是相對于面向過程來講的。通過把數據與方法組織為一個整體來看待,從更高的層次來進行系統建模,更貼近事物的自然運行模式;
單片機C語言的面向對象編程,是利用結構體,將變量、指針、函數等進行封裝,達到編程更加方便、程序可讀性更好、方便移植等目的。
1、結構體
結構體是由一系列具有相同類型或不同類型的數據構成的數據集合。
常用的定義方法:
typedef struct
{
變量;
指針;
函數指針;
} 結構體名稱_t;
2、指針
指針是地址,指向內存中的變量。
常用的定義方法:數據類型 * 指針名;
3、函數指針
函數指針是指向函數的指針變量。
常用的定義方法:返回值類型 ( * 指針變量名) ([形參列表]);
六、編程說明 - 面向對象程序結構
1、文件結構如下:
main.c -> 主函數文件,包含main函數等;
Public.c -> 公共函數文件,包含Delay延時函數等;
Sys_init -> 系統初始化函數,包含GPIO初始化函數等;
LED.c -> LED外設函數,包含LED打開、關閉函數等。
2、主函數如下:
運行流程:
通過結構體Hardware_Init的函數指針調用系統初始化函數,完成GPIO的初始化,接著進入主循環,延時500ms將運行指示燈翻轉,實現LED閃爍功能。
3、源代碼
版權需要,這部分內容,請在微信公眾號閱讀。
七、定時器
工作流程:通過寄存器配置定時器的工作模式。設定定時值。定時器啟動后,定時器在時鐘源的驅動下向下計數,當計數到0時,中斷標志位TF0置位,觸發定時器中斷,此時可以重新設定時值或自動重裝定時值,重新計數,周而復始。 如果定時器中斷開啟了,CPU會停下手頭的工作,轉而去運行定時器中斷函數,中斷函數運行完之后,CPU繼續干手頭的工作。
八、中斷概念
1、中斷存在的意義
為了提高CPU快速處理緊急事件的能力,比如按鍵中斷、定時任務、故障報警、接口通信等。
2、中斷概念
舉例:碼農A在全神貫注的擼代碼,突然,手機鈴聲響起,追求已久的女神竟然打電話過來了,然后快速的接聽了電話,接聽完電話,碼農A繼續擼代碼。
主循環 -> 碼農A擼代碼
手機鈴聲 -> 中斷標志位
接聽電話 -> 中斷處理
中斷返回 - >碼農A繼續擼代碼
九、編程說明 - 定時器
1、文件結構如下:
main.c -> 主函數文件,包含main函數等;
Public.c -> 公共函數文件,包含Delay延時函數等;
Sys_init -> 系統初始化函數,包含GPIO初始化函數等;
LED.c -> LED外設函數,包含LED打開、關閉函數等。
Timer0.c -> 定時器函數,包含定時器初始化,中斷函數等
2、主函數如下:
運行流程:
通過結構體Hardware_Init的函數指針調用系統初始化函數,完成GPIO與定時器0的初始化,接著進入主循環,CPU閑著。間隔一定時間進入定時器中斷處理函數,實現LED閃爍功能。
3、定時器中斷函數
版權需要,這部分內容,請在微信公眾號閱讀。
4、源代碼
版權需要,這部分內容,請在微信公眾號閱讀。
十、觀看視頻
地址: https://live.bilibili.com/21988510
別具一格的單片機實戰項目免費教學,以產品為導向,一起做項目的形式,加qq 1273755275拉入學習交流群。
開源項目,開發工具,技術資料以及更多原創技術文章,請關注微信公眾號:硬件家園 yjjy168168168
作者:劉杰,在軟硬件技術上有10年的經驗,在單片機的經驗更是突出,解決過多個單片機難題,可接單片機和軟件開發等項目。目前在開講單片機的教學,教程會在我愛方案網更新,敬請期待!