單片機課程設(shè)計報告_第1頁
單片機課程設(shè)計報告_第2頁
單片機課程設(shè)計報告_第3頁
單片機課程設(shè)計報告_第4頁
單片機課程設(shè)計報告_第5頁
已閱讀5頁,還剩32頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、前言目前單片機滲透到我們生活的各個領(lǐng)域,幾乎很難找到哪個領(lǐng)域沒有單片機的蹤跡。導(dǎo)彈的導(dǎo)航裝置,飛機上各種儀表的控制,計算機的網(wǎng)絡(luò)通訊與數(shù)據(jù)傳輸,工業(yè)自動化過程的實時控制和數(shù)據(jù)處理,廣泛使用的各種智能ic卡,民用豪華轎車的安全保障系統(tǒng),錄像機、攝像機、全自動洗衣機的控制,以及程控玩具、電子寵物等等,這些都離不開單片機。更不用說自動控制領(lǐng)域的機器人、智能儀表、醫(yī)療器械以及各種智能機械了。因此,單片機的學(xué)習(xí)、開發(fā)與應(yīng)用將造就一批計算機應(yīng)用與智能化控制的科學(xué)家、工程師。單片機廣泛應(yīng)用于儀器儀表、家用電器、醫(yī)用設(shè)備、航空航天、專用設(shè)備的智能化管理及過程控制等領(lǐng)域,大致可分如下幾個范疇: 1.在智能儀器儀

2、表上的應(yīng)用 單片機具有體積小、功耗低、控制功能強、擴展靈活、微型化和使用方便等優(yōu)點,廣泛應(yīng)用于儀器儀表中,結(jié)合不同類型的傳感器,可實現(xiàn)諸如電壓、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度、元素、壓力等物理量的測量。采用單片機控制使得儀器儀表數(shù)字化、智能化、微型化,且功能比起采用電子或數(shù)字電路更加強大。例如精密的測量設(shè)備(功率計,示波器,各種分析儀)。 2.在工業(yè)控制中的應(yīng)用 用單片機可以構(gòu)成形式多樣的控制系統(tǒng)、數(shù)據(jù)采集系統(tǒng)。例如工廠流水線的智能化管理,電梯智能化控制、各種報警系統(tǒng),與計算機聯(lián)網(wǎng)構(gòu)成二級控制系統(tǒng)等。 3.在家用電器中的應(yīng)用 可以這樣說,現(xiàn)在的家用電器基本上都采用了

3、單片機控制,從電飯煲、洗衣機、電冰箱、空調(diào)機、彩電、其他音響視頻器材、再到電子秤量設(shè)備,五花八門,無所不在。 4.在計算機網(wǎng)絡(luò)和通信領(lǐng)域中的應(yīng)用 現(xiàn)代的單片機普遍具備通信接口,可以很方便地與計算機進行數(shù)據(jù)通信,為在計算機網(wǎng)絡(luò)和通信設(shè)備間的應(yīng)用提供了極好的物質(zhì)條件,現(xiàn)在的通信設(shè)備基本上都實現(xiàn)了單片機智能控制,從手機,電話機、小型程控交換機、樓宇自動通信呼叫系統(tǒng)、列車無線通信、再到日常工作中隨處可見的移動電話,集群移動通信,無線電對講機等。 5.單片機在醫(yī)用設(shè)備領(lǐng)域中的應(yīng)用 單片機在醫(yī)用設(shè)備中的用途亦相當(dāng)廣泛,例如醫(yī)用呼吸機,各種分析儀,監(jiān)護儀,超聲診斷設(shè)備及病床呼叫系統(tǒng)等等。 6.在各種大型電器

