核技術與自動化工程學院實習報告_第1頁
核技術與自動化工程學院實習報告_第2頁
核技術與自動化工程學院實習報告_第3頁
核技術與自動化工程學院實習報告_第4頁
核技術與自動化工程學院實習報告_第5頁
已閱讀5頁,還剩25頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、成都理工大學實習報告成 都 理 工 大 學核技術與自動化工程學院實習報告實習名稱: 單片機課程設計 實習內容: 單片機的運用 姓 名: 許助 學 號: 201106010208 專 業: 測控技術與儀器 學 期: 2013-2014 第二學期 任課教師: 成毅 實習地點: 校內 實習時間: 2014.6 一:設計內容與要求1:基本要求 1.1:完成單片機電路板的焊接與調試。 1.2:通過編程來實現基本功能外加附加功能。2:基本功能(已實現) 2.1:流水燈的閃爍和移動。 2.2:按鍵控制流水燈的刷新頻率和亮度(占空比)。 2.3:利用串口通訊來控制流水燈的刷新頻率和亮度。 2.4:利用定時器來

2、改變刷新頻率和亮度(占空比)。3:附加功能 3.1:i/o鍵盤的擴展。 3.2:1602液晶的顯示控制。 (已實現:顯示心形圖形) 3.3:串口加液晶顯示傳輸。 3.4:實現加減乘除的計數器。 3.5:實現可設置的定時功能。二:電路原理說明1:電路的原理框圖 1.1:電源電路 1.2:單片機cpu 1.3:晶振電路與獨立按鍵電路 1.4:雙復位電路與紅外接受電路 1.5:rs232電路 1.6:接口電路與上拉電阻排 1.7:i/o擴張排針 1.8:8路led燈電路與1602液晶電路 2:電路原理介紹 2.1:鍵盤接口的電路原理 鍵盤在單片機應用系統中能實現向單片機輸入數據、傳送命令等功能,是人

3、工干預單片機的主要手段。 按鍵的確認,鍵的閉合與否,反映在行線輸出電壓上就是呈現出高電平或低電平,如果高電平表示斷開的話,那么低電平則表示鍵閉合,所以通過對行線電平的高低狀態的檢測,便可確認按鍵按下與否。為了確保cpu對一次按鍵動作只確認一次按鍵,必須消除抖動的影響。消除抖動分軟件和硬件兩種(本實驗采用的是定時器消抖)。 獨立式鍵盤是各按鍵相互獨立,每個按鍵各接一根輸入線,一根輸入線上的按鍵工作狀態不會影響到其他輸入線上的工作狀態。因此,通過檢測輸入線的電平狀態可以很容易判斷那個鍵被按下了。 獨立式按鍵電路配置靈活,軟件簡單,但每個按鍵需要占用一根輸入口線,在按鍵數量較多時,需要較多的輸入口線

4、且電路結構復雜,故此種鍵盤適用于按鍵較少或操作速度較高的場合。 2.2:led流水燈顯示驅動的電路原理 由于led正向伏安特性非常陡(正向動態電阻非常小),要給led供電就比較困難。直接用電壓源供電,否則電壓波動稍增,電流就會增大到將led燒毀的程度。為了穩住led的工作電流,保證led能正??煽康毓ぷ?,我需要加一個驅動,本實驗加的驅動就是每個led燈串聯了一個電阻,由歐姆定律的知識可知,當電壓增大時,由于串聯了電阻,流過led的電流就減小,從而控制在有效電流范圍里面。 2.3:通訊接口電路原理 本實驗采用的是usb通信接口設計 usb總線的控制是主從結構,有一個host和多個device。

5、host負責總線的帶寬管理(幀的編組),device枚舉,device的編址。device對host在總線上的行為做出回應,如從總線上讀取數據或寫出數據,處理或生成回應。usb總線的數據線由兩根差分信號線d+ d-構成,host和device都掛接在這兩條信號線上通訊。usb協議內容分兩大塊,一個是對通訊邏輯進行分層定義;一個是對設備的組成邏輯進行分層定義。數據包的最大長度為1023個字節,一個事務最多只有一個數據包;數據處理順序由host控制,一個事務的包不會分到不同的幀里;事務處理中,包的傳輸是順序,如令牌包總在數據包之前傳送;令牌包都是由host發出的;設備device根據令牌包決定自己

6、是否發送數據,不能主動發送數據。3:附加功能(液晶l602顯示)的電路原理介紹顯示容量:162 個字符 芯片工作電壓:4.55.5v 工作電流:2.0ma(5.0v) 模塊最佳工作電壓:5.0v 1602lcd 采用標準的 14腳(無背光)或 16腳(帶背光)接口,各引腳接口說明如下表所示: 編號 符號 引腳說明 編號 符號 引腳說明 1 vss 電源地 9 d2 數據 2 vdd 電源正極 10 d3 數據 3 vl 液晶顯示偏壓 11 d4 數據 4 rs 數據/命令選擇 12 d5 數據 5 r/w 讀/寫選擇 13 d6 數據 6 e 使能信號 14 d7 數據 7 d0 數據 15

