久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

單片機課程設計

時間:2019-05-15 09:40:16下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《單片機課程設計》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《單片機課程設計》。

第一篇:單片機課程設計

武漢理工大學單片機實訓報告

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

武漢理工大學單片機實訓報告

第一章緒論

1.1概述

隨著我國工業技術和電子技術的發展和進步,自動控制技術也已經得到了極大的普及和應用,而這些自動控制技術的核心技術就是單片微型計算機,簡稱單片機。它以其高可靠性、高性價比、低電壓、低功耗等一系列優點,被廣泛應用于控制系統、數據采集等領域。而51單片機系列以其超高的性價比深受廣大電子愛好者和開發者以及大學生群體的歡迎。故而本次課程設計采用STC89C52單片機。

1.2課程設計任務

必做項目(這是每個學生必做的任務):

1. 基本系統:在51單片機開發系統PCB電路板上完成電子元器件的焊接、調試、程序下載,并實現數碼管顯示、矩陣鍵盤掃描、中斷程序、定時器程序、串口通訊等基本功能; 2. 顯示功能:焊接電路并實現對1602液晶屏的顯示功能,要求能滾動顯示字符;

3. 輸出控制:焊接電路并實現對繼電器的控制功能;

4. 數據采集:焊接電路并實現對AD0832的數據采集功能; 選做項目(以下任選一):

1. 家電遙控器:實現對紅外接收管和發射管的控制功能,要求能夠學習遙控器的紅外碼,并能發射相應的編碼,實現紅外遙控器的功能。

2. 增強顯示:實現光魔方的功能,要求搭建不少于8*8*4單元的光魔方,能夠動態顯示字符。

3. 空氣質量監測:實現對室外空氣PM2.5濃度測量,要求能夠實時讀取PM2.5模塊數據計算濃度,并將結果顯示在屏幕中,或者通過無線方式發送到PC機中顯示,或者超過設定值啟動電機模擬開關窗。

4. 入侵在線報警:要求通過采集遠紅外傳感器數據,自動觸發相機模塊抓拍,照片發至PC或網絡中。

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

6. 智能臺燈:根據環境光強度自動調節LED亮度,通過光敏元器件采集環境亮度,通過PWM方式控制LED燈亮度。定時自動開燈,設定開燈時間,到時間由暗逐漸變亮。通過門控檢測夜晚有人回家時自動開啟LED燈等功能。

7. 火災在線探測:采集煙感/異味傳感器數據,并進行判斷有無火情,繼而控制繼電器動作同時通過無線發送信息到PC或網絡中。

8. 智能門磁:設計門磁開關,一端安裝門上,另一端安裝在門框。讀取霍爾傳感器輸出,確定門開合狀態,并在門狀態變化時發送提示信息到PC或者網絡中。

9. 智能窗簾:根據光強變化、夜晚休息、人離開等多種條件自動開閉窗簾。可以設計導軌及電機控制機構。10. 智能信息提示:每天早上自動搜集門戶網站頭條新聞、當天天氣情況等,武漢理工大學單片機實訓報告

滾動顯示在屏幕中。也可以將用戶設定的提醒信息從PC機推送至單片機系統顯示;也可以若置于門背,開門時顯示重要提示信息。

上述無線方式包括WIFI,藍牙,Zigbee,433M等多種

第二章硬件系統設計

2.1單片機最小系統 2.1.1 STC89C52的介紹

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

圖2.1 STC89C52單片機

STC89C52RC引腳功能說明:

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

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

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

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

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

武漢理工大學單片機實訓報告

2.1.2 stc89c52系列單片機最小系統的介紹

單片機最小系統是單片機工作的最簡單電路,它由單片機、電源、晶體振蕩器、復位電路等構成。它是本系統的處理單元也是控制單元,負責處理信號、外設的接口與控制,同時它也是所有軟件的載體。對52單片機來說,最小系統一般應該包括:單片機、時鐘電路、復位電路、輸入/ 輸出設備等。52單片機最小系統見下圖。

圖2.1.2 STC89C52單片機最小系統

(1)時鐘電路:

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

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

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

(2)復位電路:

