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