4、中的模塊化應(yīng)用 某些專用單片機設(shè)計用于實現(xiàn)特定功能,從而在各種電路中進行模塊化應(yīng)用,而不要求使用人員了解其內(nèi)部結(jié)構(gòu)。如音樂集成單片機,看似簡單的功能,微縮在純電子芯片中(有別于磁帶機的原理),就需要復(fù)雜的類似于計算機的原理。如:音樂信號以數(shù)字的形式存于存儲器中(類似于rom),由微控制器讀出,轉(zhuǎn)化為模擬音樂電信號(類似于聲卡)。 在大型電路中,這種模塊化應(yīng)用極大地縮小了體積,簡化了電路,降低了損壞、錯誤率,也方便于更換。 7.單片機在汽車設(shè)備領(lǐng)域中的應(yīng)用 單片機在汽車電子中的應(yīng)用非常廣泛,例如汽車中的發(fā)動機控制器,基于can總線的汽車發(fā)動機智能電子控制器,gps導(dǎo)航系統(tǒng),abs防抱死系統(tǒng),制動

5、系統(tǒng)等等。 此外,單片機在工商,金融,科研、教育,國防航空航天等領(lǐng)域都有著十分廣泛的用途。本次課程設(shè)計,主要學(xué)習(xí)單片機內(nèi)部功能模塊的應(yīng)用,如定時器/計數(shù)器、中斷、片內(nèi)外存貯器、i/o、串行口通信等,實現(xiàn)鍵盤顯示、電機控制應(yīng)用等。1. 數(shù)碼管顯示系統(tǒng)1.1. 工作原理利用動態(tài)顯示方式實現(xiàn)在數(shù)碼管上穩(wěn)定顯示123456。1.2. 硬件電路設(shè)計及描述單片機、6位的7段數(shù)碼管。單片機的p1口輸出相應(yīng)的段碼,p2口低6位選擇相應(yīng)的數(shù)碼管。硬件電路圖如下。1.3. 軟件設(shè)計流程及描述#include#define uint unsigned int#define uchar unsigned charuc

6、har code table=0x60,0xda,0xf2,0x66,0xb6,0xbe,;/數(shù)字1-6段碼表uchar code adress=0xfe,0xfd,0xf7b,0xf7,0xef,0xdf;/位碼表void delay(uint m)/延時程序while(m-);void main()uchar m=0;while(1)/動態(tài)循環(huán)if(m=6)m=0;p2=0xff; /數(shù)碼管清零p2=adressm;/p2口輸出位碼,選擇位p1=tablem+;/p1輸出段碼,顯示相應(yīng)數(shù)字delay(500);1.4. 綜合調(diào)試結(jié)果分析與展示動態(tài)顯示的結(jié)果是靜態(tài)的。當(dāng)動態(tài)循環(huán)一個一個數(shù)碼管

7、顯示足夠快的時候,由于視覺原因,看上去是同時顯示的。2. 步進電機控制系統(tǒng)2.1. 工作原理通過單片機的/o口控制步進電機運轉(zhuǎn),實現(xiàn)正傳和反轉(zhuǎn)。2.2. 硬件電路設(shè)計及描述單片機、74ls240、步進電機。p0口的低4位送出勵磁電平,74ls240作為驅(qū)動電路。接線圖如下。2.3. 軟件設(shè)計流程及描述#includeunsigned char lvalue8=0x0e,0x0c,0x0d,0x09,0x0b,0x03,0x07,0x06;void delay()/延時程序unsigned int i;for(i=0;i43000;i+);void main()unsigned char m,n

8、;p0=0;/p0口清零while(1)for(n=0;n12;n+)/電機正轉(zhuǎn)for(m=0;m8;m+)p0=lvaluem;delay();for(n=0;n0;m-)p0=lvaluem-1;delay();2.4. 綜合調(diào)試結(jié)果分析與展示步進電機正轉(zhuǎn)一會,然后反轉(zhuǎn)一會。3. 直流電機pwm調(diào)速系統(tǒng)3.1. 工作原理通過調(diào)節(jié)脈沖寬度,改變占空比,從而改變輸出,達到改變直流電機轉(zhuǎn)速的目的。3.2. 硬件電路設(shè)計及描述單片機、uln2003a、直流電機、12v電源。單片機p1.7輸出pwm波,經(jīng)過uln2003a驅(qū)動,加到直流電機上,改變pwm波占空比,即可改變輸出電壓平均值大小,從而改變

