標(biāo)題: 51單片機(jī)+L298直流電動(dòng)機(jī)控制程序+Proteus仿真與制作調(diào)試文檔 [打印本頁(yè)]
作者: 方滾滾 時(shí)間: 2019-6-29 16:33
標(biāo)題: 51單片機(jī)+L298直流電動(dòng)機(jī)控制程序+Proteus仿真與制作調(diào)試文檔
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (64.31 KB, 下載次數(shù): 59)
下載附件
2019-6-29 17:31 上傳
0.png (44.24 KB, 下載次數(shù): 56)
下載附件
2019-6-29 17:31 上傳
- 設(shè)計(jì)直流電機(jī)驅(qū)動(dòng)。
- 設(shè)計(jì)液晶屏(LCD1602)顯示電路和獨(dú)立鍵盤(pán)輸入電路。
- 能準(zhǔn)確顯示電機(jī)狀態(tài)及轉(zhuǎn)速。
- 能通過(guò)按鍵控制電機(jī)狀態(tài)及轉(zhuǎn)速。
2.1 設(shè)計(jì)方案方案一:?jiǎn)纹瑱C(jī)的四組并行口(P0、P1、P2、P3)在復(fù)位時(shí)是高電平,那么在設(shè)計(jì)按鍵接口時(shí)可以設(shè)計(jì)為低電平有效。當(dāng)?shù)碗娖綍r(shí)判斷按鍵被按下去,執(zhí)行相關(guān)的操作。
按鍵按下去會(huì)存在抖動(dòng)現(xiàn)象。如果對(duì)按鍵進(jìn)行計(jì)數(shù),會(huì)發(fā)現(xiàn)雖然只按下去一次,所計(jì)的數(shù)卻不一致。這樣會(huì)導(dǎo)致錯(cuò)誤的操作。因此需要對(duì)按鍵進(jìn)行消抖,按鍵接口只是執(zhí)行單純的被檢測(cè)功能,需要特殊的功能寄存器,所以使用P1口。
顯示模塊采用LCD1602液晶屏,使用單片機(jī)的P0口。P0比較特殊,需要外接上拉電阻才能正常進(jìn)行輸出?紤]到簡(jiǎn)化仿真圖的設(shè)計(jì),故使用P0口作為L(zhǎng)CD1602液晶屏是數(shù)據(jù)端口。
由于需要對(duì)電機(jī)進(jìn)行測(cè)速和狀態(tài)測(cè),P3存在一些特殊寄存器可以使用,故保留P3口。其它接口均接在除P3口以外的接口。
直流電機(jī)的轉(zhuǎn)速與正向電流持續(xù)時(shí)間成正比,使用PWM方式產(chǎn)生脈沖,電機(jī)轉(zhuǎn)速進(jìn)行調(diào)節(jié)。具體如何產(chǎn)生則使用定時(shí)器T0產(chǎn)生中斷。
測(cè)速則使用T1定時(shí)器、外中斷INT1組合測(cè)量。通過(guò)外中斷INT1的負(fù)跳變來(lái)開(kāi)啟T1計(jì)時(shí)器,通過(guò)測(cè)量?jī)纱呜?fù)脈沖的時(shí)間間隔即可得到轉(zhuǎn)速(電機(jī)轉(zhuǎn)動(dòng)一圈發(fā)出一定時(shí)長(zhǎng)的高電平)。
狀態(tài)的測(cè)量則在再次使用外中斷0、1來(lái)完成。狀態(tài)測(cè)量采用這樣的測(cè)量方式只需要測(cè)量一次即可,占用時(shí)間很短,并且準(zhǔn)確。
方案二:對(duì)方案一的部分進(jìn)行修改。按鍵部分為了響應(yīng)準(zhǔn)確,采用外接高電平的方法。
電機(jī)測(cè)速模塊:仍然不變。
狀態(tài)測(cè)量改成通過(guò)內(nèi)部編程完成測(cè)量,不需要外中斷0、1的參與。
方案三:仍然對(duì)方案一進(jìn)行修改。按鍵部分為確保準(zhǔn)確性,按鍵外部接上高電平。
PWM波形產(chǎn)生模塊使用數(shù)據(jù)選擇器對(duì)電機(jī)的正反轉(zhuǎn)進(jìn)行控制,降低編程難度。
2.2 方案選擇方案一過(guò)于追求準(zhǔn)確性,編程復(fù)雜,過(guò)多的開(kāi)啟中斷實(shí)現(xiàn)功能與其它方案是一樣的,但是大量標(biāo)志位的開(kāi)啟需要特別注意,同時(shí)要小心時(shí)序問(wèn)題。對(duì)編程能力、協(xié)調(diào)有比較高的要求。
方案二準(zhǔn)確的提高了按鍵的準(zhǔn)確性部分,通過(guò)仔細(xì)考慮,與開(kāi)外中斷測(cè)量比較,編程變簡(jiǎn)單。全部實(shí)現(xiàn)比較容易,但為保證準(zhǔn)確性、需要通過(guò)編程進(jìn)行調(diào)整。
方案三經(jīng)過(guò)仔細(xì)考慮,使用數(shù)據(jù)選擇器雖然降低了變成難度,在選擇芯片、了解芯片可能需要多花時(shí)間。
最終認(rèn)為方案二比較可行。
2.3 系統(tǒng)框圖整個(gè)系統(tǒng)以單片機(jī)為核心,處理信息。
- 鍵盤(pán):有7個(gè)鍵盤(pán),每個(gè)鍵盤(pán)有不同的功能。鍵盤(pán)的輸入信號(hào)流入單片機(jī)需要進(jìn)行消抖,避免產(chǎn)生預(yù)期外的結(jié)果。
- STC89C51:負(fù)責(zé)整個(gè)系統(tǒng)的信息處理。包括鍵盤(pán)的輸入信號(hào)處理、根據(jù)鍵盤(pán)的信號(hào)發(fā)出電機(jī)驅(qū)動(dòng)信號(hào)、對(duì)電機(jī)的速度和轉(zhuǎn)向進(jìn)行測(cè)量、測(cè)量完成將信息送給顯示。
- 電機(jī)驅(qū)動(dòng)芯片:電機(jī)所需要的驅(qū)動(dòng)電流相對(duì)于STC89C51直接輸出的電流要打的多,對(duì)電機(jī)的控制不理想。反過(guò)來(lái)同樣會(huì)影響到單片機(jī)的正常工作。所以需要通過(guò)驅(qū)動(dòng)芯片來(lái)驅(qū)動(dòng)直流電機(jī)。
- 電機(jī):電機(jī)為MOTOR-ENCODER,有五條線。其中的兩條用來(lái)輸入電流驅(qū)動(dòng)電機(jī),剩余的三條為電機(jī)的編碼輸出。中間的線輸出特征為電機(jī)轉(zhuǎn)動(dòng)一圈輸出一個(gè)正脈沖。邊上兩個(gè)根線輸出的脈沖可調(diào),脈沖的相位相差90度,反應(yīng)了電機(jī)的正反轉(zhuǎn)。
- 顯示:顯示所用器件為LCD1602顯示器,顯示電機(jī)轉(zhuǎn)速,正反轉(zhuǎn)狀態(tài)。
3.1 總體硬件設(shè)計(jì)總體硬件分為:晶體振蕩器電路、復(fù)位電路、按鍵輸入模塊、顯示電路、電機(jī)驅(qū)動(dòng)電路、電機(jī)模塊。如下圖 3.1?1所示
圖 3.1?1
3.2 晶體振蕩器電路晶振X1采用11.0592MHZ,電容C1、C2采用典型值22pF。如圖 3.2?1。該電路的功能是為單片機(jī)提供11.0529MHZ的時(shí)鐘。
圖 3.2?1
3.3 復(fù)位電路電路圖 3.3?1如所示。復(fù)位電路電源為+5V、電容(極性電容)C3采用典型值10uF、電阻R7為820歐姆、按鍵。該電路為單片機(jī)復(fù)位端口提供一定時(shí)間的高電平,當(dāng)單片機(jī)發(fā)生異常時(shí)可以通過(guò)按鍵使單片機(jī)復(fù)位。然后正常運(yùn)行。其中EA/引腳在此電路中不需要使用,只是接上去了而已。
圖 3.3?1
3.4 按鍵輸入電路電路圖如圖 3.4?1所示。按鍵共有6個(gè),分別有不同的功能。按鍵的功能在圖上已經(jīng)標(biāo)出。圖中的六個(gè)電阻阻值為1K歐姆,為限流電阻、還有降壓的作用。電壓沒(méi)有標(biāo)出統(tǒng)一為+5V。只有按下按鍵1才能啟動(dòng)其他按鍵。
圖 3.4?1
3.5 顯示電路電路圖如圖 3.5?1所示。液晶顯示模塊數(shù)據(jù)口與單片機(jī)的P0口連接,其它端口通過(guò)標(biāo)號(hào)與P2.0、P2.1連接。P0口與液晶顯示模塊交換信息、P2.0、P2.1口對(duì)液晶進(jìn)行讀寫(xiě)、使能控制。
圖 3.5?1
3.6 電機(jī)驅(qū)動(dòng)電路電路圖如圖 3.6?1所示。驅(qū)動(dòng)芯片型號(hào)為L(zhǎng)298其驅(qū)動(dòng)能力很強(qiáng)。VCC為芯片的電源+5V、VS為電機(jī)驅(qū)動(dòng)電壓,最高為45V。IN1、IN2接TTL電平、與單片機(jī)標(biāo)號(hào)為ON、OFF的端口(電機(jī)控制流的輸出端口)連接,ON、OFF端口如圖 3.4?1所示。ENA、ENB為芯片的使能端,高電平時(shí)芯片工作。ENA控制端口IN1、IN2、OUT1、OUT2。低電平時(shí)端口無(wú)法工作,無(wú)法控制電機(jī)。OUT1、OUT2接直流電機(jī)輸入端。圖中接地的端口在圖中用不到。
圖 3.6?1
3.7 電機(jī)模塊電路圖如圖 3.7?1所示。電機(jī)的輸入端口為1、2。1為高電平時(shí),電機(jī)正轉(zhuǎn)2為高電平時(shí),電機(jī)反轉(zhuǎn)。1、2同為高或者低電平則不轉(zhuǎn),ENA低電平也不轉(zhuǎn)。電機(jī)的A、B與單片機(jī)的A、B連接,用于電機(jī)狀態(tài)的測(cè)量。IN1與單片機(jī)的IN1相連,用于測(cè)速。具體連接與標(biāo)號(hào)在圖中已標(biāo)注。
圖 3.7?1
4.1 圖形界面設(shè)計(jì)4.1.1 按鍵界面設(shè)計(jì)如圖 4.1?1所示
按鍵掃描模塊中有6個(gè)按鍵,每個(gè)按鍵會(huì)調(diào)動(dòng)相應(yīng)的模塊。并對(duì)數(shù)據(jù)處理。
4.1.2 LCD1602模塊界面界面設(shè)計(jì)如圖 4.1?2所示:
顯示模塊會(huì)顯示電機(jī)的相關(guān)信息(正轉(zhuǎn)、反轉(zhuǎn)、速度、可以加上電機(jī)是否加速的、減速的測(cè)試、以及顯示),顯示前將依據(jù)按鍵輸入的信號(hào)進(jìn)行運(yùn)算,處理后送入液晶中。
5.1 程序流程圖主程序流程圖如圖 5.1?1所示。
6.1 硬件調(diào)試在確定方案后,便開(kāi)始搭建硬件。從難易程度來(lái)看,該課題是比較簡(jiǎn)單的所以硬件部分搭建容易,搭建完成即可。開(kāi)始方案是選擇方案一,需要使用多個(gè)中斷,需要修改的僅僅是電路的連接。后面發(fā)現(xiàn)方案一過(guò)于復(fù)雜,改用方案二,對(duì)需要修改的連接電路增加標(biāo)號(hào)即可。
6.2 程序調(diào)試由于是自己寫(xiě)程序,經(jīng)驗(yàn)不足、速度慢,容易出現(xiàn)問(wèn)題。為了保證每一個(gè)環(huán)節(jié)到位,采用邊寫(xiě)程序、邊調(diào)試的方法。
最先開(kāi)始的模塊是顯示模塊。顯示模塊使用器件為L(zhǎng)CD1602,在單片機(jī)的課程中學(xué)過(guò)做過(guò)關(guān)于這個(gè)器件的實(shí)驗(yàn),對(duì)器件了解有一些,但不是很熟悉。對(duì)原來(lái)的程序沒(méi)有進(jìn)行封裝,最開(kāi)始出現(xiàn)數(shù)據(jù)送入位置錯(cuò)誤,造成預(yù)期之外的結(jié)果。而后通過(guò)仔細(xì)查看課本上的資料,通過(guò)位置對(duì)照,修改后,液晶顯示模塊初步?jīng)]有問(wèn)題。
電機(jī)控制模塊:對(duì)電機(jī)控制需要使用中斷、在中斷里面產(chǎn)生方波信號(hào),并且方波的占空比可調(diào),電機(jī)控制流輸出通道選擇也在這個(gè)模塊。在這個(gè)模塊完成前需要完成一部分鍵盤(pán)掃描函數(shù)的設(shè)計(jì)。當(dāng)以上程序完成并運(yùn)行后,通道選擇和占空比都出現(xiàn)了問(wèn)題。最開(kāi)始是無(wú)論按什么鍵電機(jī)都不轉(zhuǎn),于是乎調(diào)整程序,首先發(fā)現(xiàn)單片機(jī)四組端口復(fù)位后輸出為高電平,即表示電機(jī)停轉(zhuǎn),需要對(duì)電機(jī)輸出端口初始化,都為低電平。然后進(jìn)行控制。脈沖波形的占空比的調(diào)節(jié),設(shè)立多個(gè)全局變量,設(shè)置上下限,這樣波形占空比調(diào)節(jié)沒(méi)有問(wèn)題。電機(jī)輸出信號(hào)通道選擇,由于寫(xiě)程序經(jīng)驗(yàn)不足,邏輯上出現(xiàn)了錯(cuò)誤,導(dǎo)致想要外接數(shù)據(jù)選擇器來(lái)調(diào)節(jié)信號(hào)輸出,進(jìn)而控制電機(jī)正反轉(zhuǎn)。最后經(jīng)過(guò)實(shí)驗(yàn)發(fā)現(xiàn)這個(gè)方法實(shí)現(xiàn)起來(lái)比較困難,思路沒(méi)有。還是從中斷里面進(jìn)行調(diào)節(jié)好一些。最終實(shí)現(xiàn)了電機(jī)的調(diào)節(jié)。
電機(jī)轉(zhuǎn)向測(cè)量模塊:此模塊完成后在多次的調(diào)試過(guò)程中發(fā)現(xiàn)使用while語(yǔ)句莫名奇妙對(duì)電極控制模塊產(chǎn)生了影響。為了保證電機(jī)控制模塊沒(méi)有問(wèn)題,對(duì)轉(zhuǎn)向模塊重新進(jìn)行了設(shè)計(jì),理論分析。但是由于時(shí)間問(wèn)題,沒(méi)能完成。
測(cè)速模塊的調(diào)節(jié):測(cè)速模塊需要定時(shí)器1和外中斷1完成。測(cè)速模塊完成后需要與顯示模塊共同完成。由于此前在選擇方案的時(shí)候,過(guò)分依賴中斷和定時(shí)器,進(jìn)行了較長(zhǎng)時(shí)間的論證,電機(jī)控制模塊的調(diào)試由于是個(gè)人編程思想和能力問(wèn)題導(dǎo)致花費(fèi)了大量的時(shí)間。測(cè)速模塊雖然完成,但是沒(méi)有時(shí)間調(diào)試。
6.3 心得體會(huì)在一周的實(shí)訓(xùn)中,發(fā)現(xiàn)了很多的問(wèn)題,也收獲了很多。最開(kāi)始是方案的確定很困難,方案的確定需要對(duì)單片機(jī)的各個(gè)資源非常了解。這從側(cè)面反映了個(gè)人對(duì)單片機(jī)不熟悉,以及特點(diǎn)的不了解,最終方案的敲定花費(fèi)了大量的時(shí)間,導(dǎo)致后面編程、其它問(wèn)題的解決時(shí)間不足。
從定時(shí)器T0的編程中發(fā)現(xiàn)自身的寫(xiě)程序能力非常薄弱,程序的結(jié)構(gòu)很亂,在一定程度上來(lái)說(shuō)完全是想到什么就寫(xiě)什么,毫無(wú)章法。更沒(méi)有將程序封裝起來(lái)、留做下次便以稍加修改即可使用。
總之,在這次實(shí)訓(xùn)中讓我看到了自己各個(gè)方面的不足,這些不足通過(guò)平時(shí)的鍛煉是可以補(bǔ)起來(lái)的,反映出學(xué)習(xí)方法存在問(wèn)題,需要加以改進(jìn)。通過(guò)實(shí)訓(xùn),對(duì)單片機(jī)的部分硬件有了進(jìn)一步的了解、熟悉。單片機(jī)實(shí)訓(xùn)是一個(gè)比較綜合的課程,結(jié)合了C語(yǔ)言、單片機(jī)常識(shí)、模擬電路、數(shù)字電路、硬件設(shè)計(jì)、軟件的使用、軟件設(shè)計(jì)。對(duì)培養(yǎng)獨(dú)立解決問(wèn)題的能力、自主學(xué)習(xí)能力、創(chuàng)新思維能力有較大影響。
單片機(jī)源程序如下:
- #include <reg52.h>
- #include<string.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
-
- sbit lcdrs=P2^0; //寄存器選擇,0:數(shù)據(jù)寄存器。1:為狀態(tài)/命令寄存器
- sbit lcden=P2^1; //--LCD控制引腳
- sbit speed=P3^2; //測(cè)速端口
- sbit ENA=P2^2; //電機(jī)使能控制端
- sbit key1=P1^0; //啟動(dòng)按鍵
- sbit key2=P1^1; //正轉(zhuǎn)按鍵
- sbit key3=P1^2; //反轉(zhuǎn)按鍵
- sbit key4=P1^3; //加速按鍵
- sbit key5=P1^4; //減速按鍵
- sbit key6=P1^5; //停止按鍵
- sbit Zheng=P1^6; //正轉(zhuǎn)輸出端口
- sbit Fan=P1^7; //反轉(zhuǎn)輸出端口
- uchar Timer0_flag=4;
- uchar Timer0_BiaoZhi=0;//初始化占空比為1:3(高:低)
- uchar gewei;
- uchar shiwei;
- uchar baiwei;
- /******標(biāo)志位設(shè)置*****/
- uchar KEY1=0;//優(yōu)先級(jí)標(biāo)志
- uchar KEY2=0;//加速標(biāo)志
- uchar INT1_FLAG=0;
- uchar COUNTER_high=0;
- uchar COUNTER_low=0;
- uchar SUM=0;
- uint TIMER1_COUNTER=0;
- uint INT1_tingzhi=0; //在要測(cè)速時(shí)置0
- /****面板顯示****/
- uchar code lcd_desktop11[]="stop";//停止
- uchar code lcd_desktop12[]="ford";//正轉(zhuǎn)
- uchar code lcd_desktop13[]="fanz";//反轉(zhuǎn)
- uchar code lcd_desktop21[]="speedup";//加速
- uchar code lcd_desktop22[]="speeddn";//減速
- uchar code num[]={'0','1','2','3','4','5','6','7','8','9'};//要顯示的轉(zhuǎn)速數(shù)字。
- //-----lcd液晶屏頭文件-----//
- /**延時(shí)函數(shù)**/
- void delayms(uchar xms)
- {
- uchar i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
- /****LCD寫(xiě)命令******/
- void write_command(uchar com)//com寫(xiě)入命令
- {
- lcdrs=0;
- P0=com;
- delayms(2);
- lcden=1;
- delayms(2);
- lcden=0;
- }
- /**************LCD寫(xiě)數(shù)據(jù)*********/
- void write_data(uchar date)//數(shù)據(jù)為DATA
- {
- lcdrs=1;
- P0=date;
- delayms(2);
- lcden=1;
- delayms(2);
- lcden=0;
- }
- /********LCD初始化****************/
- void lcd_init()//顯示模式設(shè)置
- {
- lcden=0;
- write_command(0x38);
- write_command(0x0c);
- write_command(0x06);
- write_command(0x01);
- }
- /**電機(jī)初始化函數(shù)**/
- void motor_init(void)
- {
- ENA=0; // 停止
- }
- void ZhongDuanKaiQi(void)
- {
- EA=1;
- ET0=1; //計(jì)時(shí)器0允許中斷。產(chǎn)生脈沖。
- ET1=1; //計(jì)時(shí)器1允許中斷。對(duì)低電平進(jìn)行計(jì)時(shí)。
- //EX1=1; //INT0允許中斷。測(cè)速。由外部來(lái)啟動(dòng)。
- IT1=1; //低電平觸發(fā)。
- PX1=0; //低級(jí)中斷。
- PT0=1;
- PT1=0;
- TMOD=0x12;//定時(shí)器工作方式控制
- }
- /***定時(shí)器T1初始化。。〉却獠棵}沖的到來(lái)***/
- void Timer1_init(void)
- {
- TH1=0;
- TL1=0; //等待外部脈的到來(lái)。INT1
- }
- /*****定時(shí)T0初始化*****/
- void Timer0_init(void)
- {
- TH0=0;
- TL0=0;
- TR0=1;
- }
- /********測(cè)速模塊,顯示速度*******/
- void speed_test(void)
- {
- // TIMER1_COUNTER;
- COUNTER_high=TH1;
- COUNTER_low=TL1;
- SUM=COUNTER_high*256+COUNTER_low+TIMER1_COUNTER*65536;//得到的是多少us。
- SUM=SUM/1000; //化為毫秒。
- SUM=1000/SUM; //圈每秒。
- SUM=SUM*60; //圈每分鐘;三位數(shù)。
- gewei=SUM%10;
- shiwei=SUM/10%10;
- baiwei=SUM/100;
- write_command(0xc0);
- write_data(baiwei);
- write_command(0xc1);
- write_data(shiwei);
- write_command(0xc2);
- write_data(gewei);
- SUM=0;
- TIMER1_COUNTER=0;
- }
- /********外中斷1函數(shù)**********/
- void INT1_QIDONG() interrupt 2
- {
- INT1_tingzhi++;
- if(INT1_tingzhi==5)
- {
- INT1_tingzhi=5;EX1=0;//關(guān)閉中斷。
- }
- if(INT1_tingzhi<=4)
- {
- INT1_FLAG++;
- if(INT1_FLAG==2)
- {
- INT1_FLAG=0;TR1=0;speed_test();
- }
- else
- {
- Timer1_init();
- TR1=1;
- }
- }
- }
- /******定時(shí)器T1計(jì)數(shù)*******/
- void Timer1_QIDONG() interrupt 3
- {
- TIMER1_COUNTER++;
- }
- /**相位測(cè)量并輸出!!!!!出現(xiàn)問(wèn)題???**/
- void xiangwei_test(void)
- {
- uchar i=0,j=0;
- //while((P2^3==0)&&(P2^4==0));
- //if((P2^3==0)&&(P2^4==0))
- {
- //delayms(5);
- if(P2^3==1)
- {
- write_command(0x01);
- write_command(0x80);for(i=0;i<=3;i++) write_data(lcd_desktop13[i]);//反轉(zhuǎn)。
- j++;//反轉(zhuǎn)
- }
-
- if(P2^4==1)
- {
- write_command(0x01);
- write_command(0x80);for(i=0;i<=3;i++) write_data(lcd_desktop12[i]);//正轉(zhuǎn)。
- j++;
- }
- }
- }
- /****T0中斷發(fā)出信號(hào)并進(jìn)行通道選擇****/
- void Timer0() interrupt 1
- {
- Timer0_flag--;
- if((Timer0_BiaoZhi)>=(Timer0_flag))
- {
- if(KEY2==0)
- {
- Zheng=1;Fan=0;
- }
- else
- {
- Zheng=0;Fan=1;
- }
- }
- else
- {
- Zheng=0;Fan=0;
- }
- if(Timer0_flag==0) Timer0_flag=5;
- }
- void Guan(void)
- {
- ET0=0;
- EX1=0;
- ET1=0;
- }
- void keyscan() //按鍵掃描函數(shù)
- {
- uint i=0;
- if(key1==0) //按鍵K1啟動(dòng)按鈕。只有該位啟動(dòng)時(shí),后面的幾位才有效。啟動(dòng)T0計(jì)數(shù)開(kāi)始發(fā)出脈沖。
- {
- delayms(10);
- if(key1==0)
- {
- while(!key1);
- KEY1=5;
- Fan=0;
- Zheng=0;
- ENA=1;
- KEY2=0;//初始化為正轉(zhuǎn)。
- Timer0_BiaoZhi=0;
- Timer0_flag=4;
-
- ZhongDuanKaiQi();//開(kāi)啟中斷
- Timer0_init();// 初始化并開(kāi)始發(fā)出脈場(chǎng)外中斷已經(jīng)開(kāi)啟。
- EX1=1; //外中斷開(kāi)啟;測(cè)速,顯示速度。五次后結(jié)束關(guān)閉外中斷1。出現(xiàn)問(wèn)題!。
-
- write_command(0x80);
- for(i=0;i<strlen(lcd_desktop11);i++)//顯示正轉(zhuǎn)。
- write_data(lcd_desktop12[i]);
- }
- }
-
- if((key2==0)&&(KEY1=5)) //按鍵K2按下,(正轉(zhuǎn))只改變轉(zhuǎn)向(標(biāo)志位改變輸出端口)
- {
- delayms(10);
- if(key2==0)
- {
- while(!key2);
- KEY2=0; //正轉(zhuǎn)標(biāo)志,電機(jī)正向旋轉(zhuǎn)。
- //KEY2=(~1);
- xiangwei_test();
- KEY1=5;
- }
- }
-
- if((key3==0)&&(KEY1=5)) //按鍵K3按下,(反轉(zhuǎn))只改變轉(zhuǎn)向
- {
- delayms(10);
- if(key3==0)
- {
- while(!key3);
- KEY2=~0; //反轉(zhuǎn)標(biāo)志。
- //KEY2=(~0);
- xiangwei_test();
- KEY1=5;
- }
- }
- if((key4==0)&&(KEY1==5)) //按鍵K4按下,(加速)改變裝入的數(shù)值?循環(huán)次數(shù)?執(zhí)行if里面的語(yǔ)句,通過(guò)size++來(lái)改變幅值的頻率
- {
- delayms(10);
- if(key4==0)
- {
- while(!key4);
- if(Timer0_BiaoZhi<4)
- {
- Timer0_BiaoZhi++;
- }
- else
- {
- Timer0_BiaoZhi=4;
- }
- EX1=1;
- KEY1=5;
- }
-
- }
-
- if((key5==0)&&(KEY1==5)) //按鍵K5按下,(減速)對(duì)其它標(biāo)志位沒(méi)有影響。
- {
- delayms(5);
- if(key5==0)
- {
- while(!key5);
- if(Timer0_BiaoZhi==0)
- {
- Timer0_BiaoZhi=0;
- }
- else
- {
- Timer0_BiaoZhi--;
- }
- EX1=1;
- KEY1=5;
- }
- }
- if((key6==0)&&(KEY1==5))//按鍵K6按下,電機(jī)停止轉(zhuǎn)動(dòng)使能端和計(jì)數(shù)啟動(dòng)關(guān)閉,計(jì)數(shù)器工作否?設(shè)立標(biāo)志位。此按鍵按下后除K1外無(wú)法啟動(dòng)
- {
- delayms(5);
- if(key6==0)
- {
- while(!key6);
- //置位,保證后續(xù)操作正常。
-
-
-
- EA=0; //總中斷關(guān)
- motor_init(); //電機(jī)關(guān)
- Guan();
-
- }
- }
- }
-
- /*主函數(shù)*/
- void main()
- {
- ZhongDuanKaiQi();//初始化
- motor_init(); //電機(jī)停止
- lcd_init();
- while(1)
- {
- keyscan();
-
- }
- }
復(fù)制代碼
0.png (9.27 KB, 下載次數(shù): 44)
下載附件
2019-6-29 17:27 上傳
所有資料51hei提供下載:
直流電機(jī)驅(qū)動(dòng).7z
(2.63 MB, 下載次數(shù): 173)
2022-4-19 02:15 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者: wocaonimabi123 時(shí)間: 2019-8-26 15:30
好,但是單片機(jī)有問(wèn)題
作者: qwerzhang 時(shí)間: 2021-4-25 16:59
試了一下,但是LCD無(wú)法顯示信息,只有ford一直顯示,不知道是什么原因
作者: James623 時(shí)間: 2022-4-18 23:50
為什么proteus仿真打不開(kāi)
作者: heicad 時(shí)間: 2022-4-19 02:16
你需要用Proteus7.5 或者8.8版本才行,你看我剛打開(kāi)的樓主的圖
-
51hei.gif
(147.93 KB, 下載次數(shù): 76)
下載附件
2022-4-19 02:16 上傳
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
亚洲一区二区三区视频在线
|
观看av
|
一级黄色片在线免费观看
|
日本精品视频在线观看
|
中文字幕在线观看视频一区
|
午夜精品久久久
|
亚洲国产激情
|
欧美 日韩 国产 在线
|
国产精品91视频
|
欧美精品乱码99久久影院
|
久青草影院|
青青久草|
天天操网
|
国产精品亚洲第一区在线暖暖韩国
|
中文字幕亚洲精品
|
日本高清不卡视频
|
久久久久久国产精品免费
|
欧美成人精品在线
|
日韩中文字幕免费在线观看
|
国产在线一区二区三区
|
成人精品视频在线
|
国产丝袜一区二区三区免费视频
|
亚洲国产一区二区视频
|
黄色在线免费观看视频网站
|
欧美一区二区三区久久精品视
|
在线观看免费av网
|
夜夜操天天干
|
日韩成人在线看
|
亚洲一区 中文字幕
|
日韩成人精品
|
久久精品国产一区二区电影
|
亚洲看片网站
|
久久久激情视频
|
国产精品91视频
|
国产激情在线看
|
国产一区二区三区四区
|
伊人久久麻豆
|
在线欧美|
一级毛片视频
|
狠狠av|
精品国产一区二区三区久久
|