以PWM控制直流電機(jī)為例建一個(gè)簡(jiǎn)單的51工程框架
目錄
1)功能概述
2)引腳連接
3)框架介紹
4)模塊說(shuō)明
5)復(fù)用規(guī)則
6)工程鏈接
1)功能概述
名稱:獨(dú)立按鍵控制直流電機(jī)調(diào)速
內(nèi)容:對(duì)應(yīng)的電機(jī)接口需用杜邦線連接到uln2003電機(jī)控制端;
使用5V-12V 小功率電機(jī)皆可 2個(gè)按鍵分別加速和減速;
采用8個(gè)8段數(shù)碼管的后兩位顯示0~10級(jí)速度;
2)引腳連接
P3連接按鍵;P0連接8x八段數(shù)碼管,P22段碼鎖存,P23位碼鎖存;P1.1連接ULN2003的一個(gè)輸入;直流電機(jī)端連接ULN2003對(duì)應(yīng)的輸出,另一端連接VCC。
3)框架介紹
本文主要目的不是介紹如何實(shí)現(xiàn)功能,而是如何做一種方便復(fù)用和理解的框架。如下圖左USER文件中的文件屬于最高層(離用戶最近);FUNC文件夾中的文件屬于功能層(用戶層文件可以調(diào)用功能層實(shí)現(xiàn)的各種功能,同時(shí)功能層內(nèi)部也有少量的相互調(diào)用);INTE文件夾主要是中斷層(本來(lái)想把中斷單獨(dú)拿出來(lái),但是中斷子程序和用戶層交叉太多,所以僅在這里實(shí)現(xiàn)中斷初始化函數(shù),中斷子程序依然放在main.c文件中)
注:注意main.c中的引用?。ㄒ?yàn)樵趉eil里的文件夾和外部并沒(méi)有直接對(duì)應(yīng)關(guān)系,外部是我手動(dòng)建的)
4)模塊說(shuō)明
-->4.1 delay說(shuō)明:對(duì)外提供兩個(gè)延時(shí)函數(shù)(在I2C、按鍵消抖等地方要用到)
1#include23voidDelayUs2x(unsignedchart);//us級(jí)延時(shí)函數(shù)聲明4voidDelayMs(unsignedchart);//ms級(jí)延時(shí)
-->4.2 key8說(shuō)明:對(duì)外提供按鍵掃描函數(shù),如果有按鍵按下則返回對(duì)應(yīng)的鍵值(這是8按鍵的,不是4x4的)
1#include23#defineKeyPortP345unsignedcharKeyScan(void);//按鍵掃描函數(shù),返回掃描鍵值
應(yīng)用示例:如下KeyScan()被調(diào)用來(lái)檢測(cè)按鍵實(shí)現(xiàn)按鍵控制功能~
-->4.3 led8說(shuō)明:對(duì)外提供在8x八段數(shù)碼管顯示功能(這里要做特殊處理)
1#include23#defineDataPortP0//定義數(shù)據(jù)端口程序中遇到DataPort則用P0替換4sbitLATCH1=P2^2;//定義鎖存使能端口段鎖存5sbitLATCH2=P2^3;//位鎖存67voidDisplay(unsignedcharFirstBit,unsignedcharNum);
應(yīng)用示例:如下把要顯示的2位的整數(shù)PWN_ON顯示在8X八段數(shù)碼管上。在1的地方要分別取PWN_ON的十位和個(gè)位然后通過(guò)DuanMa轉(zhuǎn)換為相應(yīng)的數(shù)碼管燈的顯示數(shù)值;然后在中斷或具有頻繁周期刷新的函數(shù)體內(nèi)調(diào)用display函數(shù)進(jìn)行顯示(display的第一個(gè)參數(shù)是選擇8x八段數(shù)碼管的第幾位開始顯示,0表示從第1位開始;第二個(gè)參數(shù)是說(shuō)明要顯示幾位)
特別注意:這里的display(6,2)意思是把一個(gè)兩位整數(shù)顯示在8個(gè)數(shù)碼管的后兩個(gè)上,而給TempData賦值并不是TempData[6]和TempData[7]!
5)復(fù)用規(guī)則
今后便可采用相同的方法不斷擴(kuò)充FUNC層,當(dāng)遇到具體問(wèn)題可以在main和中斷中做調(diào)整。
6)工程鏈接
https://github.com/beautifulzzzz/stc89c51-or-stc89c52