9、電機轉(zhuǎn)速。接線圖如下。3.3. 軟件設(shè)計流程及描述#include#define n 6/n不能大于10sbit p17=p17;/p1.7輸出pwm波unsigned char i=0;void main()tmod=0x01;/定時器t0,方式1th0=0xd8;tl0=0xf0;/定時10ms產(chǎn)生中斷ea=1;et0=1;tr0=1;/開啟中斷p17=1;/先置高電平while(1);void time0() interrupt 1/中斷程序th0=0xd8;tl0=0xf0; /重裝初值i+;if(i=n)p17=0;/決定pwm波占空比if(i=10)p17=1;i=0;3.4. 綜

10、合調(diào)試結(jié)果分析與展示改變程序中n的值即可改變占空比進行調(diào)速。4. 點陣led廣告屏設(shè)計(題目4)4.1. 工作原理1616led點陣由四塊88led點陣組成??刂泣c陣的掃描顯示,使1616led點陣循環(huán)顯示漢字。例如:新年好,同學(xué)們好,歡迎您。4.2. 硬件設(shè)計電路及描述單片機、4塊74ls541、4塊88led。p0口經(jīng)74ls541驅(qū)動接前8行l(wèi)ed,p2口經(jīng)驅(qū)動接后8行,p3口經(jīng)驅(qū)動接前8列,p1口經(jīng)驅(qū)動接后8列。4.3. 軟件設(shè)計流程及描述#include sst89x5x4.h#include hzdot1.h/要顯示的字模文件#includevoid delay(void)/ 延時

11、程序unsigned char i;for(i=0; i60; i+);void clear(void)/ 清屏p3 = 0x00; /前8列p1 = 0x00; /p0 = 0xff; /p2 = 0xff; /void main(void)unsigned char scan=0xfe, i, j;unsigned int count=0;clear();while(1)for(i=0; i50; i+)/每16行重復(fù)掃描50次for(j=0; j8; j+)p0 = scan;/ 0-7行p3 = hzdotcount;/ 0-7列p1 = hzdotcount+1;/ 8-15列cou