在單片機系統中,復位電路是非常關鍵的,當程序跑飛(運行不正常)或死機(停止運行)時,就需要進行復位。

5l 系列單片機的復位引腳RST(第9 管腳)出現2個機器周期以上的高電平時,單片機就執行復位操作。如果RST 持續為高電平,單片機就處于循環復位狀態。

武漢理工大學單片機實訓報告

2.2矩陣鍵盤模塊

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

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

圖2.2矩陣鍵盤

2.3數碼管顯示單元

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

圖2.3數碼管顯示單元

如上圖所示,4個數碼管的段選和位選分別由單片機的不同IO口控制,此圖用

武漢理工大學單片機實訓報告

了一個鎖存器74HC573來實現數碼管的段選,而其位選則由單片機的其他IO口控制。

2.4LCD1602液晶顯示電路

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

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

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

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

第3腳:VL為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,對比度過高時會產生“鬼影”,使用時可以通過一個10K的電位器調整對比度。

第4腳:RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。

第5腳:R/W為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當RS和R/W共同為低電平時可以寫入指令或者顯示地址,當RS為低電平R/W為高電平時可以讀忙信號,當RS為高電平R/W為低電平時可以寫入數據。第6腳:E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。

武漢理工大學單片機實訓報告

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

圖2.4LCD1602接口電路

2.5蜂鳴器單元

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

武漢理工大學單片機實訓報告

圖2.5蜂鳴器

第三章 軟件設計

3.1數碼管實驗

3.1.1循環數碼管顯示0—F程序設計結構圖:

實驗要求:能循環數碼管顯示0—F

武漢理工大學單片機實訓報告

圖3.1.1循環數碼管顯示0—F

3.1.2 59秒倒計數流程圖

實驗要求:能用定時器循環顯示59秒倒計時。

武漢理工大學單片機實訓報告

圖3.1.2 數碼管59秒倒計數

3.2 矩陣鍵盤流程圖

實驗要求:實現按鍵檢測能用按鍵控制數碼管加減,控制定時器的啟動和停止 0

武漢理工大學單片機實訓報告

圖3.2矩陣鍵盤

3.3 LCD1602滾動顯示年月日時分秒

實驗要求:要求用1602滾動顯示年月日時分秒,并可發送到上位機,上位機可修改1602上顯示的時間1

武漢理工大學單片機實訓報告

3.4 AD轉換,實驗要求:實現AD采集電阻的電壓,并把采集到的數據通過串口傳送給上位機。2

武漢理工大學單片機實訓報告

3.5家電遙控器

實驗要求:實現對紅外接收管和發射管的控制功能,要求能夠學習遙控器的紅外碼,并能發射相應的編碼,實現紅外遙控器的功能。

圖3.5家電遙控器接收紅外數據3

武漢理工大學單片機實訓報告

第四章調試結果分析

4.1數碼管調試及分析

4.1.1循環數碼管顯示0—F 數碼管位選接單片機的P2口,段選接+5V電壓。當用KEIL軟件把程序編號以后點擊編譯按鈕,程序便編譯好了,然后通過數據線把生成的HEX文下載進單片機,其實驗現象如圖4.1.1所示為數碼管循環顯示的部分圖片。

4.1.1數碼管循環顯示 由其現象可知其程序調試成功。4

武漢理工大學單片機實訓報告

4.1.2數碼管59秒倒計數

數碼管的段選端接單片機的P2口,四個位選端接單片機P0端口,當編譯好后,并把線路連接好后,數碼管變開始從60開始每隔一秒倒計數,當記到0時,數碼管的值便又變成60,如此開始循環。其部分實驗現象圖如圖4.1.2所示:

圖4.2.1數碼管59秒倒計數

4.2矩陣鍵盤

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

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

武漢理工大學單片機實訓報告

4.3 LCD1602滾動顯示年月日時分秒

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

圖4.3LCD1602滾動顯示年月日時分秒

由實驗現象可知程序調試成功。

4.4 AD轉換

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

武漢理工大學單片機實訓報告

圖4.4 AD轉換

由以上實驗現象可知和預測的功能相同顧本次實驗調試成功。

4.5家電遙控器

