步進(jìn)電機(jī)控制A_第1頁
步進(jìn)電機(jī)控制A_第2頁
步進(jìn)電機(jī)控制A_第3頁
步進(jìn)電機(jī)控制A_第4頁
步進(jìn)電機(jī)控制A_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、微機(jī)原理(單片機(jī))課程設(shè)計報告2015-2016學(xué)年第一學(xué)期微機(jī)原理(單片機(jī))課程設(shè)計總結(jié)報告項目名稱:步進(jìn)電機(jī)控制A 微機(jī)原理(單片機(jī))課程設(shè)計任務(wù)書項目名稱:步進(jìn)電機(jī)控制A內(nèi)容與要求:上位機(jī):完成界面設(shè)計與通訊程序(1) 能夠設(shè)置步進(jìn)電機(jī)的啟動、停止、正轉(zhuǎn)、反轉(zhuǎn)(2) 能夠設(shè)置步進(jìn)電機(jī)轉(zhuǎn)速(快中慢)圈數(shù)(3) 能夠保存或讀取電機(jī)的工作狀態(tài)(4) 可以對串口進(jìn)行設(shè)置下位機(jī):完成電路設(shè)計與控制程序(1) 完成步進(jìn)電機(jī)的控制(2) 按鍵1可控制電機(jī)的啟動和停止,按鍵2可控制電機(jī)的轉(zhuǎn)動方向,按鍵3可控制電機(jī)的轉(zhuǎn)速,按鍵4可控制轉(zhuǎn)動圈數(shù)(按一次加一圈)(3) 由串行LCD顯示當(dāng)前轉(zhuǎn)動方向,轉(zhuǎn)速,圈數(shù)

2、(4) 通過串口與上位機(jī)通訊項目組任務(wù)分擔(dān)評價表姓名分擔(dān)任務(wù)組內(nèi)評價張浩完成LCD顯示模塊設(shè)計與編程、上位機(jī)串口通訊界面設(shè)計、下位機(jī)串口通訊程序、上位機(jī)串口通訊程序5李福俊查閱資料,焊接外部電路,外部電路連線,完成下位機(jī)除串口通訊以外的程序編寫。5課程設(shè)計報告評分表內(nèi)容總體方案硬件設(shè)計軟件設(shè)計結(jié)果分析明細(xì)清單問題分析心得體會參考文獻(xiàn)程序代碼格式規(guī)范總分學(xué)生1得分學(xué)生2得分 目錄一 總體方案4二 硬件設(shè)計41.單片機(jī)最小系統(tǒng)42.驅(qū)動電路53.步進(jìn)電機(jī)電路54.LED顯示電路55.總接線圖5三 軟件設(shè)計61.鍵盤控制模塊62.串行LCD顯示模塊73.上位機(jī)通信模塊8四 結(jié)果分析9五 明細(xì)清單10

3、六 設(shè)計調(diào)試中的問題10七 心得體會建議11參考文獻(xiàn)12附錄113附錄229一、總體方案: 總體方案:步進(jìn)電機(jī)控制系統(tǒng)框圖如圖1所示。圖1 步進(jìn)電機(jī)控制系統(tǒng)總體功能模塊示意圖圖中,控制器為單片機(jī)STC89C52,通過串口與上位機(jī)相連,與上位機(jī)實現(xiàn)通訊。通過IO口輸出到驅(qū)動電路,通過驅(qū)動電路控制步進(jìn)電機(jī)的工作。同時將步進(jìn)電機(jī)的工作狀態(tài)通過串行LCD模塊顯示出來。二、硬件設(shè)計: 1.單片機(jī)最小系統(tǒng)單片機(jī)的最小系統(tǒng)是指單片機(jī)能正常工作所必須的基本電路,主要有單片機(jī),電源電路,復(fù)位電路,晶振電路構(gòu)成。其原理圖如下所示:2.驅(qū)動電路步進(jìn)電機(jī)的驅(qū)動芯片我們采用的ULN2003實現(xiàn)。實驗中1腳到4腳接單片機(jī)