12、nt+=2;scan = _crol_(scan,1);/ 行掃delay();p0 = 0xff;for(j=0; j8; j+)p2 = scan;/ 8-15行p3 = hzdotcount;p1 = hzdotcount+1;count+=2;scan = _crol_(scan,1);/ 行掃delay();p2 = 0xff;count-=32;count+=2; /向上滾動一行if(count = (192-32) count=0;/最后一個字完全顯示后,又從第一個字開始顯示字模文件hzdot1.hunsigned char code hzdot320 = 0x80,0x00,0

13、x80,0x00,0xfe,0x3f,0xc0,0x01,0xa0,0x02,0x90,0x04,0x8c,0x18,0x83,0x60,0xf0,0x07,0x00,0x02,0x00,0x01,0xff,0x7f,0x80,0x00,0x80,0x00,0xa0,0x00,0x40,0x00,/*李,0*/0x10,0x00,0x90,0x3f,0x10,0x22,0x7e,0x22,0x10,0x22,0x10,0x29,0xff,0x10,0x10,0x3f,0x14,0x21,0x14,0x21,0x74,0x21,0x14,0x3f,0x14,0x00,0x1a,0x00,0xf2

14、,0x7f,0x01,0x00,/*超,1*/0x80,0x00,0x40,0x00,0x20,0x00,0xf8,0x0f,0x08,0x08,0x08,0x08,0x08,0x08,0xf8,0x0f,0x08,0x08,0x08,0x08,0xf8,0x0f,0x08,0x08,0x08,0x08,0x08,0x08,0xf8,0x0f,0x08,0x08,/*自,2*/0x08,0x02,0x08,0x04,0x08,0x04,0xc8,0x7f,0x5f,0x40,0x28,0x29,0x88,0x10,0x58,0x20,0x0c,0x00,0x8b,0x3f,0x08,0x04,

15、0x08,0x04,0x08,0x04,0x08,0x04,0xea,0x7f,0x04,0x00,/*控,3*/0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x24,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x64,0x42,0x58,0x42,0x40,0x42,0x40,0x24,0x24,0x18,0x1c,0x00,0x00,0x00,0x00,/*09,4*/0x00,0x00,0x00,0x00,0x00,0x00,0x18,0x20,0x24,0x30,0x42,0x28,0x42,0x24,0x42,

16、0x24,0x42,0x22,0x42,0x22,0x42,0x7e,0x42,0x20,0x24,0x20,0x18,0x78,0x00,0x00,0x00,0x00,/*04,5*/;4.4. 綜合調(diào)試結(jié)果分析及展示1616led顯示屏向上滾動顯示“李超自控0904”6個字。5. 溫度顯示系統(tǒng)設(shè)計(題目6)5.1. 工作原理1) 利用數(shù)字溫度傳感器ds18b20,測量環(huán)境溫度,并在二位led數(shù)碼管上顯示實時溫度值。2) 使用adc0809通道in1作為報警值輸入。按下s1鍵,cpu從in1通道讀入報警值顯示在數(shù)碼管上。放開s1鍵時將此時的in1采樣值作為報警值。使用s1設(shè)置高限報警溫度值。

17、3) 可以通過按鍵設(shè)定高限報警溫度值和低限報警溫度值。當(dāng)外界溫度高于設(shè)定最高溫度時,啟動風(fēng)扇降溫:發(fā)出短嘀報警聲和光報警。當(dāng)外界溫度低于指定最低溫度時,發(fā)出長嘀報警聲,并點亮報警指示燈。低限報警溫度值可用鍵盤設(shè)置。5.2. 硬件設(shè)計電路及描述單片機,3個數(shù)碼管,一個數(shù)字溫度傳感器ds18b20,紅、綠led各一個,蜂鳴器,按鍵。具體連線見后面結(jié)果展示。5.3. 軟件設(shè)計流程及描述#include#define uchar unsigned char#define uint unsigned intsbit dq=p20;sbit red=p25;sbit green=p26;sbit fm=p

18、27;sbit fu=p07;union uchar c2; uint x; temp;uchar flag;uint cc;void delay(uint s) for(;s0;s-); uchar reset() uchar p; dq=0; delay(50);dq=1; delay(3);p=dq; delay(25);return(p);uchar read_b() uchar i; uchar value=0;for(i=8;i0;i-) value=1; dq=0; dq=1; delay(1); if(dq) value|=0x80; delay(6);return(value

19、);void write_b(uchar val)uchar i;for(i=8;i0;i-)dq=0; dq=val&0x01; delay(5); dq=1; val=val/2; delay(5);uchar read_temperature()reset();write_b(0xcc);write_b(0x44);reset();write_b(0xcc); write_b(0xbe);temp.c1=read_b();temp.c0=read_b();return(temp.x/2);void s_p(uchar x,uchar y)uchar codevalue10=0x3f,0x

20、06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;p0=codevaluex;p1=codevaluey;if(flag=1)fu=1; void main()red=0;green=0;p0=0x00;p1=0x00;ea=1;it0=1;ex0=1;while(1);void int_x0() interrupt 0uchar j;uchar a,b;read_temperature();cc=temp.c0*256+temp.c1;if(temp.c00xf8)flag=1;cc=cc+1;cc=cc/16;a=(int)cc%10; b=(int)c