本次遙控器實驗采用的是NEC編碼方式對遙控器的鍵值進行編碼,以及對遙控器發送的紅外線進行解碼。其編碼圖如圖4.5所示

圖4.5 紅外編碼時序圖

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

第五章小結

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

武漢理工大學單片機實訓報告

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

參考文獻:

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

[2] 楊路明《.C語言程序設計教程》.北京郵電大學出版社.出版年份:2005年。

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

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

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

武漢理工大學單片機實訓報告

實驗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產生一次中斷 用于產生38K載波((1/26)*1000000 //T0 方式1 16位 用于定時

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

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

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;//開定時器中斷1

EA=1;//開總中斷 }

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

TH0=(65536-8295)/256;

TL0=(65536-8295)%256;

TR0=1;// 啟動定時器0;

TR1=1;

while(!TF0);

TR1=0;

TF0=0;//定時器0溢出標志位。

TR0=0;//關閉定時器0.武漢理工大學單片機實訓報告

IR_OUT=0;

//4.5ms 0

TH0=(65536-4146)/256;

TL0=(65536-4146)%256;

TR0=1;

TR1=0;

while(!TF0);//等待定時器0產生中斷。

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

IR_OUT=0;}

//發送二進制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;

武漢理工大學單片機實訓報告

IR_OUT=0;}

//發送二進制 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)//發送一個結束碼,因為最后一個位只有遇到下降沿才能讀取(發射端的上升沿){ //0.565us 1

//小于0.5us 接收端很難識別到

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;

IR_OUT=0;} //發送一字節 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();//發送引導碼

Send_Bit_0();//

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

if(j1&0x80)

Send_Bit_0();

else

Send_Bit_1();j1=j1<<1;

武漢理工大學單片機實訓報告

//先發射低位

}

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

if(j2&0x80)

Send_Bit_0();

else

Send_Bit_1();

j2=j2<<1;

//先發射低位

}

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;

//先發射低位

}

//}

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

{

if(Key4&0x80)

Send_Bit_0();

else

Send_Bit_1();

武漢理工大學單片機實訓報告

Key4=Key4<<1;

}

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

{

if(Key44&0x80)

Send_Bit_0();

else

Send_Bit_1();

Key44=Key44<<1;

//先發射低位

}

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

}

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

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

Send_Char();//發送8位數據

delay_ms(1000);} }

武漢理工大學單片機實訓報告

紅外解碼程序:

#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)//寫指令函數 { RS=0;RW=0;LCD=cmd;delay(1);E=1;delay(5);

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

武漢理工大學單片機實訓報告

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;//下降沿觸發

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);

//設置顯示位置

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

}

else

{

write_com(0xc0+0x09);

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

}

if(hongwaivalue[5]>9)

{

write_com(0xc0+0x0a);

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

}

武漢理工大學單片機實訓報告

else