4、輸出信號,13到16腳接步進(jìn)電機(jī)。8腳接地,9腳接電源。電路圖如下:3.步進(jìn)電機(jī)電路連接圖:步進(jìn)電機(jī)用萬用表測試后,將其與ULN2003和電源連接。4.LED顯示電路連接圖:5.總接線圖三、軟件設(shè)計: 結(jié)合STC89C52的各個引腳,分配它的各個端口給各個模塊。在本次設(shè)計中用到了串行LCD顯示模塊,鍵盤控制模塊,模塊。1. 鍵盤控制模塊本次課程設(shè)計中,設(shè)定了四個按鍵來控制電機(jī)啟動、停止、轉(zhuǎn)向、圈數(shù)(按一次加一圈)。先檢測每個鍵是否被按下,再根據(jù)設(shè)定的鍵位判斷要讓電機(jī)實現(xiàn)什么功能。按鍵控制轉(zhuǎn)速流程圖如下:圖中,Dir代表電機(jī)的工作狀態(tài),0代表正轉(zhuǎn),1代表反轉(zhuǎn),2代表停止;Speed代表電機(jī)的轉(zhuǎn)速

5、,100代表慢速,30代表中速,5代表快速;N代表電機(jī)轉(zhuǎn)動脈沖數(shù),50代表實際轉(zhuǎn)一圈。2. 串行LCD顯示模塊本次課程設(shè)計使用了串行LCD諾基亞5110,該模塊具有以下特點(diǎn):1)性價比高,LCD1602可以顯示32個字符,而Nokia5110可以顯示15個漢字,30個字符。Nokia5110裸屏僅8.8元,LCD1602一般15元左右,LCD12864一般5070元。2)接口簡單,僅四根I/O線即可驅(qū)動,LCD1602需11根I/O線,LCD12864需12根。3)速度快,是LCD12864的20倍,是LCD1602的40倍。4)Nokia5110工作電壓3.3V,正常顯示時工作電流200uA

6、以下,具有掉電模式,適合電池供電的便攜式移動設(shè)備。將串行LCD與單片機(jī)IO口相連,可以通過編寫程序使其實現(xiàn)數(shù)字、英文字符、漢字及圖形的顯示,顯示程序見附錄。5110的管腳配置如下:3. 上位機(jī)通信模塊通過串口與上位機(jī)實現(xiàn)通訊,在VS2010中使用MSCOMM控件編寫一個串口應(yīng)用程序。使用組合框?qū)崿F(xiàn)串口號、波特率、校驗類型的選擇,添加命令按鈕打開串口及發(fā)送數(shù)據(jù)。(1)打開串口:在打開串口按鈕的代碼中,首先判斷各個組合框的值,然后打開相應(yīng)的串口端口。代碼如下:30UpdateData();m_mscomm1.put_CommPort(m_comnum+1); /端口號m_mscomm1.put_I