21、c/10)%10;s_p(a,b);if(cc30)red=1;for(j=0;j3;j+)fm=0;delay(50000);fm=1;delay(50000);red=0;fm=1;if(cc0|flag=1)green=1;for(j=0;j5;j+)fm=0;delay(50000);green=0;fm=1;flag=0;5.4. 綜合調(diào)試結(jié)果分析與展示6. 字符型lcd顯示設(shè)計(題目7)6.1. 工作原理1) 在液晶顯示器上顯示字符串、數(shù)字等,并循環(huán)動態(tài)顯示。如顯示“happy new year!”2) 按下不同按鈕,顯示內(nèi)容改變。6.2. 硬件設(shè)計電路及描述單片機,lcd顯示屏,

22、按鍵控制顯示內(nèi)容。具體接線見后面結(jié)果展示。6.3. 軟件設(shè)計流程及描述org 0000hljmp mainorg 0003hljmp loop2org 0030hrs bit p3.5rw bit p3.6e bit p3.7lcd equ p1main:acall init_lcdsetb it0setb ex0setb ealoop1:acall delaymov lcd,#81hacall wr_commov dptr,#line1mov r0,#6acall disp_lcdacall delaymov lcd,#0c0hacall wr_commov dptr,#line2mov r

23、0,#15acall disp_lcdacall delayacall clsjmp loop1loop2:acall clsmov r3,#02hll2:acall delaymov lcd,#80hacall wr_commov dptr,#line3mov r0,#16acall disp_lcdacall delaymov lcd,#0c0hacall wr_commov dptr,#line4mov r0,#10acall disp_lcdacall delayacall clsdjnz r3,ll2retiinit_lcd:mov lcd,#00000001bacall wr_co

24、mmov lcd,#00111000bacall wr_commov lcd,#00001111bacall wr_commov lcd,#00000110bacall wr_comretwr_com:clr rsclr rwclr eacall check_bfsetb eretcheck_bf:mov lcd,#0ffhclr rssetb rwclr enopsetb ejb lcd.7,check_bfretwr_data:setb rsclr rwclr eacall check_bfsetb eretdisp_lcd:mov r1,#0loop:mov a,r1movc a,a+d

25、ptrmov lcd,ainc r1acall wr_datadjnz r0,loopretcls:mov lcd,#00000001bacall wr_comretdelay:mov r5,#100d1:mov r6,#100d2:mov r7,#100djnz r7,$djnz r6,d2djnz r5,d1retline1:db hello!line2:db welcome to lcd!line3:db nice to see you!line4:db good luck!end6.4. 綜合調(diào)試結(jié)果分析與展示循環(huán)顯示內(nèi)容:按下鍵后顯示內(nèi)容如下:7. 數(shù)字鐘設(shè)計(題目11)7.1. 工

26、作原理1) 系統(tǒng)運行從00點00分00秒開始計時,并在六個數(shù)碼管上動態(tài)顯示時、分、秒當(dāng)前值。2) 用鍵盤設(shè)置當(dāng)前時間。紅色發(fā)光二極管是秒燈,每閃爍一次表示時間走動一秒鐘。綠色發(fā)光二極管是設(shè)置燈,當(dāng)時間正常走動時此燈不亮,當(dāng)?shù)谝淮伟聪略O(shè)置鍵時,設(shè)置燈亮,分鐘的兩位數(shù)碼管出現(xiàn)閃爍,時間停止走動,進入校時狀態(tài),表示此時可以進行分鐘的調(diào)整,當(dāng)按一次加1鍵,可實現(xiàn)分鐘加1功能。如果再次按下設(shè)置鍵時,秒燈保持熄滅,設(shè)置燈保持點亮狀態(tài),表示分鐘的數(shù)碼管停止閃爍,表示小時的兩位數(shù)碼管則開始閃爍,此時可進行小時的調(diào)整,按加1鍵可實現(xiàn)小時的加1功能,小時調(diào)整以24為上限,超出24小時則重新回0。當(dāng)?shù)谌伟聪略O(shè)置鍵

