版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 編號(hào): </p><p> 課 題:舵機(jī)角度控制電路設(shè)計(jì)</p><p> 學(xué) 院: XXXXXXXXXXXXX院 </p><p> 專(zhuān) 業(yè): 自動(dòng)化 </p><p> 學(xué)生姓名: XXXXXXXX </p>
2、<p> 學(xué) 號(hào): XXXXXXXXXX </p><p> 指導(dǎo)老師: XXXXXXXXXXXXXXXXXXXXX </p><p> 職 稱(chēng): 高級(jí)工程師 </p><p> 題目類(lèi)型: 理論研究 實(shí)驗(yàn)研究 √工程設(shè)計(jì) 工程技術(shù)研究 軟件開(kāi)發(fā)</
3、p><p> 2011 年 09 月 15日</p><p><b> 摘 要</b></p><p> 在相當(dāng)長(zhǎng)的時(shí)間里,計(jì)算機(jī)作為科學(xué)工具,在科學(xué)技術(shù)的神圣殿堂里默默地工作,而工業(yè)現(xiàn)場(chǎng)的測(cè)控領(lǐng)域并沒(méi)有得到真正的實(shí)惠,進(jìn)入21世紀(jì)后,由于電子技術(shù)的迅猛發(fā)展,新型電子產(chǎn)品的更新?lián)Q代速度越來(lái)越快,以單片機(jī)為核心構(gòu)成的智能化產(chǎn)品具有體積小、
4、功能強(qiáng)、應(yīng)用面廣,使用靈活、價(jià)格便宜、工作可靠等優(yōu)點(diǎn),目前正以前所未有的速度取代著傳統(tǒng)電子線(xiàn)路構(gòu)成的經(jīng)典系統(tǒng)。與單片機(jī)相結(jié)合,計(jì)算機(jī)才真正地走進(jìn)尋常百姓之家,成為廣大工程技術(shù)人員現(xiàn)代化技術(shù)革新、技術(shù)革命的有利武器。</p><p> 本文針對(duì)舵機(jī)數(shù)字化控制器的設(shè)計(jì),研究其硬件電路設(shè)計(jì)、軟件程序設(shè)計(jì)和關(guān)鍵算法。</p><p> 在分析舵機(jī)控制的性能要求和相關(guān)控制方法的基礎(chǔ)上,提出了基于
5、上位機(jī)和下位機(jī)的控制結(jié)構(gòu),通過(guò)串口通信傳輸數(shù)據(jù)和指令,從而實(shí)現(xiàn)舵機(jī)控制。</p><p> 本設(shè)計(jì)以STC12C5A08S2單片機(jī)為核心,利用模擬舵機(jī)的機(jī)械部分,其中包括小型直流電機(jī)和一個(gè)反饋可調(diào)電位器,直流電機(jī)用H橋芯片LG9110來(lái)驅(qū)動(dòng),電位器進(jìn)行角度測(cè)量,通過(guò)單片機(jī)的內(nèi)部A/D轉(zhuǎn)換來(lái)反饋實(shí)時(shí)角度,上位機(jī)通過(guò)RS232串口與單片機(jī)進(jìn)行通信,舵機(jī)根據(jù)上位機(jī)所設(shè)定的角度,利用PWM信號(hào)驅(qū)動(dòng)LG9110控制電動(dòng)機(jī)
6、轉(zhuǎn)動(dòng),系統(tǒng)通過(guò)上位機(jī)來(lái)設(shè)置舵機(jī)地址、波特率、給定角度。經(jīng)過(guò)實(shí)際調(diào)試驗(yàn)證,舵機(jī)角度在0度~180度范圍內(nèi)可由上位機(jī)設(shè)定,精度為正負(fù)1度,符合設(shè)計(jì)要求。</p><p> 關(guān)鍵詞:舵機(jī);單片機(jī);角度控制;PWM</p><p><b> 目錄</b></p><p> 引言………………………………………………………………………………..1&l
7、t;/p><p> 1舵機(jī)控制系統(tǒng)概述……………………………………………………………….1</p><p> 2 STC12C5A08S2單片機(jī)概述……………………………………………………2</p><p> 2.1 STC12C5A08S2簡(jiǎn)介…………………………………………………………………….2</p><p> 2.2 STC
8、12C5A08S2系列主要性能……………………………………………………….…3</p><p> 2.3 A/D轉(zhuǎn)換器……………………………………………………………………………………3</p><p> 2.4 脈寬調(diào)制PWM原理………………………………………………………………………....3</p><p> 串口通信…………………………………………
9、…………………………………5</p><p> 3.1 串口通信的作用……………………………………………………………………………...5</p><p> 3.2 RS-232C接口和MAX232芯片簡(jiǎn)介………………………………………………………..5</p><p> 3.3 MAX232芯片引腳描述及其應(yīng)用…………………………………………………
10、………...6</p><p> 4 驅(qū)動(dòng)芯片…………………………………………………………………………...8</p><p> 5 硬件設(shè)計(jì)思路……………………………………………………………………...9</p><p> 5.1 系統(tǒng)基本原理…………………………………………………………………………………….9</p><p>
11、 5.2 系統(tǒng)硬件設(shè)計(jì)……………………………………………………………………………………..10</p><p> 6. 系統(tǒng)主程序…………………………………………………………………………..10</p><p> 6.1 主程序設(shè)計(jì)要點(diǎn)…………………………………………………………………………………..10</p><p> 6.2 上位機(jī)……………………
12、………………………………………………………………………11</p><p> 7.1 硬件調(diào)試……………………………………………………………………………..11</p><p> 7.2 軟件調(diào)試……………………………………………………………………………….12</p><p> 參考文獻(xiàn)…………………………………………………………………………………….12&
13、lt;/p><p> 附錄…………………………………………………………………………………………..13</p><p><b> 引言 </b></p><p> 隨著高新技術(shù)在測(cè)控領(lǐng)域中的應(yīng)用,有力地促進(jìn)了控制的系統(tǒng)化和精確化,然而,</p><p> 經(jīng)典的反饋控制、現(xiàn)代控制和大系統(tǒng)理論在應(yīng)用中遇到不少難題。首先
14、,這些控制系統(tǒng)的設(shè)計(jì)和分析都是建立在精確的系統(tǒng)數(shù)學(xué)模型的基礎(chǔ)上的,但是各個(gè)領(lǐng)域?qū)ψ詣?dòng)控制系統(tǒng)控制精度、響應(yīng)速度、系統(tǒng)穩(wěn)、定性與自適應(yīng)能力的要求越來(lái)越高,被控對(duì)象或過(guò)程的非線(xiàn)性、時(shí)變性、多參數(shù)點(diǎn)的強(qiáng)烈耦合、較大的隨機(jī)擾動(dòng)、各種不確定性以及現(xiàn)場(chǎng)測(cè)試手段不完善等,使難以按數(shù)學(xué)方法建立被控對(duì)象的精確模型;其次,為了提高控制的性能,整個(gè)控制系統(tǒng)變得極其復(fù)雜,增加了設(shè)備的投資,降低了系統(tǒng)的可靠性。</p><p> 人工智
15、能的出現(xiàn)和發(fā)展,促進(jìn)了自動(dòng)控制向更高的層次,即智能控制發(fā)展?;趩纹瑱C(jī)的智能控制系統(tǒng),使得舵機(jī)等伺服系統(tǒng)的模塊化和數(shù)字化更容易實(shí)現(xiàn),極大的促進(jìn)了控制精度、響應(yīng)速度等控制要求的提高。</p><p> 舵機(jī)作為一種伺服電機(jī)屬于閉環(huán)控制系統(tǒng),和一般的直流電機(jī)、交流電機(jī)相比具有較高的控制精度,步進(jìn)電機(jī)雖然也具有一定的控制精度但仍然屬于開(kāi)環(huán)結(jié)構(gòu)。于是舵機(jī)在機(jī)器人關(guān)節(jié)控制和航模轉(zhuǎn)舵控制等需要精確控制而又沒(méi)有很高載荷的系統(tǒng)
16、中就顯得十分經(jīng)濟(jì)實(shí)用,在航空航天儀器、雷達(dá)、導(dǎo)彈、智能自適應(yīng)儀器、各種武器電子和抗惡劣環(huán)境電子等系統(tǒng)中也得到廣泛應(yīng)用。</p><p> 1 舵機(jī)控制系統(tǒng)概述</p><p><b> 舵機(jī)工作原理</b></p><p> 舵機(jī),又名伺服電機(jī),主要是由外殼馬達(dá)、減速齒輪和電位器構(gòu)成。舵機(jī)主要適用于那些角度不斷變化并可以保持的控制系統(tǒng),
17、比如人形機(jī)器人的手臂和腿,車(chē)模和航模的方向控制。</p><p> 舵機(jī)工作原理:舵機(jī)本質(zhì)上是可定位的馬達(dá),它的內(nèi)部包括了一個(gè)小型直流馬達(dá)、一組變速齒輪組、一個(gè)反饋可調(diào)電位器和一塊電子控制板。它是一個(gè)典型閉環(huán)反饋系統(tǒng)[1],減速齒輪組由馬達(dá)驅(qū)動(dòng),其終端(輸出端)帶動(dòng)一個(gè)線(xiàn)性的比例電位器作位置檢測(cè),該電位器把轉(zhuǎn)角坐標(biāo)轉(zhuǎn)換為一比例電壓反饋給控制線(xiàn)路板,控制線(xiàn)路板將其與輸入的控制脈沖信號(hào)比較,產(chǎn)生調(diào)整脈沖,并驅(qū)動(dòng)馬達(dá)
18、正向或反向地轉(zhuǎn)動(dòng),使齒輪組的輸出位置與期望值相符,令調(diào)整脈沖趨于為0,從而達(dá)到使舵機(jī)精確定位的目的。簡(jiǎn)單的說(shuō)就是發(fā)一個(gè)控制信號(hào)給舵機(jī),經(jīng)過(guò)電路板判斷轉(zhuǎn)動(dòng)方向,再驅(qū)動(dòng)馬達(dá)開(kāi)始轉(zhuǎn)動(dòng),透過(guò)減速齒輪將動(dòng)力傳至擺臂,同時(shí)由電位器檢測(cè)送回信號(hào),判斷是否已經(jīng)達(dá)到指定位置。</p><p> 數(shù)字舵機(jī)(Digital Servo)和模擬舵機(jī)(Analog Servo)在基本的機(jī)械結(jié)構(gòu)方面是完全一樣的,主要由馬達(dá)、減速齒輪、控制
19、電路等組成,而數(shù)字舵機(jī)和模擬舵機(jī)的最大區(qū)別則體現(xiàn)在控制電路上,數(shù)字舵機(jī)的控制電路比模擬舵機(jī)的多了微處理器和晶振。</p><p> 相對(duì)于模擬舵機(jī),數(shù)字舵機(jī)有如下優(yōu)點(diǎn):首先,驅(qū)動(dòng)馬達(dá)的動(dòng)力,可以由微處理器的程序調(diào)整,以應(yīng)用于不同的應(yīng)用場(chǎng)合,并優(yōu)化舵機(jī)性能。其次,舵機(jī)馬達(dá)能以更高的頻率響應(yīng)控制信號(hào),而且“死區(qū)”(無(wú)響應(yīng)區(qū))變??;反應(yīng)變得更快;加速和減速時(shí)也更迅速、更柔和;運(yùn)轉(zhuǎn)精度以及舵機(jī)鎖位能力也更強(qiáng)。</
20、p><p> 本設(shè)計(jì)就是利用模擬舵機(jī)的機(jī)械部分,運(yùn)用單片機(jī)和電位器的閉環(huán)系統(tǒng)進(jìn)行角度控制,采用電位器進(jìn)行角度檢測(cè),由單片機(jī)對(duì)其進(jìn)行處理,輸出PWM脈沖信號(hào)控制舵機(jī)轉(zhuǎn)動(dòng)到所設(shè)定的角度。即將模擬舵機(jī)改裝成數(shù)字舵機(jī),實(shí)現(xiàn)了舵機(jī)的數(shù)字化控制。</p><p> 2 STC12C5A08S2單片機(jī)概述</p><p> 2.1STC12C5A08S2簡(jiǎn)介</p>
21、<p> 新一代宏晶芯片具有1個(gè)時(shí)鐘/機(jī)器周期,高速、高可靠,2路PWM,8路10位高速A/D轉(zhuǎn)換,25萬(wàn)次/秒1T 8051帶總線(xiàn),無(wú)法解密,管腳直接兼容傳統(tǒng)89C52,有全球唯一ID號(hào)可省復(fù)位電路,36-44個(gè)I/O內(nèi)部R/C時(shí)鐘的新一代宏晶芯片加密性強(qiáng),解密難度高。 </p><p> 2.2STC12C5A08S2系列主要性能</p><p> ●高速:1個(gè)時(shí)鐘
22、/機(jī)器周期,增強(qiáng)型8051內(nèi)核,速度比普通8051快8~12倍 </p><p> ●寬電壓:5.5~3.3V,2.2~3.6V(STC12LE5A60S2系列) </p><p> ●增加第二復(fù)位功能腳(高可靠復(fù)位,可調(diào)整復(fù)位門(mén)檻電壓,頻率<12MHz時(shí),無(wú)需此功能)●增加外部掉電檢測(cè)電路,可在掉電時(shí),及時(shí)將數(shù)據(jù)保存進(jìn)EEPROM,正常工作時(shí)無(wú)需操作EEP </p>
23、<p> ●低功耗設(shè)計(jì):空閑模式,HOLTEK芯片解密,(可由任意一個(gè)中斷喚醒) </p><p> ●低功耗設(shè)計(jì):掉電模式(可由外部中斷喚醒),可支持下降沿/上升沿和遠(yuǎn)程喚醒 </p><p> ●工作頻率:0~35MHz,相當(dāng)于普通8051:0~420MHz </p><p> ●時(shí)鐘:外部晶體或內(nèi)部RC振蕩器可選,在ISP下載編程用戶(hù)程序
24、時(shí)設(shè)置 </p><p> ●8/16/20/32/40/48/52/56/60/62K字節(jié)片內(nèi)Flash程序存儲(chǔ)器,擦寫(xiě)次數(shù)10萬(wàn)次以上 </p><p> ●1280字節(jié)片內(nèi)RAM數(shù)據(jù)存儲(chǔ)器 </p><p> ●芯片內(nèi)EEPROM功能,擦寫(xiě)次數(shù)10萬(wàn)次以上 </p><p> ●ISP / IAP,在系統(tǒng)可編程/在應(yīng)用可編程,無(wú)
25、需編程器/仿真器 </p><p> ●8通道,10位高速ADC,速度可達(dá)25萬(wàn)次/秒,2路PWM還可當(dāng)2路D/A使用 </p><p> ●2通道捕獲/比較單元(PWM/PCA/CCP),---也可用來(lái)再實(shí)現(xiàn)2個(gè)定時(shí)器或2個(gè)外部中斷(支持上升沿/下降沿中斷) </p><p> ●4個(gè)16位定時(shí)器,兼容普通8051的定時(shí)器T0/T1,2路PCA實(shí)現(xiàn)2個(gè)定時(shí)器
26、 </p><p> ●可編程時(shí)鐘輸出功能,T0在P3.4輸出時(shí)鐘,T1在P3.5輸出時(shí)鐘,BRT在P1.0輸出時(shí)鐘 </p><p> ●硬件看門(mén)狗(WDT) </p><p> ●高速SPI串行通信端口 </p><p> ●全雙工異步串行口(UART),兼容普通8051的串口 </p><p> ●先進(jìn)
27、的指令集結(jié)構(gòu),兼容普通8051指令集,有硬件乘法/除法指令 </p><p> ●通用I/O口(36/40/44個(gè)),復(fù)位后為:準(zhǔn)雙向口/弱上拉(普通8051傳統(tǒng)I/O口)可設(shè)置成四種模式:準(zhǔn)雙向口/弱上拉,推挽/強(qiáng)上拉,僅為輸入/高阻,開(kāi)漏每個(gè)I/O口驅(qū)動(dòng)能力均可達(dá)到20mA,但整個(gè)芯片最大不得超過(guò)100mA</p><p><b> 2.3A/D轉(zhuǎn)換器</b>
28、</p><p><b> 特點(diǎn):</b></p><p><b> ⑴ 10 位 精度</b></p><p> ?、?0.5 LSB 的非線(xiàn)性度</p><p> ⑶ ± 2 LSB 的絕對(duì)精度</p><p> ?、?13 - 260 µs 的
29、轉(zhuǎn)換時(shí)間</p><p> ?、?最高分辨率時(shí)采樣率高達(dá)15 kSPS</p><p> ?、?6 路復(fù)用的單端輸入通道</p><p> ⑺ 2 路附加復(fù)用的單端輸入通道 (TQFP與 MLF封裝 )</p><p> ?、?可選的左對(duì)齊ADC讀數(shù)</p><p> ?、?0 - VCC 的 ADC輸入電壓范圍&l
30、t;/p><p> ⑽ 可選的2.56V ADC參考電壓 </p><p> ?、?連續(xù)轉(zhuǎn)換或單次轉(zhuǎn)換模式</p><p> ⑿ ADC 轉(zhuǎn)換結(jié)束中斷</p><p> 2.4脈寬調(diào)制PWM原理</p><p> 本系統(tǒng)采用內(nèi)部16位定時(shí)器T1來(lái)產(chǎn)生兩路PWM信號(hào)。</p><p> 16
31、位的T/C可以實(shí)現(xiàn)精確的程序定時(shí)(事件管理)、波形產(chǎn)生和信號(hào)測(cè)量。其主要特點(diǎn)如下:</p><p> ?、?真正的16位設(shè)計(jì) (即允許 16 位的PWM)</p><p> ?、?2 個(gè)獨(dú)立的輸出比較單元</p><p> ?、?雙緩沖的輸出比較寄存器</p><p> ?、?一個(gè)輸入捕捉單元</p><p> ⑸
32、輸入捕捉噪聲抑制器</p><p> ⑹ 比較匹配發(fā)生時(shí)清除寄存器( 自動(dòng)重載)</p><p> ?、?無(wú)干擾脈沖,相位正確的PWM</p><p> ?、?可變的PWM周期</p><p> ⑼ 頻率發(fā)生器;外部事件計(jì)數(shù)器</p><p> ?、?4 個(gè)獨(dú)立的中斷源(TOV1、OCF1A、OCF1B 與 ICF
33、1)</p><p> 寄存器:定時(shí)器 / 計(jì)數(shù)器 TCNT1、輸出比較寄存器 OCR1A/B 與輸入捕捉寄存器 ICR1 均為 16 位寄存器。訪(fǎng)問(wèn) 16 位寄存器必須通過(guò)特殊的步驟,T/C 控制寄存器 TCCR1A/B 為 8 位寄存器,沒(méi)有 CPU 訪(fǎng)問(wèn)的限制。雙緩沖輸出比較寄存器 OCR1A/B 一直與 T/C 的值做比較。波形發(fā)生器用比較結(jié)果產(chǎn)生PWM或在輸出比較引腳OC1A/B輸出可變頻率的信號(hào)。比
34、較匹配結(jié)果還可置位比較匹配標(biāo)志 OCF1A/B,用來(lái)產(chǎn)生輸出比較中斷請(qǐng)求。在 PWM 模式下用 OCR1A 作為 TOP 值時(shí), OCR1A 寄存器不能用作 PWM 輸出。但此時(shí) OCR1A 是雙向緩沖的, TOP 值可在運(yùn)行中得到改變。當(dāng)需要一個(gè)固定的 TOP值時(shí)可以使用 ICR1寄存器,從而釋放 OCR1A 來(lái)用作PWM輸出。</p><p> 工作模式:工作模式 - T/C 和輸出比較引腳的行為 - 由波
35、形發(fā)生模式 (WGM13:0) 及比較輸出模式(COM1x1:0) 的控制位決定。比較輸出模式對(duì)計(jì)數(shù)序列沒(méi)有影響,而波形產(chǎn)生模式對(duì)計(jì)數(shù)序列則有影響。 COM1x1:0 控制 PWM 輸出是否為反極性。非 PWM 模式時(shí) COM1x1:0控制輸出是否應(yīng)該在比較匹配發(fā)生時(shí)置位、清零,或電平取反。</p><p> 本設(shè)計(jì)采用相位修正PWM 模式。</p><p> 相位修正 PWM 模式
36、(WGM13:0 = 1、 2、 3、10 或 11)為用戶(hù)提供了一個(gè)獲得高精度的、相位準(zhǔn)確的 PWM 波形的方法。與相位和頻率修正模式類(lèi)似,此模式基于雙斜坡操作。計(jì)時(shí)器重復(fù)地從 BOTTOM 計(jì)到 TOP,然后又從 TOP倒退回到 BOTTOM。在一般的比較輸出模式下,當(dāng)計(jì)時(shí)器往 TOP 計(jì)數(shù)時(shí)若 TCNT1 與 OCR1x 匹配,OC1x 將清零為低電平;而在計(jì)時(shí)器往 BOTTOM 計(jì)數(shù)時(shí)若 TCNT1 與 OCR1x 匹配, OC
37、1x 將置位為高電平。工作于反向比較輸出時(shí)則正好相反。與單斜坡操作相比,雙斜坡操作可獲得的最大頻率要小。但其對(duì)稱(chēng)特性十分適合于電機(jī)控制。相位修正 PWM 模式的 PWM 分辨率固定為 8、9 或 10 位,或由 ICR1 或 OCR1A 定義。最小分辨率為2比特(ICR1或OCR1A設(shè)為 0x0003),最大分辨率為16位(ICR1或OCR1A設(shè)為 MAX)。 PWM 分辨率位數(shù)可用下式計(jì)算:工作于相位修正 PWM 模式時(shí),計(jì)數(shù)器的數(shù)值
38、一直累加到固定值 0x00FF、 0x01FF、0x03FF (WGM13:0 = 1、 2或3</p><p> 圖2.2相位修正PWM模式時(shí)序圖</p><p><b> 3. 串口通信</b></p><p> 3.1串口通信的作用</p><p> 系統(tǒng)需要接收上位機(jī)設(shè)置的角度的數(shù)據(jù),并把下位機(jī)的數(shù)據(jù)傳到
39、上位機(jī)。因此串口模塊的作用就是把單片機(jī)需要傳送到上位機(jī)的數(shù)據(jù)轉(zhuǎn)換成電腦的RS-232標(biāo)準(zhǔn)串口數(shù)據(jù),以便把數(shù)據(jù)發(fā)送到上位機(jī)。</p><p> 3.2 RS-232C接口和MAX232芯片簡(jiǎn)介</p><p> 本系統(tǒng)串口通信模塊設(shè)計(jì)采用的是MAX232芯片把單片機(jī)傳來(lái)的數(shù)據(jù)轉(zhuǎn)換成RS-232標(biāo)準(zhǔn)串口數(shù)據(jù)。以下對(duì)RS-232C接口和MAX232芯片做簡(jiǎn)要的介紹。</p>&
40、lt;p> RS-232C的全稱(chēng)是“數(shù)據(jù)終端設(shè)備(DTE) 和數(shù)據(jù)通信設(shè)備(DCE) 之間的串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)”,適合于短距離通信或帶調(diào)制解調(diào)器的通信應(yīng)用場(chǎng)合.PC機(jī)上一般都會(huì)有RS-232C接口,MAX232芯片是專(zhuān)門(mén)為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計(jì)的一款兼容RS232標(biāo)準(zhǔn)的芯片, 其結(jié)構(gòu)圖如圖3.1所示。該器件包含2個(gè)驅(qū)動(dòng)器2個(gè)接收器和一個(gè)電壓發(fā)生器電路提供TIA/EIA-232-F電平。該器件符合TIA/EIA
41、-232-F標(biāo)準(zhǔn),每一個(gè)接收器將TIA/EIA-232-F電平轉(zhuǎn)換成5-V TTL/CMOS電平。每一個(gè)發(fā)送器將TTL/CMOS電平轉(zhuǎn)換成TIA/EIA-232-F電平。</p><p> 3.3 MAX232芯片引腳描述及其應(yīng)用</p><p> MAX232芯片引腳圖如圖3.1所示:</p><p> 圖3.1 MAX232芯片引腳圖</p>
42、<p> 本系統(tǒng)數(shù)據(jù)的接收和發(fā)送引腳選用的是T21N,R21N,R2OUT,T2OUT四個(gè)引腳,其中T21N、R2OUT與標(biāo)準(zhǔn)的RS-232C接口相連。負(fù)責(zé)數(shù)據(jù)把轉(zhuǎn)化好的數(shù)據(jù)傳送到上位機(jī);T2OUT、R21N與單片機(jī)相連,負(fù)責(zé)接收從單片機(jī)送來(lái)的數(shù)據(jù)。</p><p> 3.3.1 MAX232應(yīng)用電路介紹</p><p> MAX232 外圍需要4個(gè)電解電容C1 、C2
43、、C3 、C4 ,是內(nèi)部電源轉(zhuǎn)換所需電容。其取值均為1μF/25V。宜選用鉭電容并且應(yīng)盡量靠近芯片。C5為0.1μF的去耦電容。如圖3.2所示。但本設(shè)計(jì)均采用104電容。</p><p> 圖3.2 MAX232應(yīng)用接口電路</p><p> 圖3.3串口模塊原理圖</p><p> 3.3.2串口模塊原理圖設(shè)計(jì)</p><p> 單
44、片機(jī)要通過(guò)與MAX232芯片與上位機(jī)的串口相連才能與上位機(jī)通訊。單片機(jī)與上位機(jī)連接電路圖如圖3.3所示。</p><p> 本系統(tǒng)是通過(guò)單片機(jī)的控制通過(guò)串口與PC通信來(lái)實(shí)現(xiàn)的,首先,串口的2,3腳與232芯片的任一路接收端和發(fā)送端相連;然后再通過(guò)對(duì)應(yīng)路的發(fā)送端和接收端與單片機(jī)的對(duì)應(yīng)RXD和TXD相連,再串口中斷打開(kāi)后發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)串口異步通信。在異步傳送方式中,字符是按幀格式進(jìn)行發(fā)送的。異步通信的幀格式如
45、表3.1所示。</p><p> 表3.1異步通信的幀格式</p><p> n-1 第N個(gè)字符(一串行幀) n+1</p><p> 起始位 數(shù) 據(jù) 位 校驗(yàn)位 停止位</p><p><b> 4.驅(qū)動(dòng)芯片</b&g
46、t;</p><p> 電機(jī)驅(qū)動(dòng)芯片LG9110 </p><p> ?、?低靜態(tài)工作電流; </p><p> ⑵ 寬電源電壓范圍:2.5V-12V; </p><p> ?、?每通道具有800mA 連續(xù)電流輸出能力; </p><p> ?、?較低的飽和壓降; </p><p> ⑸
47、TTL/CMOS輸出電平兼容,可直接連CPU;</p><p> ?、?輸出內(nèi)置鉗位二極管,適用于感性負(fù)載; </p><p> ?、?控制和驅(qū)動(dòng)集成于單片IC之中; </p><p> ?、?具備管腳高壓保護(hù)功能; </p><p> ⑼ 工作溫度:0℃-80℃。 </p><p> LG9110 是為控制和驅(qū)動(dòng)
48、電機(jī)設(shè)計(jì)的兩通道推挽式功率放大專(zhuān)用集成電路器件,</p><p> 將分立電路集成在單片 IC 之中,使外圍器件成本降低,整機(jī)可靠性提高。該芯片有</p><p> 兩個(gè) TTL/CMOS 兼容電平的輸入,具有良好的抗干擾性;兩個(gè)輸出端能直接驅(qū)動(dòng)電</p><p> 機(jī)的正反向運(yùn)動(dòng),它具有較大的電流驅(qū)動(dòng)能力,每通道能通過(guò) 750~800mA 的持續(xù)</p
49、><p> 電流,峰值電流能力可達(dá)1.5~2.0A;同時(shí)它具有較低的輸出飽和壓降;內(nèi)置的鉗位</p><p> 二極管能釋放感性負(fù)載的反向沖擊電流,使它在驅(qū)動(dòng)繼電器、直流電機(jī)、步進(jìn)電機(jī)或</p><p> 開(kāi)關(guān)功率管的使用上安全可靠。管腳定義如表4.1所示。</p><p> 表4.1 LG9110管腳定義</p><
50、p> 圖4.1 LG9110管腳波形圖</p><p><b> 圖4.2 應(yīng)用電路</b></p><p><b> 5.硬件設(shè)計(jì)思路</b></p><p> 5.1 系統(tǒng)基本原理</p><p> 本文以STC12C5A80S2為核心,利用模擬舵機(jī)的機(jī)械部分,其中包括小型直流電
51、機(jī)和一個(gè)反饋可調(diào)電位器,來(lái)組成一個(gè)閉環(huán)的舵機(jī)控制系統(tǒng),直流電機(jī)用H橋芯片LG9110來(lái)驅(qū)動(dòng),電位器進(jìn)行角度測(cè)量,通過(guò)單片機(jī)的內(nèi)部A/D轉(zhuǎn)換來(lái)反饋實(shí)時(shí)角度,上位機(jī)通過(guò)RS232串口與單片機(jī)進(jìn)行通信,將所設(shè)定的角度送到單片機(jī),單片機(jī)通過(guò)編程產(chǎn)生PWM信號(hào),經(jīng)由LG9110驅(qū)動(dòng),控制電機(jī)的正反轉(zhuǎn)。</p><p> 整體電路原理框圖如圖5.1所示</p><p> 圖5.1整體電路原理框圖&
52、lt;/p><p><b> 控制流程如下:</b></p><p> ?、?上位機(jī)設(shè)定-90°到+90°之間的角度,通過(guò)串口發(fā)送到單片機(jī);</p><p> ?、?單片機(jī)讀取角度v并將其轉(zhuǎn)換成10位二進(jìn)制數(shù)r;</p><p> ?、?電位器測(cè)量當(dāng)前角度,并將結(jié)果送到單片機(jī)的A/D轉(zhuǎn)換通道進(jìn)行轉(zhuǎn)換,&
53、lt;/p><p> 轉(zhuǎn)換結(jié)果為10為二進(jìn)制數(shù)y;</p><p> 5.2 系統(tǒng)硬件設(shè)計(jì)</p><p> 圖5.1 系統(tǒng)原理圖</p><p><b> 6. 系統(tǒng)主程序</b></p><p> 系統(tǒng)硬件電路設(shè)計(jì)方案確定以后,主要功能將依賴(lài)于系統(tǒng)軟件編程來(lái)實(shí)現(xiàn)??刂葡到y(tǒng)能否正常可靠地工
54、作,除了硬件設(shè)計(jì)合理外,功能完善的軟件設(shè)計(jì)是非常關(guān)鍵的。這一部分將詳細(xì)闡述本設(shè)計(jì)方案所需實(shí)現(xiàn)的功能、系統(tǒng)軟件資源分配,上位機(jī)的設(shè)計(jì)方案及具體實(shí)現(xiàn)方法。</p><p> 6.1主程序設(shè)計(jì)要點(diǎn)</p><p> 在論述具體的軟件程序設(shè)計(jì)之前,先對(duì)軟件設(shè)計(jì)的原則、方法等軟件設(shè)計(jì)要點(diǎn)作簡(jiǎn)要的闡述,這是進(jìn)行軟件程序設(shè)計(jì)的依據(jù)和手段。</p><p> 應(yīng)用程序的主要設(shè)
55、計(jì)原則是:</p><p> ⑴ 軟件設(shè)計(jì)與硬件電路設(shè)計(jì)需綜合考慮。</p><p> ?、?軟件設(shè)計(jì)必須保證系統(tǒng)的各個(gè)硬件功能模塊能夠協(xié)調(diào)工作,完成指定的系統(tǒng)功能。</p><p> ?、?各項(xiàng)功能程序設(shè)計(jì)實(shí)現(xiàn)模塊化。</p><p> ?、?合理規(guī)劃程序存儲(chǔ)區(qū)和數(shù)據(jù)存儲(chǔ)區(qū),為功能的擴(kuò)展預(yù)留空間,方便今后系統(tǒng)的功能完善和軟件升級(jí)。<
56、/p><p> ?、?采取軟件抗干擾措施,保證系統(tǒng)更可靠的運(yùn)行。</p><p><b> 6.2 上位機(jī)</b></p><p> 目前,在許多單片機(jī)應(yīng)用系統(tǒng)中,上、下位機(jī)分工明確,作為下位機(jī)核心器件的單片機(jī)往往只負(fù)責(zé)數(shù)據(jù)采集和通信,而上位機(jī)通常以基于圖形界面的Windows核心為操作平臺(tái),為便于查詢(xún)和保存數(shù)據(jù),還需要數(shù)據(jù)庫(kù)的支持,這種應(yīng)用的
57、核心是數(shù)據(jù)通信,它包括單片機(jī)和上位機(jī)之間、客戶(hù)端和服務(wù)器之間以及客戶(hù)端和客戶(hù)端之間的通信,而單片機(jī)和上位機(jī)之間數(shù)據(jù)通信則是整個(gè)系統(tǒng)的基礎(chǔ)。</p><p> 單片機(jī)和PC的通信是通過(guò)單片機(jī)和PC串口之間的硬件連接實(shí)現(xiàn)的。7.系統(tǒng)調(diào)試</p><p><b> 7.1 硬件調(diào)試</b></p><p> 由于本設(shè)計(jì)硬件比較簡(jiǎn)單,分兩個(gè)模塊:
58、單片機(jī)模塊和電平轉(zhuǎn)換模塊,所以硬件調(diào)試主要是單片機(jī)模塊。</p><p> 在電路制作完成后,不要急于上電測(cè)試,而首先必須做好以下調(diào)試前的檢查工作。 </p><p><b> 檢查連線(xiàn)情況:</b></p><p> ?、?經(jīng)常碰到的有錯(cuò)接(即連線(xiàn)的一端正確,而另一端誤接)、少接(指安裝時(shí)漏接的線(xiàn))及多接(指在電路上完全是多余的連線(xiàn)),等
59、連線(xiàn)錯(cuò)誤。檢查連線(xiàn)可以直接對(duì)照電路原理圖進(jìn)行,但若電路中布線(xiàn)較多,則可以以元器件(如運(yùn)放、三極管)為中心,依次檢察查其引腳的有關(guān)連線(xiàn),這樣不僅可以查出錯(cuò)接或少接的線(xiàn),而且也較易發(fā)現(xiàn)多余的線(xiàn)。 </p><p> ?、?為確保連線(xiàn)的可靠,在查線(xiàn)的同時(shí),還可以用萬(wàn)用表電阻檔對(duì)接線(xiàn)作連通檢查,而且最好在器件外引線(xiàn)處測(cè)量,這樣有可能查出某些“虛焊”的隱患。 </p><p> ?、?檢查元器件焊接
60、情況:元器件的檢查,重點(diǎn)要查有極性的元件有否接錯(cuò),以及外引線(xiàn)間有否短路,同時(shí)還須檢查元器件焊接處是否可靠。這里需要指出,在焊接前,必須對(duì)元器件進(jìn)行檢測(cè),確保元器件能正常工作,以免給調(diào)試帶來(lái)不必要的麻煩。 </p><p> ?、?檢查電源輸入端與公共接地端間有否短路在通電前,還需用萬(wàn)用表檢查電源輸入端與地之間是否存短路,若有則須進(jìn)一步檢查其原因。 </p><p> ?、?在完成了以上各項(xiàng)
61、檢查并確認(rèn)無(wú)誤后,才可通電調(diào)試,但此時(shí)應(yīng)注意電源的正、負(fù)極性不能接反。</p><p> 考慮到本設(shè)計(jì)只是一次學(xué)習(xí)過(guò)程,對(duì)性能要求不是很高,所以采用下載線(xiàn)的5V VCC供電這樣的方法,電路也盡可能的精簡(jiǎn)。</p><p> 在檢查驅(qū)動(dòng)電路時(shí),在未加單片機(jī)使能控制的情況下,通電待系統(tǒng)工作后,用萬(wàn)用表測(cè)量LG9110的1腳和4腳是否有輸出。若輸出電壓大小不符合要求,則說(shuō)明驅(qū)動(dòng)芯片有問(wèn)題。&
62、lt;/p><p> 若確定驅(qū)動(dòng)電路無(wú)誤,則對(duì)單片機(jī)使能,下載調(diào)試好的程序到單片機(jī),使系統(tǒng)運(yùn)行。用萬(wàn)用表檢查單片機(jī)的各個(gè)引腳,尤其是PB1、PB2的PWM輸出引腳的電壓大小是否接近理論值,若不是或者沒(méi)有輸出,則直接給定該端口賦固定的位變量值,觀察輸出情況,符合要求,則說(shuō)明是軟件問(wèn)題。具體調(diào)試見(jiàn)軟件調(diào)試。</p><p> 單片機(jī)輸出符合要求后,連接上舵機(jī),觀察舵機(jī)是否在指定位置停住轉(zhuǎn)動(dòng),若
63、在指定位置左右來(lái)回轉(zhuǎn)動(dòng),說(shuō)明PD參數(shù)沒(méi)調(diào)好;若舵機(jī)一直轉(zhuǎn)到盡頭停不下來(lái)則說(shuō)明舵機(jī)反饋端斷開(kāi),或者單片機(jī)讀不到正確的A/D轉(zhuǎn)換值。</p><p> 綜合調(diào)試過(guò)程中的各種問(wèn)題后,在老師的指導(dǎo)下,最終得出期望的結(jié)果,調(diào)試成功。</p><p><b> 7.2 軟件調(diào)試</b></p><p> 把調(diào)試好的程序下載到單片機(jī)中,接上電源,檢驗(yàn)程
64、序是否如自己所設(shè)計(jì)的那樣可以實(shí)現(xiàn)所要求的功能。如果電路板上的結(jié)果和設(shè)想的不同,由于在硬件檢查部分已經(jīng)確定了硬件沒(méi)問(wèn)題。則應(yīng)該是軟件部分即程序方面的問(wèn)題。需要檢查程序。首先檢外接收中斷部分,接收到的數(shù)據(jù)是否能夠正確讀取,并轉(zhuǎn)換成設(shè)定的角度值。接收部分沒(méi)問(wèn)題再檢查T(mén)1定時(shí)器的設(shè)置,選用的頻率、工作模式,PB1、PB2端口是否設(shè)置為輸出。因?yàn)榍懊嬉呀?jīng)確定硬件沒(méi)有問(wèn)題了,所以,在軟件調(diào)試的時(shí)候可以結(jié)合硬件來(lái)在線(xiàn)調(diào)試,這樣很直觀,而且發(fā)現(xiàn)問(wèn)題也很
65、容易,觀察舵機(jī)是否還在所指定角度來(lái)回轉(zhuǎn)動(dòng),耐心的調(diào)試,直到舵機(jī)準(zhǔn)確的達(dá)到指定的角度并停止轉(zhuǎn)動(dòng)。</p><p> 調(diào)試是整個(gè)設(shè)計(jì)的關(guān)鍵部分,調(diào)試的成功與否關(guān)系到系統(tǒng)運(yùn)行的成功與否,所以在調(diào)試時(shí)要格外的細(xì)心和有耐心,在自己的努力和老師的指導(dǎo)下最終調(diào)試成功。</p><p><b> 參考文獻(xiàn):</b></p><p> [1] 童詩(shī)白,華
66、成英.模擬電子技術(shù)基礎(chǔ)[M].北京:高等教育出版社, 2000.</p><p> [2] 先鋒工作室.單片機(jī)程序設(shè)計(jì)實(shí)例[M]. 北京:清華大學(xué)出版社,2003. </p><p> [3] 馬忠梅等.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì)[M].北京:北京航空航天大學(xué)出版社,2003.</p><p> [4] 潘新民,王燕芳.微型計(jì)算機(jī)控制技術(shù)[M].北京:電
67、子工業(yè)出版社,2007.</p><p> [5] 金春林,邱慧芳,張皆喜.AVR系列單片機(jī)C語(yǔ)言編程與應(yīng)用實(shí)例[M].北京清華大學(xué)出版社,2003.</p><p> [6] 李江全,朱東芹.Visual Basic數(shù)據(jù)采集與串口通信測(cè)控應(yīng)用實(shí)戰(zhàn)[M].北京:人民郵電出版社,2010.</p><p> #include<stc12c5a.h>
68、; //頭文件</p><p> #define uchar unsigned char </p><p> #define uint unsigned int</p><p> unchar sig=0, count,s1num, miao,shi,fen;</p><p> float flag=0,init=0,miao1=0,
69、shi1=0,fen1=0, AD=0; </p><p> sbit rs=P3^2; //定義1602液晶RS端</p><p> sbit rw=P2^6;</p><p> sbit lcden=P3^3;//定義1602液晶LCDEN端</p><p> sbit s1=P2^3; //定義按鍵--功能鍵</p&
70、gt;<p> sbit s2=P2^2;//定義按鍵--增加鍵</p><p> sbit s3=P2^1;//定義按鍵--減小鍵</p><p> sbit s4=P2^0; //確定鍵</p><p> uchar code table[]="true angle:";//定義初始上電時(shí)液晶默認(rèn)顯示狀態(tài)<
71、/p><p> uchar code table1[]=" angle:";</p><p> void delay(uint z) //延時(shí)函數(shù)</p><p> {uint x,y;</p><p> for(x=z;x>0;x--)</p><p> for(y=120
72、;y>0;y--);</p><p><b> }</b></p><p> void PWM_init (void)</p><p> {CMOD=0x80; //設(shè)置PCA定時(shí)器</p><p> CCON=0x00;</p><p><b> CL=0x00; &
73、lt;/b></p><p><b> CH=0x00;</b></p><p> CCAPM0=0x42; //PWM0設(shè)置PCA工作方式為PWM方式(0100 0010)</p><p> CCAP0L=0x00; //設(shè)置PWM0初始值與CCAP0H相同</p><p> CCAP0H=0x00; /
74、/ PWM0初始時(shí)為0</p><p> CCAPM1=0x42; //PWM1設(shè)置PCA工作方式為PWM方式(使用時(shí)刪除//)</p><p> CCAP1L=0x00; //設(shè)置PWM1初始值與CCAP0H相同</p><p> CCAP1H=0x00; // PWM1初始時(shí)為0</p><p> CR=1; //啟動(dòng)PCA定時(shí)器
75、</p><p><b> }</b></p><p> void PWM0_set (unsigned char a,unsigned char b)</p><p> {CCAP0L= a; //設(shè)置值直接寫(xiě)入CCAP0L</p><p> CCAP0H= a; //設(shè)置值直接寫(xiě)入CCAP0H</p&
76、gt;<p> CCAP1L= b; //設(shè)置值直接寫(xiě)入CCAP0L</p><p> CCAP1H= b; //設(shè)置值直接寫(xiě)入CCAP0H</p><p><b> }</b></p><p> void ad_init() //AD初始化函數(shù)</p><p> {ADC_CONTR|=0x8
77、0;//開(kāi)A/D電源</p><p> delay(100); //必要的延時(shí)</p><p> P1ASF=0x01;//P1.0作為模擬量輸入口</p><p> delay(100); //必要的延時(shí)</p><p> ADC_CONTR=0xc0;//開(kāi)A/D電源</p><p>
78、 delay(100); </p><p><b> }</b></p><p> void con_init(void) </p><p> { SCON = 0x5a; PCON=0X80; //8 bit data ,no parity bit</p><p> TMOD
79、 = 0x20; //T1 as 8-bit auto reload</p><p> TH1 = TL1 = -13; //Set Uart baudrate</p><p> TR1 = 1; </p><p><b> }</b>&l
80、t;/p><p> void SendData(char dat)</p><p> { TI = 0; //Clear TI flag</p><p> SBUF = dat; </p><p> while (!TI);
81、 //Wait for the previous data is sen</p><p><b> }</b></p><p> RecData(void)</p><p> { int dat;</p><p> while (!RI); //Wai
82、t for the previous data is sen</p><p> RI = 0; //Clear TI flag</p><p> dat =SBUF ; </p><p> return dat; //Send current d
83、ata</p><p><b> }</b></p><p> void write_com(uchar com)//液晶寫(xiě)命令函數(shù)</p><p><b> {rw=0;</b></p><p><b> rs=0;</b></p><p>
84、<b> lcden=0;</b></p><p><b> P0=com;</b></p><p><b> delay(5);</b></p><p><b> lcden=1;</b></p><p><b> delay(5);
85、</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void write_date(uchar date)//液晶寫(xiě)數(shù)據(jù)函數(shù)</p><p><b> {rw=0;</b></p&g
86、t;<p><b> rs=1;</b></p><p><b> lcden=0;</b></p><p><b> P0=date;</b></p><p><b> delay(5);</b></p><p><b>
87、 lcden=1;</b></p><p><b> delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> void write_sfm(uchar add,uchar d
88、ate)//寫(xiě)時(shí)分秒函數(shù)</p><p> {uchar ge;</p><p><b> ge=date;</b></p><p> write_com(0x80+0x40+add);//設(shè)置顯示位置</p><p> write_date(0x30+ge); //送去液晶顯示個(gè)位</p>&l
89、t;p><b> }</b></p><p> void lcdinit()//初始化函數(shù)</p><p> {uchar num;</p><p><b> lcden=0;</b></p><p><b> rw=0 ;</b></p>&l
90、t;p> fen=0; //初始化種變量值</p><p><b> miao=0;</b></p><p><b> shi=0;</b></p><p><b> count=0;</b></p><p><b> s1num=0;</b&g
91、t;</p><p> write_com(0x38);//初始化1602液晶</p><p> write_com(0x0c);</p><p> write_com(0x06);</p><p> write_com(0x01);</p><p> write_com(0x80);//設(shè)置顯示初始坐標(biāo)&l
92、t;/p><p> for(num=0;num<11;num++)//顯示年月日星期</p><p> {write_date(table[num]);</p><p><b> delay(5);</b></p><p><b> }</b></p><p>
93、 write_com(0xc0);//設(shè)置顯示初始坐標(biāo)</p><p> for(num=0;num<11;num++)//顯示年月日星期</p><p> {write_date(table1[num]);</p><p><b> delay(5);</b></p><p><b> }&l
94、t;/b></p><p> write_sfm(14,miao);//分別送去液晶顯示</p><p> write_sfm(13,fen);</p><p> write_sfm(12,shi);</p><p><b> }</b></p><p> void keyscan
95、()//按鍵掃描函數(shù)</p><p> {if(s1==0)</p><p> {delay(5);</p><p> if(s1==0)//確認(rèn)功能鍵被按下</p><p> {s1num++;//功能鍵按下次數(shù)記錄</p><p> while(!s1);//釋放確認(rèn)</p><
96、;p> if(s1num==1)//第一次被按下時(shí)</p><p> {write_com(0x80+0x40+14);//光標(biāo)定位到秒位置</p><p> write_com(0x0f); //光標(biāo)開(kāi)始閃爍</p><p><b> }</b></p><p> if(s1num==2)//第二次按
97、下光標(biāo)閃爍定位到分鐘位置</p><p> {write_com(0x80+0x40+13);</p><p><b> }</b></p><p> if(s1num==3)//第三次按下光標(biāo)閃爍定位到小時(shí)位置</p><p> {write_com(0x80+0x40+12);</p>&l
98、t;p><b> }</b></p><p> if(s1num==4)//第四次按下</p><p> {s1num=0;//記錄按鍵數(shù)清零</p><p> write_com(0x0c);//取消光標(biāo)閃爍</p><p><b> }</b></p><
99、;p><b> }</b></p><p><b> }</b></p><p> if(s1num!=0)//只有功能鍵被按下后,增加和減小鍵才有效</p><p> {if(s2==0)</p><p> {delay(5);</p><p> if
100、(s2==0)//增加鍵確認(rèn)被按下</p><p> {while(!s2);//按鍵釋放</p><p> if(s1num==1)//若功能鍵第一次按下</p><p> {miao++; //則調(diào)整秒加1</p><p> if(miao==10)//若滿(mǎn)60后將清零</p><p><b>
101、; miao=0;</b></p><p> write_sfm(14,miao);//每調(diào)節(jié)一次送液晶顯示一下</p><p> write_com(0x80+0x40+14);//顯示位置重新回到調(diào)節(jié)處</p><p><b> }</b></p><p> if(s1num==2)//若功能鍵
102、第二次按下</p><p> {fen++;//則調(diào)整分鐘加1</p><p> if(fen==10)//若滿(mǎn)60后將清零</p><p><b> fen=0;</b></p><p> write_sfm(13,fen);//每調(diào)節(jié)一次送液晶顯示一下</p><p> write
103、_com(0x80+0x40+13);//顯示位置重新回到調(diào)節(jié)處</p><p><b> }</b></p><p> if(s1num==3)//若功能鍵第三次按下</p><p> {shi++;//則調(diào)整小時(shí)加1</p><p> if(shi==2)//若滿(mǎn)24后將清零</p><
104、p><b> shi=0;</b></p><p> write_sfm(12,shi);;//每調(diào)節(jié)一次送液晶顯示一下</p><p> write_com(0x80+0x40+12);//顯示位置重新回到調(diào)節(jié)處</p><p><b> }</b></p><p><b>
105、; }</b></p><p><b> }</b></p><p><b> if(s3==0)</b></p><p> {delay(5);</p><p> if(s3==0)//確認(rèn)減小鍵被按下</p><p> {while(!s3);
106、//按鍵釋放</p><p> if(s1num==1)//若功能鍵第一次按下</p><p> {miao--;//則調(diào)整秒減1</p><p> if(miao==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為59</p><p><b> miao=9;</b></p><p> writ
107、e_sfm(14,miao);//每調(diào)節(jié)一次送液晶顯示一下</p><p> write_com(0x80+0x40+14);//顯示位置重新回到調(diào)節(jié)處</p><p><b> }</b></p><p> if(s1num==2)//若功能鍵第二次按下</p><p> {fen--;//則調(diào)整分鐘減1&l
108、t;/p><p> if(fen==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為59</p><p><b> fen=9;</b></p><p> write_sfm(13,fen);//每調(diào)節(jié)一次送液晶顯示一下</p><p> write_com(0x80+0x40+13);//顯示位置重新回到調(diào)節(jié)處</p&g
109、t;<p><b> }</b></p><p> if(s1num==3)//若功能鍵第二次按下</p><p> {shi--;//則調(diào)整小時(shí)減1</p><p> if(shi==-1)//若減到負(fù)數(shù)則將其重新設(shè)置為23</p><p><b> shi=1;</b>
110、</p><p> write_sfm(12,shi);//每調(diào)節(jié)一次送液晶顯示一下</p><p> write_com(0x80+0x40+12);//顯示位置重新回到調(diào)節(jié)處</p><p><b> }</b></p><p><b> }</b></p><p&
111、gt;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void write_sfm1(uchar add1,uchar date1)</p><p> {uchar ge1;</p&g
112、t;<p> ge1=date1;</p><p> write_com(0x80+add1);</p><p> write_date(0x30+ge1);</p><p><b> }</b></p><p> void sfm1(float x)</p><p>&l
113、t;b> {int n;</b></p><p><b> n=x;</b></p><p> shi1=n/100;</p><p> fen1=n/10%10;</p><p> miao1=n%10;</p><p> write_sfm1(12,shi1);
114、//分別送去液晶顯示</p><p> write_sfm1(13,fen1);</p><p> write_sfm1(14,miao1);</p><p><b> }</b></p><p> void main()//主函數(shù)</p><p><b> {</b&
115、gt;</p><p> int temp=0;</p><p> lcdinit();//首先初始化各數(shù)據(jù)</p><p> PWM_init(); //PWM初始化</p><p> ad_init();</p><p> con_init() ;</p><p> while
116、(1)//進(jìn)入主程序大循環(huán)</p><p> { keyscan();//不停的檢測(cè)按鍵是否被按?</p><p> ADC_CONTR|=0x08;//開(kāi)A/D電源</p><p><b> sig=0;</b></p><p> while(sig==0)</p><p><
117、b> {</b></p><p> sig=ADC_CONTR&0x10;</p><p><b> } </b></p><p> ADC_CONTR&=0xE7;//ADC_FLAG清零</p><p> AD=ADC_RES*4+ADC_RESL; //10位
118、AD的結(jié)果</p><p> AD=AD*180/1024;</p><p> if(RI==1){ delay(100); init = RecData(); temp=1; }//1024*180</p><p><b> sfm1(AD);</b></p><p> flag=init-AD;
119、</p><p> if(flag<-40) PWM0_set (0x00,0xff);</p><p> if(flag<-10&&flag>=-40) PWM0_set (0x00,0xaf);</p><p> if(flag<-3&&flag>=-10) PWM0_se
120、t (0x00,0x9f);</p><p> if(flag>40) PWM0_set (0xff,0x00);</p><p> if(flag>10&&flag<=40) PWM0_set (0xaf,0x00);</p><p> if(flag>3&&flag<=10)
121、 PWM0_set (0x9f,0x00);</p><p> if(flag>=-3&&flag<=3) {PWM0_set (0x00,0x00);if(temp)SendData( AD);temp=0;}</p><p> if(s4==0) </p><p><b> {</b></p>
122、<p><b> delay(5);</b></p><p> if(s4==0) </p><p><b> {</b></p><p> init=shi*100+fen*10+ miao;</p><p><b> }</b></p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計(jì)---彩燈控制電路設(shè)計(jì)
- 課程設(shè)計(jì)---彩燈循環(huán)控制電路設(shè)計(jì)
- 橫梁自動(dòng)升降控制電路設(shè)計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)--- 洗衣機(jī)控制電路設(shè)計(jì)
- 課程設(shè)計(jì)--節(jié)日彩燈控制電路設(shè)計(jì)報(bào)告
- 課程設(shè)計(jì)---切削加工刀架控制電路設(shè)計(jì)
- 混凝土攪拌機(jī)控制電路設(shè)計(jì)課程設(shè)計(jì)
- 課程設(shè)計(jì)---汽車(chē)尾燈控制電路設(shè)計(jì)
- hdl課程設(shè)計(jì)——交通燈控制電路設(shè)計(jì)
- 課程設(shè)計(jì)——汽車(chē)尾燈控制電路設(shè)計(jì)
- 洗衣機(jī)控制電路設(shè)計(jì)eda課程設(shè)計(jì)
- 課程設(shè)計(jì)---汽車(chē)尾燈控制電路設(shè)計(jì)
- 后動(dòng)作優(yōu)先設(shè)備控制電路設(shè)計(jì) 課程設(shè)計(jì)
- 課程設(shè)計(jì)--汽車(chē)尾燈控制電路設(shè)計(jì)
- eda課程設(shè)計(jì)---溫度測(cè)量與控制電路設(shè)計(jì)
- fpga課程設(shè)計(jì)--vga圖像顯示控制電路設(shè)計(jì)
- 電子課程設(shè)計(jì)-交通燈控制電路設(shè)計(jì)
- 課程設(shè)計(jì)-安全指示燈控制電路設(shè)計(jì)
- 數(shù)電課程設(shè)計(jì)--- 彩燈循環(huán)顯示控制電路設(shè)計(jì)
- 數(shù)電課程設(shè)計(jì)---交通燈控制電路設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論