7、nBufferSize(1024); /設(shè)置輸入緩沖區(qū)的大小,Bytesm_mscomm1.put_OutBufferSize(512); /設(shè)置輸出緩沖區(qū)的大小,Bytes if(!m_mscomm1.get_PortOpen() /打開串口m_mscomm1.put_PortOpen(true); m_mscomm1.put_InputMode(1); /設(shè)置輸入方式為二進(jìn)制方式/m_mscomm1.put_Settings(L"9600,n,8,1"); /設(shè)置波特率等參數(shù)CString str,str0,str1,str2,str3,strr;int boderat

8、e;strr=","str2="8"str3="1" boderate = pow(2.0,m_boderate)*4800; str0.Format(_T("%d"),boderate);if (m_check=0)str1="n"elseif (m_check=1) str1="O"else str1="P" str=str0+strr+str1+strr+str2+strr+str3;m_mscomm1.put_Settings(str);m_msc

9、omm1.put_RThreshold(1); /為表示有一個字符即引發(fā)事件m_mscomm1.put_InputLen(0);(2)接收數(shù)據(jù):接收事件中的代碼如下:VARIANT variant_inp;COleSafeArray safearray_inp;long i = 0;int len;char rxdata1000;switch (m_mscomm1.get_CommEvent()case 2: /表示接緩沖區(qū)內(nèi)有字符variant_inp = m_mscomm1.get_Input();/接收數(shù)據(jù)safearray_inp = variant_inp;len = safearr

10、ay_inp.GetOneDimSize();for (i = 0; i < len; i+)safearray_inp.GetElement(&i, &rxdatai); rxdatai = '0'm_rev+=rxdata;UpdateData(false);break;default:break;(3)發(fā)送數(shù)據(jù):發(fā)送數(shù)據(jù)按鈕的代碼為:UpdateData();m_mscomm1.put_Output(COleVariant(m_send);(4)利用CStdioFile類讀寫文件MFC中使用CStdioFile類封裝了C+運(yùn)行時刻文件流的操作,流文件

11、采用緩沖方式,支持文件模式和二進(jìn)制模式文件操作,默認(rèn)方式為文本模式。CStdioFile類從CFile類繼承,具有如下三個構(gòu)造函數(shù):1、CStdioFile():建立一個CStdioFile類的對象,但不打開文件;2、CStdioFile(FILE* pOpenStream):建立一個CStdioFile類的對象,并將該對象同一個已經(jīng)打開的文件相聯(lián)系;3、CStdioFile(LPCTSTR lpszFileName, UINT nOpenFlags):建立一個CStdioFile類的對象,同時打開一個文件,nOpenFlags是打開文件的方式。四、結(jié)果分析或項目所實現(xiàn)的功能、指標(biāo)等最終實驗裝

12、置如下圖(上位機(jī)略):工作狀態(tài):上位機(jī)保存并打開文件:五、明細(xì)清單: 步進(jìn)電機(jī)X1 ULN2003x1 ATC89C51集成系統(tǒng)x1 NOKIA5110顯示屏x1六、設(shè)計調(diào)試中遇到的疑難問題及解決方法李福?。?.開始不清楚步進(jìn)電機(jī)的接線,在網(wǎng)上對應(yīng)型號的步進(jìn)電機(jī)接線也不對,后面用萬用表測量,分清了對應(yīng)的線。2.在下位機(jī)編程時候,開始編的程序按鍵不靈敏,會有誤操作,解決辦法是加入了一段按鍵去抖的程序。3.開始編下位機(jī)程序時候,對按一下按鍵3增加一圈不清楚怎么實現(xiàn),以及在轉(zhuǎn)了一段時間后按下反向鍵后怎么算圈數(shù)不清楚。后面和組員討論后決定先給點(diǎn)機(jī)設(shè)定一個初始圈數(shù),每當(dāng)檢測到一次按鍵3按下后,在初始圈數(shù)

13、自加一。而在中途按下反向鍵后,前面已經(jīng)轉(zhuǎn)過的圈數(shù)清零,重新開始記圈數(shù)。 張浩:1. 用串行LCD實現(xiàn)顯示漢字功能一開始不會做,之后經(jīng)過網(wǎng)上查找資料,下載了LCD顯示屏的漢字提取程序,將漢字轉(zhuǎn)換成編碼來顯示。2. 串口界面設(shè)計時虛擬串口實驗無法正確連接,經(jīng)檢查是波特率設(shè)計時顯示有問題,界面中顯示的順序與實際波特率不同導(dǎo)致串口無法連接,發(fā)現(xiàn)問題之后修改界面設(shè)計程序的語句解決。3. 在上位機(jī)和下位機(jī)通訊時,發(fā)現(xiàn)一下只能接收一位數(shù)據(jù),而我們要傳輸轉(zhuǎn)速,方向,圈數(shù)3個量。感覺沒法實現(xiàn)。解決辦法是一次傳輸一個字符,根據(jù)其ASCALL碼的不同來對應(yīng)不同的狀態(tài),然后建立一個真值表,可以很方便的看出每個字符所對

14、應(yīng)的狀態(tài)。七、心得體會與建議:李??。涸谕ㄟ^這次的課程設(shè)計,真正的將理論知識用到實際中來,在發(fā)現(xiàn)問題,分析問題和解決問題的過程中,積累了很多經(jīng)驗。在遇到困難時候和隊友討論,查閱資料,以及尋求老師的幫助,一步一步解決問題,更加明白了團(tuán)結(jié)合作的重要性。同時,通過這次的課程設(shè)計,明白了課程設(shè)計的步驟,或者說是大體了解了去完成一個工程的步驟。也明白了綜合運(yùn)用各種知識的重要性。在自學(xué)上位機(jī)編程的過程中,遇到了很大的困難,但我們小組沒有退縮,而是迎難而上,最終完成了任務(wù),也就是說在這次課程設(shè)計中,我們的自信心得到了提高。張浩:本次課程設(shè)計我們小組抽到的題難度并不大,不過在做的過程中還是遇到很多問題,下位機(jī)

15、的按鍵控制電機(jī)運(yùn)動的實現(xiàn)還是比較順利的,問題在于我們上位機(jī)的設(shè)計,尤其是對串行通訊了解不夠,包括通信原理方法及控制等,一度出現(xiàn)編程毫無思路的狀況,幸虧在向其他同學(xué)詢問以及自己花了一定時間理解之后,做出了一個可以基本實現(xiàn)要求的上位機(jī)通訊程序,雖然程序并不完美,但是對我們小組來說已經(jīng)有了很大的進(jìn)步,我們也從中學(xué)到了很多知識和處理問題的方法。最后,課程設(shè)計的完成離不開老師的指導(dǎo)和小組的共同努力,也感謝在設(shè)計過程中給我們幫助的所有同學(xué)。八、參考文獻(xiàn)【1】 李全利,單片機(jī)原理及應(yīng)用,北京,高等教育出版社,2009年【2】 楊素行,微型計算機(jī)系統(tǒng)原理及應(yīng)用,北京,清華大學(xué)出版社,2004年附錄1:源程序(

16、含有中文注釋)#include<reg52.h>#include<intrins.h>#include"stdio.h"#include <led.h>typedef unsigned char UINT8; /* 給unsigned char重新定義一個別名UINT8,用的時候直接寫UINT8就可以 */typedef unsigned int UINT16; /* 給unsigned int重新定義一個別名UINT16,用的時候直接寫UINT16就可以 */void display(unsigned char Direction,un

17、signed char Speed,unsigned char k);void LCD_Init(void);void LCD_WriteByte(unsigned char dat, unsigned char command);void LCD_Set_XY(unsigned char X, unsigned char Y);void LCD_Clear(void);void LCD_WriteChar(unsigned char x,unsigned char y,unsigned char c);void LCD_WriteString(unsigned char X,unsigned

18、 char Y,char *s);void LCD_WriteNum(unsigned char X,unsigned char Y,unsigned int num);void LCD_Write_12X16Font(unsigned char x,unsigned char y,unsigned char c2);void LCD_DrawPicture(unsigned char X,unsigned char Y,unsigned char const *map,unsigned char Pix_x,unsigned char Pix_y);#define uchar unsigne

19、d char#define uint unsigned int#define GPIO_MOTOR P2 /選用P2口控制電機(jī)sbit K1=P37;/按鍵1sbit K2=P36;/按鍵2sbit K3=P35;/按鍵3sbit K4=P34;/按鍵4sbit q=P27; sbit LCD_RST = P00;/P0口控制顯示屏sbit LCD_CE = P01;sbit LCD_DC = P02;sbit LCD_DIN = P03;sbit LCD_CLK = P04;unsigned char code FFW8=0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,

20、0xf9; /反轉(zhuǎn)順序unsigned char code FFZ8=0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1; /正轉(zhuǎn)順序unsigned char a8;void Delay1(unsigned int t);/延時函數(shù)聲明unsigned char Direction=2,Speed=50 ;int N=250,s=0;void Motor(); void display();void Motor1();/步進(jìn)電機(jī)程序函數(shù)聲明/* 名稱 : delay()* 功能 : 延時,延時時間大概為5US。* 輸入 : 無* 輸出 : 無*/void dela

21、y()_nop_();_nop_();_nop_();_nop_();_nop_();/* 名稱 : Delay_1ms()* 功能 : 延時子程序,延時時間為 1ms * x* 輸入 : x (延時一毫秒的個數(shù))* 輸出 : 無*/void Delay(uint i)uint x,j;for(j=0;j<i;j+)for(x=0;x<=148;x+);sbit RS485RD = P35; /* P35為RS485的控制收發(fā)端,高電平發(fā)送,低電平接收 */#define LED P2/* 函 數(shù) 名 : mInitSTDIO* 描 述 : 輸出初始化串口* 輸 入 : 無.* 返

22、 回 : 無.*/void mInitSTDIO( ) SCON = 0x50; /* 1位起始位,8位數(shù)據(jù)位,1位停止位,允許接收數(shù)據(jù) */ PCON = 0x80; /* 波特率加倍 */ TMOD = 0x20; /* T1定時器工作在自動八位重裝模式 */ TH1 = 0xFA; /* 11.0592MHz晶振, 9600bps */ TR1 = 1; /* 打開定時器T1 */* 函 數(shù) 名 : SendByte* 描 述 : 輸出數(shù)據(jù)到串口* 輸 入 : UINT8 mData:* 要發(fā)送的數(shù)據(jù).* 返 回 : 無.*/void SendByte( UINT8 mData ) TI

23、 = 0; /* 清發(fā)送標(biāo)志 */ SBUF = mData; /* 數(shù)據(jù)送發(fā)送緩沖區(qū) */ while( TI = 0 ); /* 等待數(shù)據(jù)發(fā)送完成 */ TI = 0; /* 清發(fā)送標(biāo)志 */* 函 數(shù) 名 : RecByte* 描 述 : 接收數(shù)據(jù)* 輸 入 : 無.* 返 回 : UINT8 mData:* 接收到的數(shù)據(jù).*/UINT8 RecByte( ) UINT8 mData; RI = 0; /* 清接收標(biāo)志 */ while( RI = 0 ); /* 等待數(shù)據(jù)接收完成,如果沒有數(shù)據(jù)發(fā)送過來,就會一直在這等 */ mData = SBUF; /* 接收數(shù)據(jù) */ RI = 0

24、; /* 清接收標(biāo)志 */ return mData; /* 返回接收的數(shù)據(jù) */* 函 數(shù) 名 : DelayMs* 描 述 : 毫秒延時.* 輸 入 : UINT8 Ms:* 要延時的Ms時間.* 返 回 : 無.*/void DelayMs( UINT16 Ms ) UINT8 i; while (Ms-) for ( i = 0; i < 114; i+ ); /* 大概1MS,不精確 */ /* 步進(jìn)電機(jī)控制程序*/void Motor() int i,k=0;if(Direction=2) /Direction為方向,0為停止,1為順時針,2為逆時針 GPIO_MOTOR=0

25、; LCD_Clear(); else for(i=0;i<8;i+)if(Direction=1) GPIO_MOTOR = FFWi;if(Direction=0) GPIO_MOTOR = FFZi; Delay(Speed);/調(diào)節(jié)轉(zhuǎn)速s+;k=s/50; /* 延時程序*/void Delay1(unsigned int t) unsigned int k;while(t-)for(k=0; k<80; k+) /* *函數(shù)名:LCD_Init*功能:初始化LCD*參數(shù):無 *返回值:無*備 注: */void LCD_Init(void) unsigned char i

26、; LCD_RST=0; /復(fù)位 for(i=0;i<150;i+); LCD_RST=1; LCD_WriteByte(0x21, 0);/ 使用擴(kuò)展命令設(shè)置LCD模式 LCD_WriteByte(0xc0, 0);/ 設(shè)置偏置電壓,修改可改變5110點(diǎn)陣顯示的亮度 /*5110接5V時偏置電壓改為(0xa7,0),接3.3V時改為(0xc0,0)*/ LCD_WriteByte(0x20, 0);/ 使用基本命令。并設(shè)置V=0,水平尋址 LCD_Clear(); / 清屏 LCD_WriteByte(0x0c, 0);/ 設(shè)定顯示模式,正常顯示(普通顯示) LCD_CE=0; /*

27、*函數(shù)名:LCD_WriteByte*功能:模擬SPI接口時序?qū)憯?shù)據(jù)/命令LCD*參數(shù):data :寫入的數(shù)據(jù); command :寫數(shù)據(jù)(1)/命令選擇(0);*返回值:無*備 注: */void LCD_WriteByte(unsigned char dat, unsigned char command) unsigned char i; LCD_CE=0;/5110片選有效,允許輸入數(shù)據(jù) if (command = 0)/寫命令 LCD_DC=0; else LCD_DC=1; /寫數(shù)據(jù) for(i=0;i<8;i+)/傳送8bit數(shù)據(jù) if(dat&0x80) LCD_D

28、IN=1; else LCD_DIN=0; LCD_CLK=0; dat = dat << 1; LCD_CLK=1; LCD_CE=1; /禁止5110/* *函數(shù)名:LCD_Set_XY*功能: 設(shè)置LCD坐標(biāo) *參數(shù): X:0-83 Y:0-5 *返回值:無*備 注: */void LCD_Set_XY(unsigned char X, unsigned char Y) LCD_WriteByte(0x40 | Y, 0);/ column 列 LCD_WriteByte(0x80 | X, 0);/ row 行 /* *函數(shù)名:LCD_Clear*功能: LCD清屏函數(shù) *

29、參數(shù):無 *返回值:無*備 注: */void LCD_Clear(void) unsigned char t; unsigned char k; LCD_Set_XY(0, 0);/設(shè)置RAM起始地址 for(t=0;t<6;t+) for(k=0;k<84;k+) LCD_WriteByte(0x00,1); /* *函數(shù)名:LCD_WriteChar*功能: LCD寫一個6X8的字符 *參數(shù):c *返回值:無備 注: */void LCD_WriteChar(unsigned char x,unsigned char y,unsigned char c) unsigned c

30、har i; c -= 32; /數(shù)組的行號 LCD_Set_XY(x,y); for(i=0; i<12; i+) LCD_WriteByte(font6x12ci, 1); if(i=5) y+; LCD_Set_XY(x,y); /* *函數(shù)名:LCD_WriteString*功能: LCD寫6X8的字符串 *參數(shù):X , Y , S *返回值:無備 注: */void LCD_WriteString(unsigned char X,unsigned char Y,char *s) while(*s) LCD_WriteChar(X,Y,*s); s+; X += 6; /*函數(shù)名

31、:LCD_WriteNum(unsigned int num)*功能:寫入數(shù)字*參數(shù):num *返回值:無*/void LCD_WriteNum(unsigned char X,unsigned char Y,unsigned int num) unsigned char str8,i=0,len=0; unsigned int temp; temp = num; while(temp) temp /=10; len+; if(!num) len+; str0=0x30; strlen = 0; while(num) strlen-i-1 = num%10 + 0x30; num /=10;

32、i+; LCD_WriteString(X,Y,(char *)str);/* *函數(shù)名:LCD_Write_16X16Font*功能: 寫一個16X16的漢字 *參數(shù):x , y , c2 x:0-83 y:0-5 *返回值:無*備 注: */void LCD_Write_12X16Font(unsigned char x,unsigned char y,unsigned char c2) unsigned char i,k; LCD_Set_XY(x,y); for(k=0; k<25; k+) /K的值表示漢字庫最多存放的字的數(shù)量(可改大) if(font12x16k.Index0

33、=c0)&&(font12x16k.Index1=c1) for(i=0; i<24; i+) LCD_WriteByte(font12x16k.Mski, 1); if(i=11) y+; LCD_Set_XY(x,y); void display() LCD_Write_12X16Font(0,0,"方"); /寫一個16X16的漢字 LCD_Write_12X16Font(12,0,"向"); LCD_Write_12X16Font(0,2,"轉(zhuǎn)"); LCD_Write_12X16Font(12,2,&q

34、uot;速"); LCD_Write_12X16Font(0,4,"圈"); LCD_Write_12X16Font(12,4,"數(shù)"); if(Direction=1&&Speed=50)LCD_Write_12X16Font(48,0,"順"); LCD_Write_12X16Font(60,0,"時"); LCD_Write_12X16Font(72,0,"針"); LCD_Write_12X16Font(60,2,"慢");if(Direct

35、ion=1&&Speed=20)LCD_Write_12X16Font(48,0,"順"); LCD_Write_12X16Font(60,0,"時"); LCD_Write_12X16Font(72,0,"針"); LCD_Write_12X16Font(60,2,"中");if(Direction=1&&Speed=5)LCD_Write_12X16Font(48,0,"順"); LCD_Write_12X16Font(60,0,"時");

36、 LCD_Write_12X16Font(72,0,"針"); LCD_Write_12X16Font(60,2,"快");if(Direction=0&&Speed=50)LCD_Write_12X16Font(48,0,"逆"); LCD_Write_12X16Font(60,0,"時"); LCD_Write_12X16Font(72,0,"針"); LCD_Write_12X16Font(60,2,"慢");if(Direction=0&&am

37、p;Speed=20)LCD_Write_12X16Font(48,0,"逆"); LCD_Write_12X16Font(60,0,"時"); LCD_Write_12X16Font(72,0,"針"); LCD_Write_12X16Font(60,2,"中");if(Direction=0&&Speed=5)LCD_Write_12X16Font(48,0,"逆"); LCD_Write_12X16Font(60,0,"時"); LCD_Write_12

38、X16Font(72,0,"針"); LCD_Write_12X16Font(60,2,"快");/* 名稱 : Main()* 功能 : 主函數(shù)* 輸入 : 無* 輸出 : 無*/void Main()uchar i,j;uchar k; LCD_Init(); LCD_Clear(); mInitSTDIO(); /* 初始化串口 */ /* 控制接收數(shù)據(jù) */ while(1)if(s>N)break;if(RI=1) j = RecByte(); a6=j%2;a5=(j/2)%2;a4=(j/4)%2;a3=(j/8)%2;a2=(j/1

39、6)%2;a1=(j/32)%2;a0=(j/64)%2;a7=(j/128)%2;if(a0=0)Direction=2;if(a0=1&&a1=0)Direction=0;if(a0=1&&a1=1)Direction=1;if (a2=0&&a3=1)Speed=5;if(a2=1&&a3=0)Speed=20;if(a2=1&&a3=1)Speed=50; N=50*(a6+a5*2+a4*4);k=s/50;Motor();display();RI=0;elseif(K1=0)/檢測按鍵K1是否按下Del

40、ay(1);/消除抖動if(K1=0) if(Direction=2) Direction=0; LCD_Write_12X16Font(0,0,"方"); /寫一個16X16的漢字 LCD_Write_12X16Font(12,0,"向"); LCD_Write_12X16Font(0,2,"轉(zhuǎn)"); LCD_Write_12X16Font(12,2,"速"); LCD_Write_12X16Font(0,4,"圈"); LCD_Write_12X16Font(12,4,"數(shù)"); LCD_Write_12X16Font(48,0,"逆"); LCD_Write_12X16Font(60,0,"時"); LCD_Write_12X16Font(72,0,"針"); LCD_Write_12X16Font(60,2,"慢"); else Direction=2; LCD_Clear(); while(i<5000)&&am

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論