27、時,數(shù)碼管停止閃爍,設(shè)置燈熄滅,秒燈重新閃爍,時間以設(shè)置值開始計時。3) 可以設(shè)置鬧鈴時間為:07:30:00蜂鳴器發(fā)音。7.2. 硬件設(shè)計電路及描述單片機,7段8位數(shù)碼管,蜂鳴器作為鬧鈴發(fā)聲,按鍵來設(shè)置時間。具體接線見后面結(jié)果展示。7.3. 軟件設(shè)計流程及描述#include unsigned char code codevalue=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00; unsigned char dispbitcode=0xfe,0xfd,0xfb,0xf7

28、,0xef,0xdf,0xbf,0x7f; unsigned char dispbuf8=0,0,16,0,0,16,0,0; unsigned char dispbitcnt=0;unsigned char mstcnt=0;unsigned char second; unsigned char minite; unsigned char hour; unsigned int tcnt; unsigned char i,j;sbit p1_0=p10;sbit p1_1=p11;sbit p1_2=p12;sbit fm=p17; void main(void) tmod=0x02; th0

29、=0x06; tl0=0x06; tr0=1; et0=1; ea=1; ex0=1; it0=1; hour=0; while(1) if(p1_0=0) for(i=5;i0;i-) for(j=248;j0;j-); if(p1_0=0) second+; if(second=60) second=0; dispbuf0=second%10; dispbuf1=second/10; while(p1_0=0); if(p1_1=0) for(i=5;i0;i-) for(j=248;j0;j-); if(p1_1=0) minite+; if(minite=60) minite=0; d

30、ispbuf3=minite%10; dispbuf4=minite/10; while(p1_1=0); if(p1_2=0) for(i=5;i0;i-) for(j=248;j0;j-); if(p1_2=0) hour+; if(hour=24) hour=0; dispbuf6=hour%10; dispbuf7=hour/10; while(p1_2=0); if(hour=7&minite=30&second=00) fm=0; for(i=100;i0;i-) for(j=248;j0;j-); fm=1; void t0(void) interrupt 1 mstcnt+;

31、if(mstcnt=8) mstcnt=0; p2=0xff; /關(guān)閉所有顯示 p0=codevaluedispbufdispbitcnt; p2=dispbitcodedispbitcnt; dispbitcnt+; if(dispbitcnt=8) dispbitcnt=0; ; tcnt+; if(tcnt=4000) tcnt=0; second+; if(second=60) second=0; minite+; if(minite=60) minite=0; hour+; if(hour=24) hour=0; dispbuf0=second%10; dispbuf1=second

32、/10; dispbuf3=minite%10; dispbuf4=minite/10; dispbuf6=hour%10; dispbuf7=hour/10; 7.4. 綜合調(diào)試結(jié)果分析與展示臺8. 電梯控制系統(tǒng)簡易模型設(shè)計(題目14)8.1. 工作原理1) 電梯的起始位置為一樓,等待控制start按鍵按下,數(shù)碼管顯示“1”。2) 當(dāng)start按鍵按下后,電梯開始向上運動,控制臺的上升指示燈up亮。2秒后到達二樓,數(shù)碼管顯示“2”,并在二樓停留5秒,然后繼續(xù)上升。每樓層停留5秒,直到1樓。然后重復(fù)上述過程。3) 如果在一個上下循環(huán)中按下stop鍵,電梯下降到一樓后停止工作。直到再次按下sta

33、rt鍵后重新恢復(fù)工作。8.2. 硬件設(shè)計電路及描述單片機,一個7段數(shù)碼管顯示樓層號,紅、綠led燈對應(yīng)上、下方向,兩個按鍵控制走、停。具體連線見結(jié)果展示。8.3. 軟件設(shè)計流程及描述#include#define uint unsigned int#define uchar unsigned charuchar flag;uchar codevalue=0x06,0x06,0x5b,0x4f,0x66,0x66;sbit up=p20;sbit down=p21;void delay_1ms(uint x)/延時x*1ms uint i; uchar j; for(i = 0; i x; i+

