欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      單片機(jī)課程設(shè)計(jì)

      時(shí)間:2019-05-15 09:40:16下載本文作者:會(huì)員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《單片機(jī)課程設(shè)計(jì)》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《單片機(jī)課程設(shè)計(jì)》。

      第一篇:單片機(jī)課程設(shè)計(jì)

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      第一章 緒論.....................................................................................................................................2 1.1概述....................................................................................................................................2 1.2課程設(shè)計(jì)任務(wù).....................................................................................................................2 第二章硬件系統(tǒng)設(shè)計(jì).......................................................................................................................3 2.1單片機(jī)最小系統(tǒng).................................................................................................................3 2.1.1 STC89C52的介紹.....................................................................................................3 2.1.2 stc89c52系列單片機(jī)最小系統(tǒng)的介紹...................................................................4 2.2矩陣鍵盤模塊.....................................................................................................................5 2.3數(shù)碼管顯示單元.................................................................................................................5 2.4 LCD1602液晶顯示電路.....................................................................................................6 2.5蜂鳴器單元.........................................................................................................................7 第三章 軟件設(shè)計(jì).............................................................................................................................8 3.1數(shù)碼管實(shí)驗(yàn).........................................................................................................................8 3.1.1循環(huán)數(shù)碼管顯示0—F程序設(shè)計(jì)結(jié)構(gòu)圖:............................................................8 3.1.2 59秒倒計(jì)數(shù)流程圖..............................................................................................9 3.2 矩陣鍵盤流程圖..............................................................................................................10 3.3 LCD1602滾動(dòng)顯示年月日時(shí)分秒....................................................................................11 3.4 AD轉(zhuǎn)換,.........................................................................................................................12 3.5家電遙控器.......................................................................................................................13 第四章調(diào)試結(jié)果分析.....................................................................................................................14 4.1數(shù)碼管調(diào)試及分析.........................................................................................................14 4.1.1循環(huán)數(shù)碼管顯示0—F...........................................................................................14 4.1.2數(shù)碼管59秒倒計(jì)數(shù)............................................................................................15 4.2矩陣鍵盤...........................................................................................................................15 4.3 LCD1602滾動(dòng)顯示年月日時(shí)分秒....................................................................................16 4.4 AD轉(zhuǎn)換.............................................................................................................................16 4.5家電遙控器.......................................................................................................................17 第五章小結(jié).....................................................................................................................................17 參考文獻(xiàn):.....................................................................................................................................18

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      第一章緒論

      1.1概述

      隨著我國工業(yè)技術(shù)和電子技術(shù)的發(fā)展和進(jìn)步,自動(dòng)控制技術(shù)也已經(jīng)得到了極大的普及和應(yīng)用,而這些自動(dòng)控制技術(shù)的核心技術(shù)就是單片微型計(jì)算機(jī),簡稱單片機(jī)。它以其高可靠性、高性價(jià)比、低電壓、低功耗等一系列優(yōu)點(diǎn),被廣泛應(yīng)用于控制系統(tǒng)、數(shù)據(jù)采集等領(lǐng)域。而51單片機(jī)系列以其超高的性價(jià)比深受廣大電子愛好者和開發(fā)者以及大學(xué)生群體的歡迎。故而本次課程設(shè)計(jì)采用STC89C52單片機(jī)。

      1.2課程設(shè)計(jì)任務(wù)

      必做項(xiàng)目(這是每個(gè)學(xué)生必做的任務(wù)):

      1. 基本系統(tǒng):在51單片機(jī)開發(fā)系統(tǒng)PCB電路板上完成電子元器件的焊接、調(diào)試、程序下載,并實(shí)現(xiàn)數(shù)碼管顯示、矩陣鍵盤掃描、中斷程序、定時(shí)器程序、串口通訊等基本功能; 2. 顯示功能:焊接電路并實(shí)現(xiàn)對(duì)1602液晶屏的顯示功能,要求能滾動(dòng)顯示字符;

      3. 輸出控制:焊接電路并實(shí)現(xiàn)對(duì)繼電器的控制功能;

      4. 數(shù)據(jù)采集:焊接電路并實(shí)現(xiàn)對(duì)AD0832的數(shù)據(jù)采集功能; 選做項(xiàng)目(以下任選一):

      1. 家電遙控器:實(shí)現(xiàn)對(duì)紅外接收管和發(fā)射管的控制功能,要求能夠?qū)W習(xí)遙控器的紅外碼,并能發(fā)射相應(yīng)的編碼,實(shí)現(xiàn)紅外遙控器的功能。

      2. 增強(qiáng)顯示:實(shí)現(xiàn)光魔方的功能,要求搭建不少于8*8*4單元的光魔方,能夠動(dòng)態(tài)顯示字符。

      3. 空氣質(zhì)量監(jiān)測:實(shí)現(xiàn)對(duì)室外空氣PM2.5濃度測量,要求能夠?qū)崟r(shí)讀取PM2.5模塊數(shù)據(jù)計(jì)算濃度,并將結(jié)果顯示在屏幕中,或者通過無線方式發(fā)送到PC機(jī)中顯示,或者超過設(shè)定值啟動(dòng)電機(jī)模擬開關(guān)窗。

      4. 入侵在線報(bào)警:要求通過采集遠(yuǎn)紅外傳感器數(shù)據(jù),自動(dòng)觸發(fā)相機(jī)模塊抓拍,照片發(fā)至PC或網(wǎng)絡(luò)中。

      5. 穿戴式設(shè)備控制:對(duì)陀螺儀傳感器的數(shù)據(jù)采集和處理,要求能根據(jù)采集到的數(shù)據(jù)計(jì)算出傳感器加速度值,識(shí)別基本動(dòng)作觸發(fā)繼電器開合,模擬啟動(dòng)外部設(shè)備。

      6. 智能臺(tái)燈:根據(jù)環(huán)境光強(qiáng)度自動(dòng)調(diào)節(jié)LED亮度,通過光敏元器件采集環(huán)境亮度,通過PWM方式控制LED燈亮度。定時(shí)自動(dòng)開燈,設(shè)定開燈時(shí)間,到時(shí)間由暗逐漸變亮。通過門控檢測夜晚有人回家時(shí)自動(dòng)開啟LED燈等功能。

      7. 火災(zāi)在線探測:采集煙感/異味傳感器數(shù)據(jù),并進(jìn)行判斷有無火情,繼而控制繼電器動(dòng)作同時(shí)通過無線發(fā)送信息到PC或網(wǎng)絡(luò)中。

      8. 智能門磁:設(shè)計(jì)門磁開關(guān),一端安裝門上,另一端安裝在門框。讀取霍爾傳感器輸出,確定門開合狀態(tài),并在門狀態(tài)變化時(shí)發(fā)送提示信息到PC或者網(wǎng)絡(luò)中。

      9. 智能窗簾:根據(jù)光強(qiáng)變化、夜晚休息、人離開等多種條件自動(dòng)開閉窗簾??梢栽O(shè)計(jì)導(dǎo)軌及電機(jī)控制機(jī)構(gòu)。10. 智能信息提示:每天早上自動(dòng)搜集門戶網(wǎng)站頭條新聞、當(dāng)天天氣情況等,武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      滾動(dòng)顯示在屏幕中。也可以將用戶設(shè)定的提醒信息從PC機(jī)推送至單片機(jī)系統(tǒng)顯示;也可以若置于門背,開門時(shí)顯示重要提示信息。

      上述無線方式包括WIFI,藍(lán)牙,Zigbee,433M等多種

      第二章硬件系統(tǒng)設(shè)計(jì)

      2.1單片機(jī)最小系統(tǒng) 2.1.1 STC89C52的介紹

      STC89C52是一種帶8K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器的低電壓,高性能COMOS8的微處理器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲(chǔ)器制作技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。其引腳圖如下圖所示。

      圖2.1 STC89C52單片機(jī)

      STC89C52RC引腳功能說明:

      VCC(40引腳):電源電壓 VSS(20引腳):接地

      P0端口(P0.0~P0.7,39~32引腳):P0口是一個(gè)漏極開路的8位雙向I/O口。

      P1端口(P1.0~P1.7,1~8引腳):P1口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口。

      P2端口(P2.0~P2.7,21~28引腳):P2口的基本功能和P1端口相同。P3端口(P3.0~P3.7,10~17引腳):P3口的基本功能和P1端口相同。

      ALE/(30引腳):地址鎖存控制信號(hào)(ALE)是訪問外部程序存儲(chǔ)器時(shí),鎖存低8位地址的輸出脈沖。

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      2.1.2 stc89c52系列單片機(jī)最小系統(tǒng)的介紹

      單片機(jī)最小系統(tǒng)是單片機(jī)工作的最簡單電路,它由單片機(jī)、電源、晶體振蕩器、復(fù)位電路等構(gòu)成。它是本系統(tǒng)的處理單元也是控制單元,負(fù)責(zé)處理信號(hào)、外設(shè)的接口與控制,同時(shí)它也是所有軟件的載體。對(duì)52單片機(jī)來說,最小系統(tǒng)一般應(yīng)該包括:單片機(jī)、時(shí)鐘電路、復(fù)位電路、輸入/ 輸出設(shè)備等。52單片機(jī)最小系統(tǒng)見下圖。

      圖2.1.2 STC89C52單片機(jī)最小系統(tǒng)

      (1)時(shí)鐘電路:

      XTAL1(19 腳):芯片內(nèi)部振蕩電路輸入端。

      XTAL2(18 腳):芯片內(nèi)部振蕩電路輸出端。

      XTAL1 和XTAL2 是獨(dú)立的輸入和輸出反相放大器,它們可以被配置為使用石英晶振的片內(nèi)振蕩器,或者是器件直接由外部時(shí)鐘驅(qū)動(dòng)。圖2-2 中采用的是內(nèi)時(shí)鐘模式,即采用利用芯片內(nèi)部的振蕩電路,在XTAL1、XTAL2 的引腳上外接定時(shí)元件(一個(gè)石英晶體和兩個(gè)電容),內(nèi)部振蕩器便能產(chǎn)生自激振蕩。

      (2)復(fù)位電路:

      在單片機(jī)系統(tǒng)中,復(fù)位電路是非常關(guān)鍵的,當(dāng)程序跑飛(運(yùn)行不正常)或死機(jī)(停止運(yùn)行)時(shí),就需要進(jìn)行復(fù)位。

      5l 系列單片機(jī)的復(fù)位引腳RST(第9 管腳)出現(xiàn)2個(gè)機(jī)器周期以上的高電平時(shí),單片機(jī)就執(zhí)行復(fù)位操作。如果RST 持續(xù)為高電平,單片機(jī)就處于循環(huán)復(fù)位狀態(tài)。

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      2.2矩陣鍵盤模塊

      矩陣鍵盤的工作原理是:從0行開始,順序行掃描,即該行輸出為0。每掃描一行,讀入列線數(shù)據(jù),從0開始,列檢查,找該行輸出為0的列,若無,則順序掃描下一行,并檢查其各列;若找到某列線為0,則該列與檢查行交叉的按鍵為被按下的鍵。從0行0列開始,順序?qū)存I編號(hào),就可以按掃描的值得到按鍵的值。此外還要消除按鍵在閉合或斷開時(shí)的抖動(dòng)。消除抖動(dòng)的方法可采用消抖電路(RS觸發(fā)器閂鎖電路硬件消除抖動(dòng)),也克采用延時(shí)方式軟件消除抖動(dòng)(延時(shí)后再重讀,以跳過抖動(dòng)期)。在矩陣鍵盤中,通常采用軟件消除抖動(dòng)。

      本設(shè)計(jì)中主要使用了獨(dú)立鍵盤,故電路圖中簡要的畫出了4*4的矩陣鍵盤,其電路原理圖如圖2.2所示

      圖2.2矩陣鍵盤

      2.3數(shù)碼管顯示單元

      本次設(shè)計(jì)的顯示單元是由4個(gè)共陰的7段LED數(shù)碼管組成的顯示電路。原理電路圖見圖2.3所示:

      圖2.3數(shù)碼管顯示單元

      如上圖所示,4個(gè)數(shù)碼管的段選和位選分別由單片機(jī)的不同IO口控制,此圖用

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      了一個(gè)鎖存器74HC573來實(shí)現(xiàn)數(shù)碼管的段選,而其位選則由單片機(jī)的其他IO口控制。

      2.4LCD1602液晶顯示電路

      本次課程設(shè)計(jì)采用的液晶顯示屏是LCD1602,其具有體積小、功耗小、顯示操作簡單LCD1602主要技術(shù)參數(shù): 顯示容量:16×2個(gè)字符 芯片工作電壓:4.5—5.5V 工作電流:2.0mA(5.0V)模塊最佳工作電壓:5.0V

      字符尺寸:2.95×4.35(W×H)mm

      LCD1602采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表所示:

      引腳功能說明: 第1腳:VSS為地電源。第2腳:VDD接5V正電源。

      第3腳:VL為液晶顯示器對(duì)比度調(diào)整端,接正電源時(shí)對(duì)比度最弱,接地時(shí)對(duì)比度最高,對(duì)比度過高時(shí)會(huì)產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對(duì)比度。

      第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。

      第5腳:R/W為讀寫信號(hào)線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號(hào),當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。第15腳:背光源正極。第16腳:背光源負(fù)極。其原理圖如圖2.4所示:

      圖2.4LCD1602接口電路

      2.5蜂鳴器單元

      本次課程設(shè)計(jì)采用的蜂鳴器為電磁式蜂鳴,其采用直流供電,其可分為兩種類型:有源式和無源式。本次課程設(shè)計(jì)采用的為無源蜂鳴。其原理圖如圖2.5所示:

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      圖2.5蜂鳴器

      第三章 軟件設(shè)計(jì)

      3.1數(shù)碼管實(shí)驗(yàn)

      3.1.1循環(huán)數(shù)碼管顯示0—F程序設(shè)計(jì)結(jié)構(gòu)圖:

      實(shí)驗(yàn)要求:能循環(huán)數(shù)碼管顯示0—F

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      圖3.1.1循環(huán)數(shù)碼管顯示0—F

      3.1.2 59秒倒計(jì)數(shù)流程圖

      實(shí)驗(yàn)要求:能用定時(shí)器循環(huán)顯示59秒倒計(jì)時(shí)。

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      圖3.1.2 數(shù)碼管59秒倒計(jì)數(shù)

      3.2 矩陣鍵盤流程圖

      實(shí)驗(yàn)要求:實(shí)現(xiàn)按鍵檢測能用按鍵控制數(shù)碼管加減,控制定時(shí)器的啟動(dòng)和停止 0

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      圖3.2矩陣鍵盤

      3.3 LCD1602滾動(dòng)顯示年月日時(shí)分秒

      實(shí)驗(yàn)要求:要求用1602滾動(dòng)顯示年月日時(shí)分秒,并可發(fā)送到上位機(jī),上位機(jī)可修改1602上顯示的時(shí)間1

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      3.4 AD轉(zhuǎn)換,實(shí)驗(yàn)要求:實(shí)現(xiàn)AD采集電阻的電壓,并把采集到的數(shù)據(jù)通過串口傳送給上位機(jī)。2

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      3.5家電遙控器

      實(shí)驗(yàn)要求:實(shí)現(xiàn)對(duì)紅外接收管和發(fā)射管的控制功能,要求能夠?qū)W習(xí)遙控器的紅外碼,并能發(fā)射相應(yīng)的編碼,實(shí)現(xiàn)紅外遙控器的功能。

      圖3.5家電遙控器接收紅外數(shù)據(jù)3

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      第四章調(diào)試結(jié)果分析

      4.1數(shù)碼管調(diào)試及分析

      4.1.1循環(huán)數(shù)碼管顯示0—F 數(shù)碼管位選接單片機(jī)的P2口,段選接+5V電壓。當(dāng)用KEIL軟件把程序編號(hào)以后點(diǎn)擊編譯按鈕,程序便編譯好了,然后通過數(shù)據(jù)線把生成的HEX文下載進(jìn)單片機(jī),其實(shí)驗(yàn)現(xiàn)象如圖4.1.1所示為數(shù)碼管循環(huán)顯示的部分圖片。

      4.1.1數(shù)碼管循環(huán)顯示 由其現(xiàn)象可知其程序調(diào)試成功。4

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      4.1.2數(shù)碼管59秒倒計(jì)數(shù)

      數(shù)碼管的段選端接單片機(jī)的P2口,四個(gè)位選端接單片機(jī)P0端口,當(dāng)編譯好后,并把線路連接好后,數(shù)碼管變開始從60開始每隔一秒倒計(jì)數(shù),當(dāng)記到0時(shí),數(shù)碼管的值便又變成60,如此開始循環(huán)。其部分實(shí)驗(yàn)現(xiàn)象圖如圖4.1.2所示:

      圖4.2.1數(shù)碼管59秒倒計(jì)數(shù)

      4.2矩陣鍵盤

      矩陣鍵盤的接口接單片機(jī)的P1口,數(shù)碼管的段選端接單片機(jī)的P2口,四個(gè)位選端接單片機(jī)P0端口。當(dāng)開始運(yùn)行程序時(shí)矩陣鍵盤從0行開始,順序行掃描,即該行輸出為0。每掃描一行,讀入列線數(shù)據(jù),從0開始,列檢查,找該行輸出為0的列,若無,則順序掃描下一行,并檢查其各列;若找到某列線為0,則該列與檢查行交叉的按鍵為被按下的鍵。通過賦予相應(yīng)按鍵++或——或停止數(shù)碼管中斷的功能并對(duì)相應(yīng)按鍵進(jìn)行編程即可實(shí)現(xiàn)數(shù)碼管++、——、讓定時(shí)器停止的功能。其實(shí)驗(yàn)現(xiàn)像如下:

      圖4.2矩陣鍵盤控制數(shù)碼管加數(shù)字加減及定時(shí)器開啟及停止 5

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      4.3 LCD1602滾動(dòng)顯示年月日時(shí)分秒

      本次設(shè)計(jì)的程序的LCD數(shù)據(jù)端接單片機(jī)的P0口,E,RW,RS分別接P3.7,P3.6,P3.5。矩陣鍵盤接單片機(jī)的P1口。當(dāng)程序正確運(yùn)行時(shí)應(yīng)該可以在LCD1602上看到年月日,和時(shí)分秒的時(shí)間,且此時(shí)正在計(jì)時(shí)。其實(shí)驗(yàn)現(xiàn)象如下圖所示:

      圖4.3LCD1602滾動(dòng)顯示年月日時(shí)分秒

      由實(shí)驗(yàn)現(xiàn)象可知程序調(diào)試成功。

      4.4 AD轉(zhuǎn)換

      本次實(shí)驗(yàn)采用的AD是ADC0832,它是一款8位AD。其各控制引腳接線如下Cs= P1^0;Clk= P1^1;Di=P1^7;Do= P1^7;其通道1接可調(diào)電阻,通道應(yīng)為不用顧不接。當(dāng)程序正確運(yùn)行時(shí)可以在LCD1602上看到通道1所測試的電壓值。并可以通過串口調(diào)試助手看到單片機(jī)發(fā)送到串口調(diào)試助手的電壓值。其實(shí)驗(yàn)現(xiàn)象如圖4.4所示: 6

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      圖4.4 AD轉(zhuǎn)換

      由以上實(shí)驗(yàn)現(xiàn)象可知和預(yù)測的功能相同顧本次實(shí)驗(yàn)調(diào)試成功。

      4.5家電遙控器

      本次遙控器實(shí)驗(yàn)采用的是NEC編碼方式對(duì)遙控器的鍵值進(jìn)行編碼,以及對(duì)遙控器發(fā)送的紅外線進(jìn)行解碼。其編碼圖如圖4.5所示

      圖4.5 紅外編碼時(shí)序圖

      由次時(shí)序圖可見,本次紅外編碼成功。

      第五章小結(jié)

      經(jīng)過這次為期一周的單片機(jī)實(shí)訓(xùn),讓我受益匪淺。通過這次實(shí)訓(xùn),使我不僅對(duì)單片機(jī)的各個(gè)模塊更加的了解了,而且加深了我對(duì)于單片機(jī)這門課程知識(shí)的理解。這次實(shí)訓(xùn)不僅提高了我的編程能力,同時(shí)也提高了我的動(dòng)手能力。在剛開始拿到單片機(jī)最小系統(tǒng)板的硬件時(shí),面對(duì)這那些細(xì)如針眼芯片引腳和及其微小的貼片電阻,我感到了十分的無助,然而通過學(xué)長的演示和詢問其他同學(xué)焊接方法,漸漸的我逐漸掌握了方法。焊接貼片電阻和芯片的速度也逐漸變快,然而當(dāng)7

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      焊完芯片和貼片電阻后卻發(fā)現(xiàn)下載不來程序,經(jīng)過我用萬用表對(duì)每個(gè)部件的電位進(jìn)行檢查后發(fā)現(xiàn),原來焊接的下載芯片的引腳有些部位是虛焊,因而下不進(jìn)程序,當(dāng)我對(duì)虛焊部位重新焊了一遍后,單片機(jī)才可以下載程序。然而在后來的編程過程中我也遇到了許多小問題,讓我調(diào)了很久的程序,比如把變量的的類型定義錯(cuò)誤,該定義為全局變量的變量我定義成了局部變量等等,總之這一次實(shí)訓(xùn)讓我受益匪淺,使我認(rèn)識(shí)到了自身知識(shí)的匱乏,督促我去提升自己。

      參考文獻(xiàn):

      [1] 李群芳,張士軍等.《單片微型計(jì)算機(jī)與接口技術(shù)》(第三版).電子工業(yè)出版社.出版年份:2008年。

      [2] 楊路明《.C語言程序設(shè)計(jì)教程》.北京郵電大學(xué)出版社.出版年份:2005年。

      [4] 趙亮,侯國銳.《單片機(jī)C語言編程與實(shí)例》.人民郵電出版社.出版年份:2007年。

      [5] 彭虎, 周佩玲, 傅忠謙.《單片機(jī)原理與接口技術(shù)》(第二版).電子工業(yè)出版社.出版年份:2008年。

      [5] 郭天祥,《新概念51單片機(jī)C語言教程》,電子工業(yè)出版社,出版年份:2010年.8

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      實(shí)驗(yàn)5家電遙控器程序:

      紅外編碼程序:

      #include “reg52.h” #define uchar unsigned char #define uint unsigned int uchar key,key1,key2,key3,key4;sbit IR_OUT=P1^0;void delay_ms(uint ms){

      uint i,j;

      for(i=0;i<120;i++)

      {

      for(j=0;j

      } } //T1 13us產(chǎn)生一次中斷 用于產(chǎn)生38K載波((1/26)*1000000 //T0 方式1 16位 用于定時(shí)

      void Init_Timer(void)//初始化定時(shí)器1方式2 {

      TMOD=0x21;//T0 mode 1 ,T1 mode 2(8位自動(dòng)重裝初值)

      TH1=256-(1000*11.0592/38.0/12)/2+0.5;//(0.5為誤差)

      //特殊

      TL1=256-(1000*11.0592/38.0/12)/2+0.5;

      ET1=1;//開定時(shí)器中斷1

      EA=1;//開總中斷 }

      //發(fā)送引導(dǎo)碼(9ms)發(fā)送方:4.5ms高電平+4.5ms低電平.void Send_Start_Bit(void)//TR1的值=發(fā)送的電平{ //4.5ms 1

      TH0=(65536-8295)/256;

      TL0=(65536-8295)%256;

      TR0=1;// 啟動(dòng)定時(shí)器0;

      TR1=1;

      while(!TF0);

      TR1=0;

      TF0=0;//定時(shí)器0溢出標(biāo)志位。

      TR0=0;//關(guān)閉定時(shí)器0.武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      IR_OUT=0;

      //4.5ms 0

      TH0=(65536-4146)/256;

      TL0=(65536-4146)%256;

      TR0=1;

      TR1=0;

      while(!TF0);//等待定時(shí)器0產(chǎn)生中斷。

      TR1=0;TF0=0;TR0=0;

      IR_OUT=0;}

      //發(fā)送二進(jìn)制0(0.565us載波+0.565us空閑)void Send_Bit_0(void){ //0.565us 1 載波

      TH0=(65536-521)/256;

      TL0=(65536-521)%256;TR0=1;TR1=1;

      while(!TF0);

      TR1=0;TF0=0;TR0=0;

      IR_OUT=0;//0.565us 0 空閑

      TH0=(65536-521)/256;

      TL0=(65536-521)%256;TR0=1;TR1=0;

      while(!TF0);

      TR1=0;TF0=0;TR0=0;

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      IR_OUT=0;}

      //發(fā)送二進(jìn)制 1(0.565us載波+1.685ms空閑)void Send_Bit_1(void){ //0.565us 1 載波

      TH0=(65536-521)/256;

      TL0=(65536-521)%256;TR0=1;TR1=1;

      while(!TF0);

      TR1=0;TF0=0;TR0=0;

      IR_OUT=0;//1.685ms 0 空閑

      TH0=(65536-1563)/256;

      TL0=(65536-1563)%256;TR0=1;TR1=0;

      while(!TF0);

      TR1=0;TF0=0;TR0=0;

      IR_OUT=0;/*****************************************/ }

      void Send_over(void)//發(fā)送一個(gè)結(jié)束碼,因?yàn)樽詈笠粋€(gè)位只有遇到下降沿才能讀?。òl(fā)射端的上升沿){ //0.565us 1

      //小于0.5us 接收端很難識(shí)別到

      TH0=(65536-521)/256;

      TL0=(65536-521)%256;TR0=1;TR1=1;

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      while(!TF0);

      TR1=0;TF0=0;TR0=0;

      IR_OUT=0;//0.565us 0 TH0=(65536-521)/256;

      TL0=(65536-521)%256;TR0=1;TR1=0;

      while(!TF0);

      TR1=0;TF0=0;TR0=0;

      IR_OUT=0;} //發(fā)送一字節(jié) 8位 void Send_Char(){ unsigned char i,j1,j2,Key3,Key33,Key4,Key44;j1=0xBE;//用戶碼

      j2=0x41;//用戶反碼

      Key3=0xDE;//key1 鍵值碼

      Key33=0x20;//key1 鍵值反碼

      Key4=0x30;//key2 鍵值碼

      Key44=0xc0;//key2 鍵值反碼

      Send_Start_Bit();//發(fā)送引導(dǎo)碼

      Send_Bit_0();//

      for(i=0;i<8;i++){

      if(j1&0x80)

      Send_Bit_0();

      else

      Send_Bit_1();j1=j1<<1;

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      //先發(fā)射低位

      }

      j2=0;for(i=0;i<8;i++){

      if(j2&0x80)

      Send_Bit_0();

      else

      Send_Bit_1();

      j2=j2<<1;

      //先發(fā)射低位

      }

      for(i=0;i<8;i++)

      {

      if(key3&0x80)

      Send_Bit_0();

      else

      Send_Bit_1();

      key3=key3<<1;

      }

      for(i=0;i<8;i++)

      {

      if(Key33&0x80)

      Send_Bit_0();

      else

      Send_Bit_1();

      Key33=Key33<<1;

      //先發(fā)射低位

      }

      //}

      for(i=0;i<8;i++)

      {

      if(Key4&0x80)

      Send_Bit_0();

      else

      Send_Bit_1();

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      Key4=Key4<<1;

      }

      for(i=0;i<8;i++)

      {

      if(Key44&0x80)

      Send_Bit_0();

      else

      Send_Bit_1();

      Key44=Key44<<1;

      //先發(fā)射低位

      }

      //} Send_over();//結(jié)束符

      }

      void T1_ISR(void)interrupt 3 { IR_OUT=!IR_OUT;}

      void main(void){ Init_Timer();while(1){

      Send_Char();//發(fā)送8位數(shù)據(jù)

      delay_ms(1000);} }

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      紅外解碼程序:

      #include“reg52.h” #define LCD P0 #define uchar unsigned char #define uint unsigned int sbit IR_INPUT = P3^2;//紅外接收引腳 sbit E=P2^7;

      sbit RW=P2^5;sbit RS=P2^6;sbit int0=P3^2;uchar code tab1[11]={“key value:”};uchar code tab2[13]={“

      -H”};uchar hongwaivalue[6];uchar Time;void IrInit();

      void delay(uint x)

      //10us { unsigned char i;while(x--){

      for(i = 0;i<10;i++)

      {} } }

      void write_com(uchar cmd)//寫指令函數(shù) { RS=0;RW=0;LCD=cmd;delay(1);E=1;delay(5);

      E=0;} void write_data(uchar dat)//寫數(shù)據(jù) { RS=1;RW=0;LCD=dat;delay(1);E=1;delay(10);

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      E=0;}

      void lcd_init(){ write_com(0x38);write_com(0x0c);

      write_com(0x06);write_com(0x01);write_com(0x80);}

      void hongwai_init()//7./* 初始化紅外接收功能 */ {

      IT0=1;//下降沿觸發(fā)

      EX0=1;//打開中斷0允許

      EA=1;//打開總中

      int0=1;//初始化端口 }

      void lcd_display(){

      hongwaivalue[4]=hongwaivalue[2]>>4;

      //高位

      hongwaivalue[5]=hongwaivalue[2]&0x0f;//低位

      if(hongwaivalue[4]>9)

      {

      write_com(0xc0+0x09);

      //設(shè)置顯示位置

      write_data(0x37+hongwaivalue[4]);//將數(shù)值轉(zhuǎn)換為該顯示的ASCII碼

      }

      else

      {

      write_com(0xc0+0x09);

      write_data(hongwaivalue[4]+0x30);//將數(shù)值轉(zhuǎn)換為該顯示的ASCII碼

      }

      if(hongwaivalue[5]>9)

      {

      write_com(0xc0+0x0a);

      write_data(hongwaivalue[5]+0x37);//將數(shù)值轉(zhuǎn)換為該顯示的ASCII碼

      }

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      else

      {

      write_com(0xc0+0x0a);

      write_data(hongwaivalue[5]+0x30);//將數(shù)值轉(zhuǎn)換為該顯示的ASCII碼

      } }

      void main(){

      uchar i;

      hongwai_init();

      lcd_init();

      write_com(0x80);

      for(i=0;i<10;i++)

      {

      write_data(tab1[i]);

      }

      write_com(0x80+0x40);

      for(i=0;i<12;i++)

      {

      write_data(tab2[i]);

      }

      while(1)

      {

      lcd_display();

      } }

      void Read()interrupt 0 { uchar j,k;uint n;Time=0;

      delay(70);

      if(int0==0)//確認(rèn)是否真的接收到正確的信號(hào)

      {

      n=1000;

      //1000*10us=10ms,超過說明接收到錯(cuò)誤的信號(hào)

      //當(dāng)兩個(gè)條件都為真則循環(huán),如果有一個(gè)條件為假的時(shí)候跳出循環(huán),免

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      //程序出錯(cuò)的時(shí)侯,程序死在這里

      while((int0==0)&&(n>0))//等待前面9ms的載波低電平過去

      {

      delay(1);//10us

      n--;

      }

      鍵碼反碼)

      過去

      if(int0==1)

      //如果正確等到9ms低電平{ n=500;while((int0==1)&&(n>0))//等待4.5ms的空閑起始高電平過去

      {

      delay(1);//10us

      n--;} for(k=0;k<4;k++)//共有4組數(shù)據(jù)(用戶碼、用戶反碼、鍵碼、{

      for(j=0;j<8;j++)//接收一組數(shù)據(jù)

      {

      n=60;

      while((int0==0)&&(n>0))//等待信號(hào)前面的560us低電平

      {

      delay(1);//10us

      n--;

      }

      n=500;

      while((int0==1)&&(n>0))//計(jì)算高電平的時(shí)間長度。

      {

      delay(1);

      Time++;

      n--;

      if(Time>30)

      {

      EX0=1;

      return;

      }

      }

      hongwaivalue[k]>>=1;//k表示第幾組數(shù)據(jù)

      if(Time>=8)

      //如果高電平出現(xiàn)大于565us,那么

      武漢理工大學(xué)單片機(jī)實(shí)訓(xùn)報(bào)告

      是1

      {

      hongwaivalue[k]|=0x80;

      }

      Time=0;//用完時(shí)間要重新賦值

      } }

      } } } if(hongwaivalue[2]!=~hongwaivalue[3]){ return;}

      第二篇:單片機(jī)課程設(shè)計(jì)

      設(shè)計(jì)題目: 單片機(jī)課程設(shè)計(jì)

      學(xué)生姓名:

      學(xué)

      院: 電氣與信息工程學(xué)院

      級(jí): 電子111班 指導(dǎo)教師:

      日 期: 2014年9月20日

      一、課程設(shè)計(jì)目的:

      了解電子元器件的功能與原理,掌握單片機(jī)的結(jié)構(gòu)和原理,學(xué)會(huì)使用單片機(jī)應(yīng)用開發(fā)技術(shù)的相關(guān)軟件如 keill、STC_ISP_V394等,能夠使用c語言的語言編程簡單的功能。

      二、設(shè)計(jì)的思想:

      利用所提供的單片機(jī)和開發(fā)板的原理圖用keill軟件編程程序以實(shí)現(xiàn)一些功能。然后用STC_ISP_V394.exe軟件將編譯完全正確的程序生成的hxe文件下載到開發(fā)板上,再調(diào)試編譯的程序能否實(shí)現(xiàn)其所設(shè)計(jì)的功能。

      1、對(duì)蜂鳴器的了解:

      蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,它由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼組成,接通電源后,振蕩器產(chǎn)生的音頻信號(hào)由電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性的振動(dòng)發(fā)聲。

      2、設(shè)計(jì):

      我們所使用的開發(fā)板實(shí)物圖如圖一,單片機(jī)對(duì)右上角蜂鳴器的控制是加入三極管接入vcc,單片機(jī)的第22引腳和負(fù)極上,以此來控制蜂鳴器工作。單片機(jī)我們選擇STC89C52RC+1602液晶來實(shí)現(xiàn)對(duì)蜂鳴器的控制及顯示所需要的信息。

      圖一 調(diào)試說明:

      首先用Keil軟件創(chuàng)建一個(gè)工程,將程序源代碼輸入并編譯生成單片可執(zhí)行的.hex文件。其次,打開單片機(jī)實(shí)踐板的電源,接好串口線,用STC-ISP燒錄軟件,將.hex文件燒錄入單片機(jī)中。程序下載完畢后,單片機(jī)會(huì)自動(dòng)執(zhí)行程序功能。最后,觀察程序功能的執(zhí)行情況,看是否達(dá)到了設(shè)計(jì)要求。

      如果單片機(jī)實(shí)踐板硬件電路的執(zhí)行結(jié)果與設(shè)計(jì)結(jié)果一致,則說明設(shè)計(jì)過程及流程沒有問題,完全符合設(shè)計(jì)要求。否則,先檢查單片機(jī)實(shí)踐板的硬件電路是否完好,是否有斷點(diǎn)、漏焊、虛焊以及元器件是否完好等情況,排除故障重新連接后重新進(jìn)行調(diào)試。如果仍然無法正

      常實(shí)現(xiàn),則說明程序編寫有誤,需要認(rèn)真檢查程序流程,然后經(jīng)過反復(fù)的修改與調(diào)試排除故障,實(shí)現(xiàn)設(shè)計(jì)要求的各項(xiàng)功能。編譯和燒寫該程序到單片機(jī):

      (1)用Keil編譯上面的代碼,并設(shè)置產(chǎn)生16進(jìn)制代碼文件*.hex.(2)用專用下載線,連接好實(shí)驗(yàn)板和電腦串口(DB9)(2)運(yùn)行hex文件燒寫軟件STC_ISP_V394.exe

      選單片機(jī)的型號(hào),并打開編譯產(chǎn)生好的hex文件

      點(diǎn)擊下載,給開發(fā)板上電。

      3、實(shí)現(xiàn)的功能:使用單片機(jī)將歌曲《八月桂花》的調(diào)子通過蜂鳴器播放出來,用1602液晶將想要表達(dá)的信息有步驟地顯示在液晶顯示屏上,并且調(diào)子與顯示內(nèi)容可以任意通過修改的程序燒錄到單片機(jī)內(nèi),實(shí)現(xiàn)設(shè)計(jì)產(chǎn)品的使用性與靈活性。

      三、實(shí)驗(yàn)程序:

      /************************************************************************

      [主題] C51音樂程序《八月桂花》

      [功能]

      通過單片機(jī)演奏音樂,顯示一些內(nèi)容

      /**********************************************************************/

      #include

      #include

      //本例采用89C52, 晶振為11.0592MHZ

      //關(guān)于如何編制音樂代碼, 其實(shí)十分簡單,各位可以看以下代碼.//頻率常數(shù)即音樂術(shù)語中的音調(diào),而節(jié)拍常數(shù)即音樂術(shù)語中的多少拍;

      //所以拿出譜子, 試探編吧!

      unsigned char i=0;sbit Beep = P2^7;

      unsigned char p,m;

      //m為頻率常數(shù)變量

      unsigned char n=0;//n為節(jié)拍常數(shù)變量

      unsigned char code music_tab[] ={

      0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數(shù), 節(jié)拍常數(shù), 頻率常數(shù), 節(jié)拍常數(shù),0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20, 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B, 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C , 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00

      };

      void int0()interrupt 1

      //采用中斷0 控制節(jié)拍

      { TH0=0xd8;

      TL0=0xef;

      n--;

      }

      void delay(unsigned char m)

      //控制頻率延時(shí)

      {

      unsigned i=3*m;

      while(--i);

      }

      void delayms(unsigned char a)//豪秒延時(shí)子程序

      {

      while(--a);

      //采用while(--a)不要采用while(a--);各位可編譯一下看看匯編結(jié)果就知道了!

      }

      typedef unsigned char BYTE;typedef bit BOOL;

      sbit LCD_RS = P2^0;

      sbit LCD_RW = P2^1;sbit LCD_EP = P2^2;

      BYTE code dis1[] = {“

      WLCOME TO

      ”};BYTE code dis2[] = {“

      DanPianJi ”};BYTE code dis3[] = {“

      111iZnaiD

      ”};BYTE code dis4[] = {“

      eiXeiX ”};

      delays(int ms){

      // 延時(shí)子程序 int i;while(ms--){

      for(i = 0;i< 250;i++)

      {

      _nop_();

      _nop_();

      _nop_();

      _nop_();

      } } }

      BOOL lcd_bz(){

      // 測試LCD忙碌狀態(tài) BOOL result;LCD_RS = 0;LCD_RW = 1;LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();result =(BOOL)(P0 & 0x80);LCD_EP = 0;return result;}

      lcd_wcmd(BYTE cmd){

      while(lcd_bz());LCD_RS = 0;LCD_RW = 0;LCD_EP = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;

      }

      lcd_pos(BYTE pos){

      lcd_wcmd(pos | 0x80);

      // 寫入指令數(shù)據(jù)到LCD //設(shè)定顯示位置

      }

      lcd_wdat(BYTE dat)

      {

      //寫入字符顯示數(shù)據(jù)到LCD while(lcd_bz());LCD_RS = 1;LCD_RW = 0;LCD_EP = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EP = 1;_nop_();_nop_();_nop_();_nop_();LCD_EP = 0;}

      lcd_init(){

      lcd_wcmd(0x38);

      delays(1);lcd_wcmd(0x0c);

      delays(1);lcd_wcmd(0x06);

      delays(1);lcd_wcmd(0x01);

      delays(1);}

      void main()

      {

      BYTE j;

      lcd_init();

      delays(10);

      //LCD初始化設(shè)定

      //16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)//顯示開,關(guān)光標(biāo) //移動(dòng)光標(biāo) //清除LCD的顯示內(nèi)容

      // 初始化LCD

      lcd_wcmd(0x06);

      //向右移動(dòng)光標(biāo)

      lcd_pos(0);

      //設(shè)置顯示位置為第一行的第1個(gè)字符

      j = 0;

      while(dis1[ j ]!= '