以下是我在做畢設(shè)寫代碼時候的一些心得體會
(1)旋轉(zhuǎn)編碼器檢測
旋轉(zhuǎn)編碼器的AB相分別接入單片機的P1.1和P1.2,并在軟件中申請變量PINB和PINA進行檢測。首先把接收的引腳置高電平,并申請一個變量EncOld記錄編碼器初始的狀態(tài)(00,01,10,11),用一個變量EncNew記錄編碼器現(xiàn)在的狀態(tài),對兩個狀態(tài)進行比較,如果兩個數(shù)據(jù)相同則返回0,如果兩個數(shù)據(jù)不同則通過判斷改變的順序判斷方向,00-10-11或11-01-00表示右轉(zhuǎn),返回R,00-01-11或11-10-00表示左轉(zhuǎn),返回L。另外由于旋轉(zhuǎn)編碼器具有開關(guān)特性,所以使用時需要延時消除抖動的影響。
(2)計時實現(xiàn)
在主程序中申請定時器中斷,根據(jù)計算定時器中斷初始化為TH0=0xdc,
TL0=0x00定時器每10ms中斷一次,也就是0.01秒,我們申請一個全局變量ms_10記錄定時器中斷次數(shù),一個6位數(shù)組存儲秒十位個位,分十位個位,時十位個位。當(dāng)中斷執(zhí)行100次時,也就是ms_10=100時清零ms_10,把秒個位自加1。當(dāng)秒個位自加到10時,把秒十位自加1并清零秒個位。當(dāng)秒十位自加到6時,把秒十位清零并把分個位自加1,同理記錄分十位,時個位十位。當(dāng)每次定時器執(zhí)行完一次重復(fù)執(zhí)行主程序打開定時器,則可以實現(xiàn)計時。值得注意的是,計時器中斷的功能軟件中不能由太多延時時間,或者通過一步步調(diào)試通過調(diào)試軟件的時間對延時初值進行調(diào)整,否則會出現(xiàn)計時不準的情況發(fā)生。
(3)顯示實現(xiàn)
使用LCD屏需要三個子程序通過RS和RW的引腳拉高和拉低實現(xiàn)對液晶屏判斷是否正在工作、寫一個字節(jié)和寫一個命令。再通過初始化LCD屏程序把計時器和誤操作次數(shù)顯示到LCD屏中,具體操作如下:使用寫命令子程序設(shè)置16*2顯示開顯示,關(guān)顯示光標(biāo),使用寫一個字節(jié)程序執(zhí)行清屏操作和顯示TIME和DEGREE作為標(biāo)題。再申請一個play函數(shù),顯示行車時間和誤操作次數(shù),只需要使用寫一個字節(jié)把時間數(shù)組中的數(shù)據(jù)寫在屏幕上。
(4)掉電保護
掉電保護通過把數(shù)據(jù)寫入24C02的方法實現(xiàn),24C02需要使用I2C通信,所以我們需要使用程序模擬I2C總線通信的方法,根據(jù)I2C總線通信方法需要申請SCL和SDA通過改變它們的數(shù)值實現(xiàn)對24C02的寫入和讀取。另外掉電保護寫入需要時間所以要加入延時保證寫入程序的順利執(zhí)行。
(5)串口通信
使用串口通信時,需要在串口助手中選擇與串口通信軟件中申請的相同波特率,并且申請計時器作為波特率發(fā)生器,初始化時打開計時器即可使用串口通信。根據(jù)計算,串口初始化波特率9600時,初值為0xfdfd,工作方式為自動重裝。
在接收到計算機發(fā)送的數(shù)據(jù)時進入串口中斷服務(wù)程序,接收之后存入一個臨時變量中,并對這個數(shù)進行判斷,如果為0,把存儲芯片中數(shù)據(jù)以一定的順序放入輸出數(shù)組,并發(fā)送給計算機;如果接收到的數(shù)據(jù)為1時,把存儲芯片的數(shù)據(jù)清零,即可實現(xiàn)清零功能。
(6)主程序
每次上電時,首先初始化24C02芯片,讀取芯片中的信息放入誤操作次數(shù)和時間數(shù)組的全局變量中,然后執(zhí)行顯示初始化和時間顯示,并啟動定時器。
如果光電門檢測有脈沖,進入行車循環(huán)檢測,啟動中斷和使用時間顯示,判斷開關(guān)角度變量是否為0,為0時車門已經(jīng)關(guān)緊,否則車門沒有關(guān)緊,如果車門沒有關(guān)緊則記錄紅燈亮、警報器響直到行車停止,也就是光電門不再有脈沖一段時間。誤操作次數(shù)加一,并寫入到掉電保護芯片中。而且每循環(huán)一次都把時間數(shù)組寫入到掉電保護芯片中,在每次上電的時候讀取并寫入其中。
進入停車循環(huán),執(zhí)行掃描旋轉(zhuǎn)編碼器并記錄旋轉(zhuǎn)編碼器的開關(guān)角度,左轉(zhuǎn)變量自減1,右轉(zhuǎn)自加1,如果車門關(guān)緊紅燈滅、綠燈亮,如果車門每關(guān)緊紅燈亮,綠燈滅,并記錄車門是否關(guān)緊的變量x,當(dāng)行車循環(huán)檢測時進行判斷,以提醒司機行車狀態(tài)。