34、) for(j = 0; j = 148; j+); void main()uchar i;ea=1;it0=1;it1=1;ex0=1;ex1=1;p2=0x00;p0=0x06;flag=0;while(1)if(flag=1) for(i=1;i0;i-)down=1;p0=codevaluei;delay_1ms(5000);p0=codevaluei-1;delay_1ms(2000);down=0; void ex_int0() interrupt 0flag=1;void ex_int1() interrupt 2flag=0;8.4. 綜合調(diào)試結(jié)果分析與展示9. 智力競賽搶答器

35、(題目21)9.1. 工作原理當(dāng)主持人按下?lián)尨痖_始按鈕k發(fā)布搶答命令后,8位參賽選手通過按下各自的搶答按鈕進行搶答。哪位選手最先按下?lián)尨鸢粹o,數(shù)碼管就顯示其對應(yīng)的號碼,蜂鳴器發(fā)音。表示該名選手搶答成功,并且鎖定,其他參賽選手本輪無法再進行搶答。在主持人發(fā)布完下一道題,再次發(fā)出搶答命令前,要先按下?lián)尨鸢粹o,以清除上次搶答號碼,同時開放各按鈕,以備參賽選手進行下一道題的搶答。9.2. 硬件設(shè)計電路及描述單片機,8個開關(guān)按鈕用于選手搶答,按鍵2個主持人控制鍵,一個7段數(shù)碼管顯示用,蜂鳴器。具體連線見后面結(jié)果展示。9.3. 軟件設(shè)計流程及描述#include#define uint unsigned

36、int#define uchar unsigned charsbit fm=p20;uchar codevalue10=0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f;void delay(uint j)for(;j0;j-);void main()ea=1;it0=1;it1=1;ex0=1;ex1=1;p0=0x3f;while(1);void start() interrupt 0uchar i,j;i=p1;while(i=0xff)i=p1;i=i;if(i=1)j=0;else if(i=2)j=1;else if(i=4)j=2;else if(i

37、=8)j=3;else if(i=16)j=4;else if(i=32)j=5;else if(i=64)j=6;else j=7;p0=codevaluej;fm=0;delay(60000);fm=1;void clear() interrupt 2p0=0x3f;9.4. 綜合調(diào)試結(jié)果分析與展示10. 進制轉(zhuǎn)換設(shè)計(題目23)10.1. 工作原理1) 開始無輸入時,4個led閃爍顯示0.2) 通過44矩陣編碼鍵盤連續(xù)輸入不多于4位(0到9共十個鍵)十進制數(shù)。3) 數(shù)碼管顯示相應(yīng)的十進制數(shù)(高位在前,低位在后)。4) 輸入其他數(shù)值(af)時蜂鳴器發(fā)出錯誤提示聲音,該輸入不被接收,繼續(xù)接收

38、后續(xù)數(shù)據(jù)。5) 選擇一個功能鍵,作為確認(rèn)命令鍵,當(dāng)按下該鍵,單片機將轉(zhuǎn)換結(jié)果以十六進制的方式顯示。6) 當(dāng)輸入位數(shù)超過4位時發(fā)出警告聲音。7) 設(shè)置一個清除鍵,取消以前輸入的所有數(shù)據(jù)。10.2. 硬件設(shè)計電路及描述單片機,7段8位數(shù)碼管,16個按鍵鍵盤輸入用,蜂鳴器出錯提示。具體連線見結(jié)果展示。10.3. 軟件設(shè)計流程及描述#include #include #define uint unsigned int #define uchar unsigned charsbit fm=p30;uchar wei;uchar code table10 = 0xc0, 0xf9, 0xa4, 0xb0,

