單片機(jī)課程設(shè)計實訓(xùn)報告1602顯示萬年歷和溫度_第1頁
單片機(jī)課程設(shè)計實訓(xùn)報告1602顯示萬年歷和溫度_第2頁
單片機(jī)課程設(shè)計實訓(xùn)報告1602顯示萬年歷和溫度_第3頁
單片機(jī)課程設(shè)計實訓(xùn)報告1602顯示萬年歷和溫度_第4頁
單片機(jī)課程設(shè)計實訓(xùn)報告1602顯示萬年歷和溫度_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、單片機(jī)實訓(xùn)報告題 目 : 1602顯示萬年歷和溫度系 部 : 專 業(yè) : 班 級 : 姓 名 :學(xué) 號 : 指導(dǎo)教師 : 2011年12月15日目錄一、引言31.1、意義31.2、系統(tǒng)功能31.3、成員工作3二、使用硬件4三、使用原理圖5四、完成萬年歷和溫度的程序7五、感悟14六、致謝15七、參考文獻(xiàn)16八、老師的評語16引 言1.1、意義目前單片機(jī)的應(yīng)用可以說是相當(dāng)?shù)膹V泛,已經(jīng)滲透到我們生活中的各個領(lǐng)域。從高端導(dǎo)彈的導(dǎo)航裝置,飛機(jī)上各種儀表的控制,自動控制領(lǐng)域的機(jī)器人,以及自動化過程的實時和數(shù)據(jù)處理,到我們?nèi)粘I畹母鞣N智能ic卡系統(tǒng),安全保障系統(tǒng),錄象機(jī),攝象機(jī),手機(jī),電視,以及可控玩具,

2、等等,都是單片機(jī)“惹的禍”。而且,目前我國的單片機(jī)教育已經(jīng)向高中教育發(fā)展,可見在不久的將來,單片機(jī)對于工科學(xué)生而言就會象電路基礎(chǔ)原理一樣成為基礎(chǔ)課。所以我們要跟著時代的步伐前進(jìn),學(xué)好單片機(jī)。1.2、系統(tǒng)功能在單片機(jī)中,基本上有三類信息在流動,一類是數(shù)據(jù),即各種原始數(shù)據(jù)1、中間結(jié)果、程序等。這樣要由外部設(shè)備通過“口”進(jìn)入單片機(jī),再存放在存貯器中,在運(yùn)算處理過程中,數(shù)據(jù)從存貯器讀入運(yùn)算器進(jìn)行運(yùn)算,運(yùn)算的中間結(jié)果要存入存貯器中,或最后由運(yùn)算器經(jīng)“出入口”輸出。用戶要單片機(jī)執(zhí)行的各種命令(程序)也以數(shù)據(jù)的形式由存貯器送入控制器,由控制器解讀(譯碼)后變?yōu)楦鞣N控制信號,以便執(zhí)行如加、減、乘、除等功能的各

3、種命令。所以,這一類信息就稱為控制命令,即由控制器去控制運(yùn)算器一步步地進(jìn)行運(yùn)算和處理,又控制存貯器的讀(取出數(shù)據(jù))和寫(存入數(shù)據(jù))等。所以芯片就達(dá)到某種功能,就給設(shè)備帶來效果。1.3、成員工作寫程序:張俊兵調(diào)試:張俊兵設(shè)計報告:張俊兵 使用硬件 單片機(jī) 18b20lcd1602 usb供電線 串口線使用原理圖1.1、 單片機(jī)使用的原理圖1.2、 仿真圖完成萬年歷和溫度的程序#include#include#includesbit rs=p00;sbit e=p02;sbit rw=p01;sbit beep=p17;#define data p2#define key p3#define uc

4、har unsigned charint hour,min,sec,tcnt,a,h,m,day,month,yearl,yearh;int z,j;#define no_key 0x7fvoid delayus(unsigned char us)/delay usunsigned char uscnt;uscnt=us1;while(-uscnt);void delayms(unsigned char ms)/delay ms while(-ms) delayus(250); delayus(250); delayus(250); delayus(250); void writecomman

5、d(unsigned char c) delayms(5);/short delay before operation e=0; rs=0; rw=0; _nop_(); e=1; data=c; e=0;void writedata(unsigned char c) delayms(5); /short delay before operation e=0; rs=1; rw=0; _nop_(); e=1; data=c; e=0; rs=0;void initlcd() delayms(15); writecommand(0x38); /display mode writecommand

