版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、基于AT89s52單片機的語音提示的四則運算器的設計基于AT89s52單片機的語音提示的四則運算器的設計,該設計主要包括硬件設計部分和軟件設計部分。硬件設計部分主要是對單片機,數(shù)據(jù)輸入的4*4鍵盤,語音提示模塊,數(shù)據(jù)顯示模塊的選擇和設計。軟件設計部分主要是對兩個4位整數(shù),1位小數(shù)進行四則運算,并將其運算結(jié)果通過數(shù)據(jù)顯示模塊顯示出來,并有相應的語音提示。在計算器主體的表面上配設有電源接通、全清除健、數(shù)字健、小數(shù)點健、四則運算健、等號健與下載線共同形成雙電源方式用語音提示的計算器,其中,在計算器主體的表面上還配設有顯示從數(shù)字鍵、小數(shù)點健輸入的數(shù)值的主顯示器、按加法存儲器(轉(zhuǎn)換健)時將顯示在主顯示器
2、中的數(shù)值進行轉(zhuǎn)換后顯示該數(shù)值的存儲顯示器、將主顯示器和存儲顯示器的兩個畫面并列地配設并做成T通過從各種轉(zhuǎn)換健輸入來同時或者交替地顯示兩個畫面顯示的結(jié)構(gòu)的二選行顯示器、按下時將顯示在主顯示器中的數(shù)值轉(zhuǎn)換至存儲顯示器的加法存儲(轉(zhuǎn)換鍵)、按下時將顯示在主顯示器中的數(shù)值從正向負或從負向正進行變更的減法存儲(轉(zhuǎn)換?。?、按下兩次時將顯示在存儲顯示器中的數(shù)值清除的存儲·清除健、按下時將顯示在存儲顯示器中的數(shù)值轉(zhuǎn)換至主顯示器而按兩次時則再次顯示出在進行轉(zhuǎn)換之前顯示在主顯示器中的數(shù)值的轉(zhuǎn)換鍵。本設計是基于AT89S52單片機的語音提示的四則運算器,去除兩畫面變更顯示。該設計總共有6個模塊:電源模塊、
3、AT89S52最小系統(tǒng)模塊、1602液晶顯示模塊、4*4鍵盤模塊、語音提示模塊和實時溫度檢測模塊。智能小車系統(tǒng)開發(fā)基于51單片機的手機藍牙遙控(帶重力感應)小車設計智能小車系統(tǒng)開發(fā)主要知識有電機的使用、舵機的使用、遙控小車設計、循跡小車設計、藍牙小車設計、兩輪平衡及機機械手。但是本次小車設計主要有電機的使用、遙控小車設計、藍牙小車設計三部分。其余的部分暫時沒有完成,后期繼續(xù)改進,爭取做到完美。圖 1 各種智能車開發(fā)平臺圖 2 智能車主要功能圖 3 智能小車與機器人控制器圖 4 各配套電路模塊基于Android手機藍牙遙控(帶重力感應)小車設計隨著物聯(lián)網(wǎng)的興起,Android 手機以其獨有的開放
4、性優(yōu)勢正在為我們提供更多優(yōu)質(zhì)便捷 的技術(shù)成果。而基于安卓手機藍牙控制的智能小車DIY也越來越多的受到了電子愛好者的 青睞。這里我們會帶領(lǐng)大家設計一款基于安卓手機和以四驅(qū)小車為基礎(chǔ)平臺的藍牙小車。1 主要功能(1) 通過手機上的上位機操作界面(前、后、左、右四個鍵)遠程控制小車的前進、后 退、左轉(zhuǎn)和右轉(zhuǎn)。(2) 通過安卓手機的重力感應功能控制小車進行前進、后退、左轉(zhuǎn)和右轉(zhuǎn)。2 實現(xiàn)原理本系統(tǒng)主要由手機控制端、藍牙接收模塊、小車部分三個部分組組成。操作手機端相應 按鍵時時,手機端會通過藍牙的形式向單片機發(fā)出相應的指令,單片機相據(jù)相應的指令就可 以控制小車實現(xiàn)前進、后退、左轉(zhuǎn)、右轉(zhuǎn)等功能。其系統(tǒng)的功
5、能框圖如圖所示。2.1 系統(tǒng)框圖 圖中的控制端界面又稱為上位機軟件,如圖所示,此軟件可以通過 Android 開源eclipse 開發(fā)環(huán)境和 java 語言開發(fā)而成。目前網(wǎng)上絡有多種免費的小車藍牙控制軟件,對 Android 系統(tǒng)開發(fā)不熟的可在網(wǎng)上下載一個免費的控制端軟件。從上面的手機截圖可以看到, 在控制端界面上有四個用來控制小車運動的按鈕前進,后退,左轉(zhuǎn),右轉(zhuǎn)。當我們用手按下相應的鍵時時,借助于手機的藍牙功能,手機會通過藍牙以ASCII碼的形式發(fā)送一個相應的字符,具體的字符因上位機操作界面程序的不同而不同。實驗室目前采用的軟件相應的碼是,前進發(fā)出的 ASCII “A”, 后退時為字符“D”
6、,左轉(zhuǎn)時,為字符“C”,右轉(zhuǎn)時,手為字符“B”;當使用重力感應模式時,也是根據(jù)手機的平衡狀態(tài)來發(fā)送這幾個 字符的。圖手機控制端界面HC-06 為藍牙接收模塊,通過與手機端的藍牙進行連接配對,從而接收從手機端發(fā)送過 來的動作指令。使用時,藍牙接收到手機傳過來的指令需轉(zhuǎn)換成串口的形式通過單片機的串 口傳給單片機。圖藍牙從機接收模塊 智能小車部分主要由單片機控制器、電機驅(qū)動和電機等組成,藍牙模塊接受到手機端的信號后,將指令傳給單片機,單片機通過分析傳遞過來的指令不同,執(zhí)行不同的程 序來控制電機驅(qū)動,從而實現(xiàn)小車的前進、后退、左轉(zhuǎn)、右轉(zhuǎn)、停止等不同的動作。3 硬件設計() 藍牙模塊 小車的硬件主要包括
7、藍牙模塊部分和小車部分。藍牙模塊目前市面上出售的有主機模塊、從機模塊,也有主從一體的,因為此次設計的智能小車,手機端自身帶有藍牙功能,相當于主機發(fā)送模塊,所以只需使用從機接收模塊,然后把接收到的信號通過串口的形式傳給單片機就可以了。通常藍牙從機模塊購買回來后,在使用時需要進進藍牙配對和相應該波特率的設置,具 體的請參考相應的說明書即可。這里以下圖所示的模塊進行說明。藍牙模塊共有個端子, 由于只需要接收數(shù)據(jù),只需將該模塊的 RXD 接上 51 單片機的 RXD 引腳就行(當然還有電 源),TXD 不用接,因為我們只用它接收手機藍牙信號,不發(fā)送數(shù)據(jù)。它出廠默認設置的波 特率 9600 ,不重新設置
8、它的波特率的話,在寫單片機串口程序時,也要將波特率設置為9600。() 小車模塊小車部分采用實驗室設計的30B 四驅(qū)小車(30兩驅(qū)小車只需要更改相應 的程序即可),如圖所示,小車上自帶控制器和驅(qū)動模塊。單片機的端口 P1-P8 接兩個的個控制端,用于控制四個電機的正反轉(zhuǎn),接藍牙模 塊的端,如下圖所示。4 軟件設計藍牙的程序主要包括手機控制端程序和小車下位機程序,對于手機控制端的界面和相 關(guān)的程序這里我不作解釋,Android 系統(tǒng)的開發(fā)是一個開源的項目,感興趣的朋友可以 查詢 Android 開發(fā)相關(guān)的資料,自己設計一個小車的操作系統(tǒng)和自己喜歡的界面。下面介紹小車的控制程序。在寫小車的控制程序
9、時,需要了解上機是發(fā)送的什么指令。在前面的內(nèi)容中我們已 經(jīng)講到過,在控制端界面上有四個用來控制小車運動的按鈕前進,后退,左轉(zhuǎn),右轉(zhuǎn)。當我們用手按下前進時,手機會通過藍牙以 ASCII 碼的形式發(fā)送一個字符串“ONA”,釋放 時會發(fā)送一個字符串“ON”;按下 后退 時,手機會通過藍牙以 ASCII 碼的形式發(fā)送一個字符串“OND”,釋放時會發(fā)送 一個字符串“ON”;按下 左轉(zhuǎn) 時,手機會通過藍牙以 ASCII 碼的形式發(fā)送一個字符串“ONC”,釋放時會發(fā)送 一個字符串“”;按下 右轉(zhuǎn) 時,手機會通過藍牙以 ASCII 碼的形式發(fā)送一個字符串“ONB”,釋放時會發(fā)送 一個字符串“ONF”;當使用重
10、力感應模式時,也是根據(jù)手機的平衡狀態(tài)來發(fā)送這幾個字符的,前進為“ONA”、 后退為“ON”、左轉(zhuǎn)為“ON”、右轉(zhuǎn)為“ON”(注意重力感應時只有前進、后退、左 轉(zhuǎn)和右轉(zhuǎn)四咱狀態(tài),沒有釋放狀態(tài))。有了這些,我們對單片機編程的思路就出來了我們可以使用使用 51 單片機的串口通信來接收發(fā)送過來的 ASCII 碼。打開串口中斷,我 們可以在串口中斷服務函數(shù)中接收到字符用if()語句來判斷接收到的字符。例如 if(a='A') qingj(); 表示接收到的字符是 A,也就是按 前進 時發(fā)送過來的,這時就可以在break 前寫上小車前進的代碼;左轉(zhuǎn),右轉(zhuǎn),后退停止也是一樣的。注意本來每種狀
11、態(tài)發(fā)送的是字符串,此時我們只需要使用其中的字符,按鍵控制時,前 進為字符“A”、 后退為字符“”、 左轉(zhuǎn)為字符“”、 右轉(zhuǎn)為字符“”、 停止為字符 “”,重力感應時,前進為字符“A”、 后退為字符“”、 左轉(zhuǎn)為字符“”、 右轉(zhuǎn)為 字符“”、 無停止狀態(tài),可關(guān)閉重力感模式即可). 至于小車前進后退左轉(zhuǎn)右轉(zhuǎn)停止的代碼,要根據(jù)你自己的電機機驅(qū)動來寫。下面給出程序例子:/* 硬件連接 P2_0 接驅(qū)動模塊ENA使能端,輸入PWM信號調(diào)節(jié)速度 P2_1 接驅(qū)動模塊ENB使能端,輸入PWM信號調(diào)節(jié)速度 P1_0 P1_1 接IN1 IN2 當 P1_0=1,P1_1=0; 時左電機正轉(zhuǎn)驅(qū)動藍色輸出端OUT
12、1 OUT2接右電機 P1_0 P1_1 接IN1 IN2 當 P1_0=0,P1_1=1; 時左電機反轉(zhuǎn) P1_2 P1_3 接IN3 IN4 當 P1_2=1,P1_3=0; 時右電機正轉(zhuǎn)驅(qū)動藍色輸出端OUT3 OUT4接左電機 P1_2 P1_3 接IN3 IN4 當 P1_2=0,P1_3=1; 時右電機反轉(zhuǎn) P2_2 接驅(qū)動模塊ENA使能端,輸入PWM信號調(diào)節(jié)速度 P2_3 接驅(qū)動模塊ENB使能端,輸入PWM信號調(diào)節(jié)速度 P1_4 P1_5 接IN1 IN2 當 P1_4=1,P1_5=0; 時左電機正轉(zhuǎn)驅(qū)動藍色輸出端OUT1 OUT2接右電機 P1_4 P1_5 接IN1 IN2
13、當 P1_4=0,P1_5=1; 時左電機反轉(zhuǎn) P1_6 P1_7 接IN3 IN4 當 P1_6=1,P1_7=0; 時右電機正轉(zhuǎn)驅(qū)動藍色輸出端OUT3 OUT4接左電機 P1_6 P1_7 接IN3 IN4 當 P1_6=0,P1_7=1; 時右電機反轉(zhuǎn) 關(guān)于單片機電源:本店驅(qū)動模塊內(nèi)帶LDO穩(wěn)壓芯片,當電池輸入最低的電壓6V時候可以輸出穩(wěn)定的5V 分別在針腳標+5 與GND 。這個電源可以作為單片機系統(tǒng)的供電電源。*/#include<AT89x51.H>#define Left_moto_pwm P2_0 /接驅(qū)動模塊ENA使能端,輸入PWM信號調(diào)節(jié)速度#define Ri
14、ght_moto_pwm P2_1 /接驅(qū)動模塊ENB#define Left_moto_go P1_0=1,P1_1=0; /P1_0 P1_1 接IN1 IN2 當 P1_0=1,P1_1=0; 時左電機正轉(zhuǎn)#define Left_moto_back P1_0=0,P1_1=1; /P1_0 P1_1 接IN1 IN2 當 P1_0=0,P1_1=1; 時左電機反轉(zhuǎn) #define Right_moto_go P1_2=1,P1_3=0; /P1_2 P1_3 接IN3 IN4 當 P1_2=1,P1_3=0; 時右電機正轉(zhuǎn)#define Right_moto_back P1_2=0,P
15、1_3=1; /P1_2 P1_3 接IN3 IN4 當 P1_2=0,P1_3=1; 時右電機反轉(zhuǎn)unsigned char pwm_val_left =0;/變量定義unsigned char push_val_left =0;/ 左電機占空比N/10unsigned char pwm_val_right =0;unsigned char push_val_right=0;/ 右電機占空比N/10bit Right_moto_stop=1;bit Left_moto_stop =1;#define Left_moto1_pwm P2_2 /接驅(qū)動模塊ENA使能端,輸入PWM信號調(diào)節(jié)速度#d
16、efine Right_moto1_pwm P2_3 /接驅(qū)動模塊ENB#define Left_moto1_go P1_4=1,P1_5=0; /P1_4 P1_5 接IN1 IN2 當 P1_4=1,P1_5=0; 時左電機正轉(zhuǎn)#define Left_moto1_back P1_4=0,P1_5=1; /P1_4 P1_5 接IN1 IN2 當 P1_4=0,P1_5=1; 時左電機反轉(zhuǎn) #define Right_moto1_go P1_6=1,P1_7=0; /P1_6 P1_7 接IN3 IN4 當 P1_6=1,P1_7=0; 時右電機正轉(zhuǎn)#define Right_moto1_
17、back P1_6=0,P1_7=1; /P1_6 P1_7 接IN3 IN4 當 P1_6=0,P1_7=1; 時右電機反轉(zhuǎn)unsigned char pwm_val1_left =0;/變量定義unsigned char push_val1_left =0;/ 左電機占空比N/10unsigned char pwm_val1_right =0;unsigned char push_val1_right=0;/ 右電機占空比N/10bit Right_moto1_stop=1;bit Left_moto1_stop =1;unsigned int time=0;unsigned char a
18、;/*/void qingj(void)/前進函數(shù)push_val_left =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val_right =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車Left_moto_go ; /左電機前進Right_moto_go ; /右電機前進push_val1_left =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val1_right =5; /PWM 調(diào)節(jié)參數(shù)
19、1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車Left_moto1_go ; /左電機前進Right_moto1_go ; /右電機前進void hout (void)/后退函數(shù)push_val_left =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val_right =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車Left_moto_back ; /左電機前進 Right_moto_back ; /右電機前進push_val1_l
20、eft =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val1_right =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快改這個值可以改變其速度 /0無PWM輸出即是停車Left_moto1_back ; /左電機前進Right_moto1_back ; /右電機前進void zuoz(void)/左轉(zhuǎn)函數(shù)push_val_left =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val_right =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,1
21、0是最快 改這個值可以改變其速度 /0無PWM輸出即是停車Left_moto_back ; /左電機前進Right_moto_go ; /右電機前進push_val1_left =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val1_right =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快改這個值可以改變其速度 /0無PWM輸出即是停車Left_moto1_back ; /左電機前進Right_moto1_go ; /右電機前進void youz(void)/左轉(zhuǎn)函數(shù)push_val_left =5; /PWM
22、調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val_right =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車Left_moto_go ; /左電機前進Right_moto_back ; /右電機前進push_val1_left =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val1_right =5; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車Left_m
23、oto1_go ; /左電機前進 Right_moto1_back ; /右電機前進 void tingz(void)/左轉(zhuǎn)函數(shù)push_val_left =0; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val_right =0; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val1_left =0; /PWM 調(diào)節(jié)參數(shù)1-10 1為最慢,10是最快 改這個值可以改變其速度 /0無PWM輸出即是停車push_val1_right =0; /PWM 調(diào)節(jié)參數(shù)1-10
24、 1為最慢,10是最快改這個值可以改變其速度 /0無PWM輸出即是停車/*/* PWM調(diào)制電機轉(zhuǎn)速 */*/* 左電機調(diào)速 */*調(diào)節(jié)push_val_left的值改變電機轉(zhuǎn)速,占空比 */void pwm_out_left_moto(void) if(Left_moto_stop) if(pwm_val_left<=push_val_left) Left_moto_pwm=1; else Left_moto_pwm=0; if(pwm_val_left>=10) pwm_val_left=0; else Left_moto_pwm=0;/*/* 右電機調(diào)速 */ void pwm
25、_out_right_moto(void) if(Right_moto_stop) if(pwm_val_right<=push_val_right) Right_moto_pwm=1; else Right_moto_pwm=0; if(pwm_val_right>=10) pwm_val_right=0; else Right_moto_pwm=0;/* 左電機調(diào)速 */*調(diào)節(jié)push_val_left的值改變電機轉(zhuǎn)速,占空比 */void pwm_out_left_moto1(void) if(Left_moto1_stop) if(pwm_val1_left<=pus
26、h_val1_left) Left_moto1_pwm=1; else Left_moto1_pwm=0; if(pwm_val1_left>=10) pwm_val1_left=0; else Left_moto_pwm=0;/*/* 右電機調(diào)速 */ void pwm_out_right_moto1(void) if(Right_moto1_stop) if(pwm_val1_right<=push_val1_right) Right_moto1_pwm=1; else Right_moto1_pwm=0; if(pwm_val1_right>=10) pwm_val1_
27、right=0; else Right_moto1_pwm=0;/*/*TIMER0中斷服務子函數(shù)產(chǎn)生PWM信號*/void timer0()interrupt 1 using 2 TH0=0XF8; /1Ms定時 TL0=0X30; time+; pwm_val_left+; pwm_val_right+; pwm_out_left_moto(); pwm_out_right_moto(); pwm_val1_left+; pwm_val1_right+; pwm_out_left_moto1(); pwm_out_right_moto1(); void lanya_int(void) /T
28、MOD=0x20;/定時器1工作方式2,8位自動重裝 TH1=0xFd; /11.0592M晶振,9600波特率 TL1=0xFd; SCON=0x50;/串口方式1 SM0 SM1 01允許接收 PCON=0x00;/SMOD=0 16分頻 TR1=1;/打開定時器1 ES=1;/打開串口中斷 EA=1;/開總中斷 void PWM_int(void) /TMOD=0X01;TH0= 0XF8; /1ms定時 TL0= 0X30;TR0= 1;ET0= 1;EA = 1; /*/void main(void) TMOD=0x21;/定時器1工作方式2,8位自動重裝 lanya_int();PWM_int();while(1)/*無限循環(huán)*/ if(a='A') qingj();/前進 else if(a='B') hou
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版房地產(chǎn)抵押回購交易合同范本3篇
- 二零二五年度預應力鋼筋進出口代理合同3篇
- 室內(nèi)設計公司2025年度市場推廣合同2篇
- 二零二五年度船舶設備個人買賣合同2篇
- 二零二五年度高空作業(yè)安全責任免除服務合同3篇
- 二零二五版保姆雇傭合同與雇主合作共贏協(xié)議3篇
- 二零二五版抵債協(xié)議:債權(quán)債務清算與資產(chǎn)轉(zhuǎn)讓合同3篇
- 2025版超薄浮法玻璃出口貿(mào)易合同范本3篇
- 二零二五版建筑外墻防水涂料研發(fā)與銷售合同3篇
- 二零二五版快遞物流企業(yè)碳排放管理與減排協(xié)議合同3篇
- 【S洲際酒店婚禮策劃方案設計6800字(論文)】
- 醫(yī)養(yǎng)康養(yǎng)園項目商業(yè)計劃書
- 《穿越迷宮》課件
- 《C語言從入門到精通》培訓教程課件
- 2023年中國半導體行業(yè)薪酬及股權(quán)激勵白皮書
- 2024年Minitab全面培訓教程
- 社區(qū)電動車棚新(擴)建及修建充電車棚施工方案(純方案-)
- 項目推進與成果交付情況總結(jié)與評估
- 鐵路項目征地拆遷工作體會課件
- 醫(yī)院死亡報告年終分析報告
- 建設用地報批服務投標方案(技術(shù)方案)
評論
0/150
提交評論