39、 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90; uchar store4; void delay_1ms(uint x) uint i; uchar j; for(i = 0; i x; i+) for(j = 0; j = 148; j+); uchar keyscan(void) uchar i, j, temp, buffer4 = 0xef, 0xdf, 0xbf, 0x7f; for(j = 0; j 4; j+) /循環(huán)四次 p1 = bufferj; /在p1高四位分別輸出一個低電平 temp = 0x01; /計劃先判斷p1.0位 for(i = 0;

40、 i 4; i+) /循環(huán)四次 if(!(p1 & temp) /從p1低四位,截取1位 return (i + j * 4); /返回取得的按鍵值 temp = 1; /判斷的位,左移一位 return 16; /判斷結(jié)束,沒有鍵按下,返回16 void display() uchar j=0x08,m,k; for(m=0;m1;delay_1ms(5);void main(void) uchar key_value = 0, key_temp1, key_temp2; /兩次讀出的鍵值 ea=1; it0=1; it1=1; ex0=1; ex1=1;while(1) /-以下讀入按鍵、

41、消抖、等待按鍵釋放 p1 = 0xff; key_temp1 = keyscan(); /先讀入按鍵 if(key_temp1 != 16) /如果有鍵按下 if(key_temp1 9) fm=0;delay_1ms(100);fm=1;continue; if(wei3) fm=0;delay_1ms(100);fm=1;continue; display(); /可用顯示代替延時 key_temp2 = keyscan(); /再讀一次按鍵 if (key_temp1 = key_temp2) key_value = key_temp1; storewei+=key_value; /才保

42、存下來,這就是消除抖動 while(keyscan() 16) /等待按鍵釋放 display(); /等待期間顯示鍵值/-以下是對按鍵的處理 display(); /顯示鍵值 display(); /沒有按鍵按下,也顯示鍵值 void clear_int1(void) interrupt 2 /清除鍵wei=0;store0=0;store1=0;store2=0;store3=0;void transport_int0(void) interrupt 0 /轉(zhuǎn)換鍵uint i;i=store0*1000+store1*100+store2*10+store3;store3=i%16;sto

43、re2=(i/16)%16;store1=(i/256)%16;store0=(i/4096)%16;10.4. 綜合調(diào)試結(jié)果分析與展示轉(zhuǎn)換之前輸入的數(shù):轉(zhuǎn)換之后輸出的數(shù):11. 簡易秒表設(shè)計(題目27)11.1. 工作原理采用兩位led顯示,顯示時間為0099秒。一個開始按鍵、一個復(fù)位按鍵、一個暫停按鍵。啟動后按一次暫停按鈕記錄一個中間時間,最多可記錄5個中間時間。按翻頁按鍵可查看不同的中間時間。11.2. 硬件設(shè)計電路及描述單片機,7448作驅(qū)動,2個7段數(shù)碼管,3個開關(guān),一個按鍵。具體連線見后面的結(jié)果展示。11.3. 軟件設(shè)計流程及描述#include#define uint unsig

44、ned int#define uchar unsigned charsbit st=p35;sbit clr=p36;sbit pause=p37;uchar table5;uchar i=0;uchar g=0;void delay_1ms(uint x)/延時x*1ms uint i; uchar j; for(i = 0; i x; i+) for(j = 0; j = 148; j+); void main(void)uchar j;uint c;p2=0x00;ea=1;it0=1;ex0=1;while(st=1) while(st=1)delay_1ms(30); while(i!=100) j=(i/10)%10; j=j4; j=j|(i%10)&0x0f); p2=j; i+;for(c=0;c999;c+) delay_1ms(1); while(pause=0) delay_1ms(30); while(clr=0) i=0;delay_1ms(30);p2=0x00; void ex_int0() interrupt 0uchar j,k;if(g6) tableg=i; g+; else for(k=0;k5;k+) j=(tablek/1

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論