{

write_com(0xc0+0x0a);

write_data(hongwaivalue[5]+0x30);//將數值轉換為該顯示的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)//確認是否真的接收到正確的信號

{

n=1000;

//1000*10us=10ms,超過說明接收到錯誤的信號

//當兩個條件都為真則循環,如果有一個條件為假的時候跳出循環,免

武漢理工大學單片機實訓報告

//程序出錯的時侯,程序死在這里

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組數據(用戶碼、用戶反碼、鍵碼、{

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

{

n=60;

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

{

delay(1);//10us

n--;

}

n=500;

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

{

delay(1);

Time++;

n--;

if(Time>30)

{

EX0=1;

return;

}

}

hongwaivalue[k]>>=1;//k表示第幾組數據

if(Time>=8)

//如果高電平出現大于565us,那么

武漢理工大學單片機實訓報告

是1

{

hongwaivalue[k]|=0x80;

}

Time=0;//用完時間要重新賦值

} }

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

第二篇:單片機課程設計

設計題目: 單片機課程設計

學生姓名:

院: 電氣與信息工程學院

級: 電子111班 指導教師:

日 期: 2014年9月20日

一、課程設計目的:

了解電子元器件的功能與原理,掌握單片機的結構和原理,學會使用單片機應用開發技術的相關軟件如 keill、STC_ISP_V394等,能夠使用c語言的語言編程簡單的功能。

二、設計的思想:

利用所提供的單片機和開發板的原理圖用keill軟件編程程序以實現一些功能。然后用STC_ISP_V394.exe軟件將編譯完全正確的程序生成的hxe文件下載到開發板上,再調試編譯的程序能否實現其所設計的功能。

1、對蜂鳴器的了解:

蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,它由振蕩器、電磁線圈、磁鐵、振動膜片及外殼組成,接通電源后,振蕩器產生的音頻信號由電流通過電磁線圈,使電磁線圈產生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性的振動發聲。

2、設計:

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

圖一 調試說明:

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

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

常實現,則說明程序編寫有誤,需要認真檢查程序流程,然后經過反復的修改與調試排除故障,實現設計要求的各項功能。編譯和燒寫該程序到單片機:

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

選單片機的型號,并打開編譯產生好的hex文件

點擊下載,給開發板上電。

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

三、實驗程序:

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

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

[功能]

通過單片機演奏音樂,顯示一些內容

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

#include

#include

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

//關于如何編制音樂代碼, 其實十分簡單,各位可以看以下代碼.//頻率常數即音樂術語中的音調,而節拍常數即音樂術語中的多少拍;

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

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

unsigned char p,m;

//m為頻率常數變量

unsigned char n=0;//n為節拍常數變量

unsigned char code music_tab[] ={

0x18, 0x30, 0x1C , 0x10, //格式為: 頻率常數, 節拍常數, 頻率常數, 節拍常數,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 控制節拍

{ TH0=0xd8;

TL0=0xef;

n--;

}

void delay(unsigned char m)

//控制頻率延時

{

unsigned i=3*m;

while(--i);

}

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

{

while(--a);

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

}

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){

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

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

{

_nop_();

_nop_();

_nop_();

_nop_();

} } }

BOOL lcd_bz(){

// 測試LCD忙碌狀態 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);

// 寫入指令數據到LCD //設定顯示位置

}

lcd_wdat(BYTE dat)

{

//寫入字符顯示數據到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初始化設定

//16*2顯示,5*7點陣,8位數據//顯示開,關光標 //移動光標 //清除LCD的顯示內容

// 初始化LCD

lcd_wcmd(0x06);

//向右移動光標

lcd_pos(0);

//設置顯示位置為第一行的第1個字符

j = 0;

while(dis1[ j ]!= '

主站蜘蛛池模板: 无码成人一区二区三区| 手机国产丰满乱子伦免费视频| 国产成人精品久久亚洲高清不卡| 国产激情电影综合在线看| 中文区中文字幕免费看| 欲色影视天天一区二区色香欲| 久久人人玩人妻潮喷内射人人| 亚洲日本精品国产一区vr| 污污污污污污www网站免费| 成在人线av无码免费高潮水老板| 午夜爽爽爽男女免费观看麻豆国产| 亚洲精品国产成人精品软件| 久久中文字幕人妻熟女少妇| 久久精品无码一区二区三区不卡| 国产美女亚洲精品久久久99| 四虎国产精品永久在线国在线| 国产精品久久久久久免费软件| 久久婷婷五月国产色综合| 亚洲中文字幕av不卡无码| 久久理论片午夜琪琪电影网| 又硬又粗又大一区二区三区视频| 寂寞骚妇被后入式爆草抓爆| 亚洲欧美日韩国产自偷| 中文在线а√天堂| 国产巨大爆乳在线观看| 亚洲人成日韩中文字幕无卡| 狠狠综合久久久久综合网浪潮| 粗了大了 整进去好爽视频| 好大好湿好硬顶到了好爽视频| 精品国产一区二区三区av性色| 国产欧美va欧美va香蕉在线| 国精产品一品二品国精品69xx| 国产亚洲午夜高清国产拍精品| 国产亚洲精品无码不卡| 国产精品亚洲综合一区在线观看| 法国白嫩大屁股xxxx| 朝鲜女人大白屁股ass| 很黄很色很污18禁免费| 成人亚洲性情网站www在线观看| 大伊香蕉精品视频在线直播| 亚洲一区二区三区在线网址|