7、bla 背光源正極 8 d1 數據 16 blk 背光源負極 第 1 腳:vss 為地電源。 第 2 腳:vdd接 5v正電源。 第 3 腳:vl為液晶顯示器對比度調整端,接正電源時對比度最弱,接地時對比度最高,使用時可以通過一個 10k 的電位器調整對比度。 第 4 腳:rs 為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。 第 5 腳:r/w 為讀寫信號線,高電平時進行讀操作,低電平時進行寫操作。當 rs和 r/w共同為低電平時可以寫入指令或者顯示地址,當 rs 為低電平 r/w 為高電平時可以讀忙信號,當 rs 為高電平 r/w為低電平時可以寫入數據。 第 6 腳:e端為使

8、能端,當 e 端由高電平跳變成低電平時,液晶模塊執行命令。 第 714腳:d0d7為 8 位雙向數據線。 第 15腳:背光源正極。 第 16腳:背光源負極。三:程序設計 初定義1:系統軟件流程框圖鍵盤掃描 定時延時 消抖按鍵判 斷s1按鍵按下s2按鍵按下長按短按判斷長按短按判斷長按進入串口程序,可以控制流水燈的狀態短按即控制流水燈的刷新頻率長按進入液晶1602的程序,心形圖像顯示短按即控制流水燈的亮度(占空比)2:各接口電路軟件程序及代碼說明#include#include#define uchar unsigned char#define uint unsigned intuchar buf

9、;uchar trg; /按鍵觸發標志uchar cont; /按鍵連續標志位uchar p3value_present; /定義一個p3口的電平值變量uchar readdate; /定義一個讀p3口的變量uint num; /刷新頻率數字標志位uint num1;uint c=1; /led占空比亮度控制uint a=10;uint b;uint d;uint h;uint x;uchar aa=0xfe; /定義一個中間變量uint e=10; /刷新頻率的變量定義uint y;/*lcd1602液晶顯示屏,心型圖案的初定義*/sbit rs=p05; sbit rw=p06;sbit

10、en=p07; uchar code table=0x03,0x07,0x0f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x18,0x1e,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x07,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, 0x10,0x18,0x1c,0x1e,0x1e,0x1e,0x1e,0x1e, 0x0f,0x07,0x03,0x01,0x00,0x00,0x00,0x00, 0x1f,0x1f,0x1f,0x1f,0x1f,0x0f,0x07,0x01, 0x1f,0x1f,0x1f,0x1f,0x1f,0x1c

11、,0x18,0x00, 0x1c,0x18,0x10,0x00,0x00,0x00,0x00,0x00;/心圖案/* 定時器0的初定義子函數*/ void dinyi() tmod=0x02; /定時器0工作方式2,八位自動裝載 th0=6; /250us溢出 tl0=6; ea=1; /開總中斷 et0=1; tr0=1; /啟動定時器0/* 串口初定義子函數,采用定時器1*/void ckdinyi() scon=0x50; /設定串口工作方式 pcon=0x00; /波特率不倍增 tmod=0x20; /定時器1工作于8位自動重載模式, 用于產生波特率 ea=1; es = 1; /允許

12、串口中斷 tl1=0xfd; th1=0xfd; /波特率9600 tr1=1; /啟動定時器1/* 按鍵掃描程序*/void scanf() p3value_present=p3; /端口當前值 readdate=p3value_present0xff; /將p3口的電平信號取反 trg=readdate&(readdatecont); /短暫按鍵記錄 cont=readdate; /長按按鍵記錄/* 定義延時函數*/void delay(uint n)while(1)/消抖程序 if(num1n) /計數20ms,按鍵消抖 num1=0;break; /* 對1602液晶進行寫命令函數 *

13、/ void lcd_wcom(uchar com) rs=0; /選擇指令寄存器 rw=0; /選擇寫 p2=com; /把命令字送入p2端口,即液晶 delay(100); /延時一會兒,讓1602準備接受數據 en=1; /使能端電平變化,命令送入1602的8位數據口 en=0; /* 對1602液晶進行寫數據函數 */void lcd_wdat(uchar dat) rs=1; /選擇數據寄存器 rw=0; /選擇寫 p2=dat; /把要顯示的數據寫入p2端口 delay(100); /延時一會兒,讓1602準備接受數據 en=1; /使能端電平變化,數據送入1602的8位數據口 e