6、(0x38); /display mode writecommand(0x38); /display mode writecommand(0x06); /顯示光標(biāo)移動位置 writecommand(0x0c); /顯示開及光標(biāo)設(shè)置 writecommand(0x01); /顯示清屏int set_xy(int x,int y)/to set current position if(y1)|(x15) return 0; else if(y=0) writecommand(0x80+x); else writecommand(0xc0+x); return 1; int wr_char(unsi

7、gned char dat,int x,int y) if(!set_xy(x,y)/write a char to some position return 0; writedata(dat); return 1;int wr_str(unsigned char *str,int x,int y) if(!set_xy(x,y) return 0;/to write a string to some position while(*(str+) writedata(*(str-1); return 1; int wr_int1(int num,int x,int y)unsigned cha

8、r seg1;if(!set_xy(x,y)return 0; if(num0) writedata(-); num=-num; seg0=num; writedata(seg0+0);return 1; int wr_int(int num,int x,int y) unsigned char seg2; if(!set_xy(x,y) /to write a interger to some position return 0; if(num0) writedata(-); num=-num; seg1=num/10; num=num%10; seg0=num; writedata(seg

9、1+0); writedata(seg0+0); return 1;void delay(unsigned int cnt)while(-cnt);unsigned char key_scan(void)unsigned char i,n;unsigned char key_temp;key=0xf0;if(key&0xf0)!=0xf0)delay(10000);if(key&0xf0)!=0xf0)for(i=0;i4;i+)key=(1i);n=key;n&=0xf0;if(n!=0xf0)switch(n)case(0x70):key_temp=15-(3-i)*4;break;cas

10、e(0xb0):key_temp=14-(3-i)*4;break;case(0xd0):key_temp=13-(3-i)*4;break;case(0xe0):key_temp=12-(3-i)*4;break;default:key_temp=no_key;return key_temp;return no_key;void check_wendu(void) unsigned int b,c,d; d=readtemperature()-5; /獲取溫度值并減去ds18b20的溫漂誤差 b=d/100; /計算得到十位數(shù)字 c=d/10-b*10; /計算得到個位數(shù)字 z=d/10;

11、/計算得到整數(shù)位 j=d-b*100-c*10; /計算得到小數(shù)位if(z99)z=99;j=9; /設(shè)置溫度顯示上限 main()unsigned char opear;initlcd();delayms(15);tmod=0x02;th0=0x06;tl0=0x06;tr0=1;et0=1;ea=1;wr_str( : : ,0,0);wr_str( : ,0,1);wr_str( - - ,6,1);wr_str( . ,9,0);while(1)opear=key_scan();if(opear!=no_key)switch(opear)case(0):hour+;if(hour=24

12、)hour=0;day+;wr_int(hour,0,0);break;case(1):min+;if(min=60)min=0;hour+;wr_int(min,3,0);break;case(2):h+;if(h=24)h=0;wr_int(h,0,1);break;case(3):m+;if(m=60)m=0;h+;wr_int(m,3,1);break;case(4):day+;if(day=31)day=0;month+;wr_int(day,14,1);break;case(5):month+;if(month=13)month=1;yearl+;wr_int(month,11,1

13、);break;case(6):yearl+;if(yearl=100)yearl=0;yearh+;wr_int(yearl,8,1);break;case(7):yearh+;if(yearh=100)yearh=20;break;if(hour=h&min=m)beep=0;else beep=1;if(a=1)a=0;check_wendu();if(z99&j9)wr_int(z,9,0);wr_int1(j,12,0);wr_int(yearh,6,1);wr_int(yearl,8,1);wr_int(month,11,1);wr_int(day,14,1);wr_int(hou

14、r,0,0);wr_int(min,3,0);wr_int(sec,6,0);wr_int(h,0,1);wr_int(m,3,1);void t0 (void)interrupt 1 using 0tcnt+;if(tcnt=4000)tcnt=0;sec+;a=1;wr_int(sec,6,0);if(sec=60)sec=0;min+;if(min=60)min=0;hour+;if(hour=24)hour=0;day+;if(month=2&(yearl=0&yearh%4=0)|(yearl!=0&yearh%4=0)&day=30)day=1;else if(month=2&da

15、y=29)day=1;else if(month=4|month=6|month=9|month=11)&day=31)day=1;else if(day=32)day=1;if(day=1)month+;if(month=13)month=1;yearl+;if(yearl=100)yearl=0;yearh+;if(yearh=100)yearh=20;ds18b20調(diào)用的程序:#ifndef _ds18b20_h_#define _ds18b20_h_#include sbit dq=p37; /定義ds18b20總線i/o/*延時子程序*/void delay_ds18b20(int

16、num) while(num-) ;/*初始化ds18b20*/void init_ds18b20(void) unsigned char x=0; dq = 1; /dq復(fù)位 delay_ds18b20(8); /稍做延時 dq = 0; /單片機(jī)將dq拉低 delay_ds18b20(80); /精確延時,大于480us dq = 1; /拉高總線 delay_ds18b20(14); x = dq; /稍做延時后,如果x=0則初始化成功,x=1則初始化失敗 delay_ds18b20(20);/*讀一個字節(jié)*/unsigned char readonechar(void) unsigne

17、d char i=0; unsigned char dat = 0; for (i=8;i0;i-) dq = 0; / 給脈沖信號 dat=1; dq = 1; / 給脈沖信號 if(dq) dat|=0x80; delay_ds18b20(4); return(dat);/*寫一個字節(jié)*/void writeonechar(unsigned char dat) unsigned char i=0; for (i=8; i0; i-) dq = 0; dq = dat&0x01; delay_ds18b20(5); dq = 1; dat=1; /*讀取溫度*/unsigned int re

18、adtemperature(void) unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; init_ds18b20(); writeonechar(0xcc); /跳過讀序號列號的操作 writeonechar(0x44); /啟動溫度轉(zhuǎn)換 init_ds18b20(); writeonechar(0xcc); /跳過讀序號列號的操作 writeonechar(0xbe); /讀取溫度寄存器 a=readonechar(); /讀低8位 b=readonechar(); /讀高8位 t=b; t=8; t=t

19、|a; tt=t*0.0625; t= tt*10+0.5; /放大10倍輸出并四舍五入 return(t);感悟當(dāng)今時代,是一個新技術(shù)層出不窮的時代。在電子領(lǐng)域,尤其是自動化智能控制領(lǐng)域,傳統(tǒng)的分立元件或數(shù)字邏輯電路構(gòu)成的控制系統(tǒng)正以前所未見的速度被單片機(jī)智能控制系統(tǒng)所取代。大部分的高等工科學(xué)校都已開設(shè)了單片機(jī)課程。單片機(jī)具有體積小、功能強(qiáng)、成本低、應(yīng)用面廣等優(yōu)點(diǎn),可以說,智能控制與自動控制的核心就是單片機(jī)。目前,一個學(xué)習(xí)與應(yīng)用單片機(jī)的高潮正在工廠、學(xué)校及企事業(yè)單位大規(guī)模地興起。過去習(xí)慣于傳統(tǒng)電子領(lǐng)域的工程師、技術(shù)員正面臨著全新的挑戰(zhàn),如不能在較短時間內(nèi)學(xué)會單片機(jī),勢必會被時代所遺棄,只有勇

20、敢地面對現(xiàn)實,挑戰(zhàn)自我,加強(qiáng)學(xué)習(xí),爭取在較短的時間內(nèi)將單片機(jī)技術(shù)融會貫通,才能跟上時代的步伐。習(xí)單片機(jī)并不象學(xué)習(xí)傳統(tǒng)數(shù)字電路或模擬電路那樣比較直觀,原因是除了“硬件”之外還存在一個“軟件”的因素。正是這個“軟件”因素的存在,使得許多初學(xué)者怎么也弄不懂單片機(jī)的工作過程,怎么也不明白為什么將幾個數(shù)送來送去,就能控制一盞燈亮/滅?能控制一個電機(jī)變速?由此對單片機(jī)產(chǎn)生一種“神奇”、“敬畏”甚至“恐懼”感,阻礙了學(xué)習(xí)單片機(jī)的熱情與興趣,這就有社會上“單片機(jī)難學(xué)”一說。今天我們開始實訓(xùn),通過c語言編程序,通過isp軟件把程序燒寫給at89c52,能在lcd1602顯示時間、鬧鈴、萬年歷、溫度,在第二天就實

21、現(xiàn)了功能,但還沒有達(dá)到我想要的要求,在以后,我會加以改正,從而彌補(bǔ)我的缺點(diǎn)。習(xí)單片機(jī)的最有效方法是理論與實踐并重對于我來說,如果按教科書式的學(xué)法,上來就是一大堆指令、名詞,學(xué)了半天還搞不清這些指令起什么作用,能夠產(chǎn)生什么實際效果,那么也許用不了幾天就會覺得枯燥乏味而半途而廢。所以學(xué)習(xí)與實踐結(jié)合是一個好方法,邊學(xué)習(xí)、邊演練,循序漸進(jìn),這樣用不了幾次就能將用到的指令理解、吃透、扎根于腦海,甚至“根深蒂固”。也就是說,學(xué)習(xí)完某幾條指令后(一次數(shù)量不求多,只求懂),接下去就該做實驗了,通過實驗,感受剛才的指令產(chǎn)生了控制效果,眼睛看得見(燈光)、耳朵聽得到(聲音),更能深刻理解指令是怎樣轉(zhuǎn)化成信號去控制電子產(chǎn)品的。說句過分的話,單片機(jī)與其說是學(xué)出來的,還不如說是做實驗練出來的,何況做實驗本身也是一種學(xué)習(xí)過程。因此邊學(xué)邊練的學(xué)習(xí)方法,效果特別好,學(xué)習(xí)單片機(jī)要合理安排學(xué)習(xí)時間持之以恒學(xué)習(xí)單片機(jī)可不能“三天打魚、二天曬網(wǎng)” ,要有持之以恒的毅力與決心

溫馨提示

  • 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

提交評論