14、n=0; /* 對1602液晶進行初始化函數 */ void lcd_init() lcd_wcom(0x38); /8位數據,雙列,5*7的字型 lcd_wcom(0x0c); /開啟顯示屏,關光標,光標不閃爍lcd_wcom(0x06); /顯示地址遞增,即寫一個數據后,顯示數據右移一位 lcd_wcom(0x01); /清屏 /* 主程序*/void main() dinyi(); /按鍵初定義函數 while(1) scanf(); /掃描函數 if(trg&0x10) /刷新頻率按鍵檢測,檢測s2按鍵是否按下 e=a+b*100; /將刷新頻率分為五種,即每個燈計數10,110,21

15、0,310,410,510 b+; if(b=5) /按鍵清零 b=0; if(nume) /刷新頻率控制中斷計數 num=0; aa=_crol_(aa,1); /將aa右移一位,即后面的右移一個燈 if(trg&0x04) /占空比控制,檢測s1是否按下 c+;d=(e*c)/10; /將led燈亮度分為10類if(c=9) /計數清零c=1; d=(e*c)/10; y=e-d; p0=aa; delay(y); p0=0xff; delay(d); delay(80); /延時20毫秒消抖 if(cont&0x10)/按鍵長按進入串口控制功能 h+; if(h200) while(1)

16、 ckdinyi();/串口初定義程序 if(cont&0x04) /lcd液晶顯示程序 x+;if(x200)char m=0; lcd_init(); /初定義函數 lcd_wcom(0x40); /設定cgram地址 for(m=0;m64;m+) /將心型代碼寫入cgram中 lcd_wdat(tablem); lcd_wcom(0x85); /設定上排的顯示位置 for(m=0;m4;m+) /顯示心型圖案的上半部分 lcd_wdat(m); lcd_wcom(0xc5); /將顯示坐標轉移到下排和上排相對應的地方 for(m=4;m8;m+) /顯示心型圖案的下半部分 lcd_wd

17、at(m); while(1); /* 定時器0中斷程序*/void t0_frequency() interrupt 1using 2 /頻率控制中斷程序 num+; num1+; /* 串口中斷程序*/void serial() interrupt 4 es = 0; /關閉串行中斷 ri = 0; /清除串行接受標志位 buf = sbuf; /從串口緩沖區取得數據 switch(buf) case 0x31: p0=0xfe;break; /接受到1,第一個led亮 case 0x32: p0=0xfc;break; /接受到2,第二個led亮 case 0x33: p0=0xf8;b

18、reak; /接受到3,第三個led亮 case 0x34: p0=0xf0;break; /接受到4,第四個led亮 case 0x35: p0=0xe0;break; /接受到5,第五個led亮 case 0x36: p0=0xc0;break; /接受到5,第六個led亮 case 0x37: p0=0x80;break; /接受到5,第七個led亮 case 0x38: p0=0x00;break; /接受到5,第八個led亮 default: p0=0xff;break; /接受到其它數據 es = 1; /允許串口中斷四:系統調試1:硬件調試 焊完電路板后,我將一個簡單的流水燈移動

19、程序下載到單片機里面,然后去觀察它的現象并測試各芯片引腳的電哦,來檢測是否虛焊了,結果是檢測正常,各部分功能均能實現。2:軟件調試 軟件程序的編寫和調試花了我兩天的時間,中途遇到過幾個關卡,比如說占空比的控制,剛開始我設計了一個占空比的程序,覺的我自己的思路沒有問題,但是卻找不錯它不行的原因,后來經過室友一句話的提醒,幡然醒悟,有時候真的是當局者迷,旁觀者清啊,還遇到了一個非常低級的問題,算是一個知識記憶混亂的錯誤,我將五個中斷的優先號給記混了,可能是很久沒有寫單片機程序的原因了,最后還是被發現了,這兩個問題花了我大半天的時間,其他程序只要思路框架以及自己的系統設計正確,也就可以很快的寫出來。

20、3:主要問題的解決方法 問題1:按鍵掃描 解決方法:按鍵掃描在這個程序里面是個非常重要的程序,這里采用的是一個非常經典的按鍵掃描方法,也是十分的實用與簡便,重要的原因是可以檢測到按鍵的短按和長按,并且可以控制非常多程序的切換。 問題2:流水燈的亮度(占空比)控制 解決方法:我開始是用的if語句,通過檢測定時器計數來控制流水燈的占空比,到現在都還沒有發先我原來的思路有什么不對,由于時間的原因,我不得不采用了另一個方法,通過定時延時來控制,這個延時是有定時器控制的,通過在一個周期里面進行定時器計數從而控制亮度 問題3:知識混亂的問題 解決方法:當你覺的你的思路的是對的,程序運行又沒有錯誤,那就可能是知識記憶錯誤了,我就犯了這個錯誤,這個可以查書,上網查,或者問大神。五:結論1:完成的情況及功能 基本功能中按鍵控制流水燈的刷新頻率和亮度已經實現了,但串口通信控制

溫馨提示

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

評論

0/150

提交評論