版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 單</b></p><p><b> 片</b></p><p><b> 機(jī)</b></p><p><b> 課</b></p><p><b> 程</b></p><p
2、><b> 設(shè)</b></p><p><b> 計(jì)</b></p><p><b> 報(bào)</b></p><p><b> 告</b></p><p><b> 一、目的與意義</b></p><
3、p> 《單片微機(jī)原理及應(yīng)用》是一門技術(shù)性、應(yīng)用性很強(qiáng)的學(xué)科,實(shí)驗(yàn)課教學(xué)是它的一個(gè)極其重要的環(huán)節(jié)。不論是硬件擴(kuò)展、接口應(yīng)用還是編程方法、程序調(diào)試,都離不開實(shí)驗(yàn)課教學(xué)。如果不在切實(shí)認(rèn)真地抓好學(xué)生的實(shí)踐技能的鍛煉上下功夫,單憑課堂理論課學(xué)習(xí),勢必出現(xiàn)理論與實(shí)踐脫節(jié),學(xué)習(xí)與應(yīng)用脫節(jié)的局面。任隨書本上單片微機(jī)技術(shù)介紹得多么重要、多么實(shí)用、多么好用,同學(xué)們?nèi)匀粫?huì)感到那只是空中樓閣,離自己十分遙遠(yuǎn),或者會(huì)因此對它失去興趣,或者會(huì)感到它高深莫測
4、無從下手,這些情況都會(huì)令課堂教學(xué)的效果大打折扣。</p><p> 《單片微機(jī)課程設(shè)計(jì)》的目的就是讓同學(xué)們在理論學(xué)習(xí)的基礎(chǔ)上,通過完成一個(gè)涉及MCS-51單片機(jī)多種資源應(yīng)用并具有綜合功能的小系統(tǒng)目標(biāo)板的設(shè)計(jì)與編程應(yīng)用,使學(xué)生不但能夠?qū)⒄n堂上學(xué)到的理論知識與實(shí)際應(yīng)用結(jié)合起來,而且能夠?qū)﹄娮与娐?、電子元器件、印制電路板等方面的知識進(jìn)一步加深認(rèn)識,同時(shí)在軟件編程、排錯(cuò)調(diào)試、焊接技術(shù)、相關(guān)儀器設(shè)備的使用技能等方面 得到
5、較全面的鍛煉和提高,為今后能夠獨(dú)立進(jìn)行單片機(jī)應(yīng)用系統(tǒng)的開發(fā)設(shè)計(jì)工作打下一定的基礎(chǔ)。</p><p><b> 二、硬件電路圖</b></p><p><b> 1、主板</b></p><p><b> 2、四位數(shù)碼管</b></p><p> 3、八位LED流水燈&l
6、t;/p><p><b> 4、蜂鳴器</b></p><p><b> 5、串口</b></p><p><b> 三、程序流程圖</b></p><p> 五、實(shí)現(xiàn)的功能及現(xiàn)象</p><p><b> 1、鍵盤掃描輸入</b&
7、gt;</p><p> 當(dāng)程序運(yùn)行時(shí),自動(dòng)檢測是否有按鍵按下,是哪個(gè)按鍵按下,并且通過返回值,在四位數(shù)碼管上顯示出按下鍵所對應(yīng)的數(shù)字、字母或執(zhí)行相應(yīng)的功能。</p><p><b> 2、四位數(shù)碼管顯示</b></p><p> 通過四位數(shù)碼管顯示相應(yīng)的按鍵值、提示語或者執(zhí)行相關(guān)功能。</p><p><b
8、> 3、八位流水燈</b></p><p> 程序運(yùn)行時(shí),當(dāng)按下“B”功能鍵,八位流水燈依次循環(huán)點(diǎn)亮熄滅。</p><p><b> 4、秒表</b></p><p> 程序運(yùn)行時(shí),當(dāng)按下“C”功能鍵,數(shù)碼管清零,從零開始逐秒增加。</p><p><b> 5、串口通信</b
9、></p><p> 程序運(yùn)行時(shí),當(dāng)按下“F”功能鍵,數(shù)碼管顯示“232C”,提示進(jìn)行串口輸入,當(dāng)從串口助手中輸入控制字符時(shí),八位LED燈得到對應(yīng)的結(jié)果。例如:當(dāng)輸入“00”時(shí),八位燈全亮;當(dāng)輸入“AA”時(shí),八位燈間隔亮。</p><p> 6、蜂鳴器做按鍵提示音</p><p> 程序運(yùn)行時(shí),除串口功能鍵“F”外,按下任意鍵,在執(zhí)行功能的同時(shí),會(huì)有短暫
10、的“滴”聲,當(dāng)執(zhí)行秒表功能時(shí),蜂鳴器會(huì)持續(xù)發(fā)聲,直到秒表停止。</p><p><b> 六、收獲體會(huì)</b></p><p> 通過這次單片機(jī)課程設(shè)計(jì),我對單片機(jī)系統(tǒng)設(shè)計(jì)更加熟悉,初步學(xué)會(huì)了單片機(jī)程序的編程及調(diào)試和主板硬件的焊接技術(shù)。在這個(gè)過程中,我認(rèn)識到,單片機(jī)的學(xué)習(xí)需要有耐心,并且持之以恒,堅(jiān)持不懈,同時(shí)還要不斷進(jìn)行嘗試,不要害怕犯錯(cuò),要在錯(cuò)誤中學(xué)習(xí)、進(jìn)步。
11、</p><p> 其中,最困難的就是程序的編寫與調(diào)試,因?yàn)椋瑢懞靡粋€(gè)程序,往往需要很長時(shí)間,之后還需要不斷的調(diào)試,才能得到理想的結(jié)果。還有就是,要實(shí)現(xiàn)一個(gè)單獨(dú)的功能比較容易,然而,把這些功能綜合到一起,就會(huì)出現(xiàn)問題,會(huì)出現(xiàn)很多沖突,最后只好放棄一些功能。所以我們在設(shè)計(jì)和編寫程序的時(shí)候都必須充分考慮到這些因素,才能得到理想的效果。</p><p><b> 附:實(shí)驗(yàn)程序<
12、;/b></p><p> #include<reg52.h></p><p> #include<string.h></p><p> #include<absacc.h></p><p> #define WR273 XBYTE[0xc000]</p><p>
13、#define RD244 XBYTE[0xc000]</p><p> #define dis_play XBYTE[0Xa000]=XBYTE[0Xb000]=XBYTE[0X9000]=XBYTE[0X8000]</p><p> #define uchar unsigned char</p><p> #define uint unsigned int
14、</p><p><b> uchar t1;</b></p><p> uchar x,flag;</p><p> sbit c=P0^1;</p><p> void Delay(uint z);</p><p> /////////////////////////////////
15、///////////////</p><p> uchar m,fen,miao,t,temp;</p><p> uchar dis_16_1[]={</p><p> 0xC0,0xF9,0xA4,0xB0,</p><p> 0x99,0x92,0x82,0xF8,</p><p> 0x80,0x9
16、0,0x88,0x83,</p><p> 0xC6,0xA1,0x86,0x8E};//無小數(shù)點(diǎn)</p><p> uchar dis_16_2[]={</p><p> 0x40,0x79,0x24,0x30,</p><p> 0x19,0x12,0x02,0x78,</p><p> 0x00,0x1
17、0,0x08,0x03,</p><p> 0x46,0x21,0x06,0x0E};//含有小數(shù)點(diǎn)</p><p> uchar dis_10[]={0xff,</p><p> 0xF9,0xA4,0xB0,0x99,0x92,//1~5</p><p> 0x82,0xF8,0x80,0x90,0xC0,//6~0</p&
18、gt;<p> 0x88,0x83,0xC6,0xA1,0x86,0x8E};//A~F </p><p> /////////////////////////////////////////</p><p> uchar key_test()</p><p><b> {</b></p><p&g
19、t; WR273=0xf0;</p><p> if((RD244&0x0f)!=0x0f)</p><p><b> {</b></p><p><b> return 1;</b></p><p><b> c=0;</b></p><
20、p><b> }</b></p><p> else return 0;</p><p><b> }</b></p><p> /////////////////////////////////////////////</p><p> void time_init()</p
21、><p><b> {</b></p><p> TMOD=0x01;</p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p> EA=1;ET0=1;TR0=1;</p><p>
22、; XBYTE[0x8000]=0xc7;</p><p> XBYTE[0x9000]=0xc7;</p><p> XBYTE[0xa000]=0x86;</p><p> XBYTE[0xb000]=0x89;</p><p><b> }</b></p><p> void t
23、ime_dis()</p><p><b> {</b></p><p> XBYTE[0x8000]=dis_16_1[m%10];</p><p> XBYTE[0x9000]=dis_16_2[miao%10];</p><p> XBYTE[0xa000]=dis_16_1[miao/10];</p
24、><p> XBYTE[0xb000]=dis_16_2[fen%10];</p><p><b> }</b></p><p> void time_work()</p><p><b> {</b></p><p><b> if(t1==2)</
25、b></p><p><b> {</b></p><p><b> t1=0;m++;</b></p><p><b> if(m==10)</b></p><p><b> {</b></p><p> m=0;
26、miao++;</p><p> if(miao==60)</p><p><b> {</b></p><p> miao=0;fen++;</p><p> if(fen==10)fen=0;</p><p><b> }</b></p><
27、p><b> } </b></p><p><b> }</b></p><p> time_dis(); </p><p><b> }</b></p><p> /////////////////////////////////////////
28、////////延時(shí)</p><p> void Delay(uint z)</p><p><b> {</b></p><p><b> uint y;</b></p><p> for(;z>0;z--)</p><p><b> {</
29、b></p><p> for(y=110;y>0;y--);</p><p><b> }</b></p><p><b> }</b></p><p> //////////////////////////////////////////////// 鍵盤掃描</p&
30、gt;<p> void scan(uchar value,uchar num,uchar *p)</p><p><b> {</b></p><p> uchar key;</p><p> XBYTE[0Xc000]=value;</p><p> key=XBYTE[0Xc000];<
31、;/p><p> if((key&0X01)!=0X01)</p><p><b> {</b></p><p> Delay(2);key=XBYTE[0Xc000];</p><p> if((key&0X01)!=0X01) *p=1+num;</p><p><
32、b> } </b></p><p> if((key&0X02)!=0X02)</p><p><b> {</b></p><p> Delay(2);key=XBYTE[0Xc000];</p><p> if((key&0X02)!=0X02) *p=5+num;<
33、;/p><p><b> }</b></p><p> if((key&0X04)!=0X04)</p><p><b> {</b></p><p> Delay(2);key=XBYTE[0Xc000];</p><p> if((key&0X04
34、)!=0X04) *p=9+num;</p><p><b> } </b></p><p> if((key&0X08)!=0X08)</p><p><b> {</b></p><p> Delay(2);key=XBYTE[0Xc000];</p><p
35、> if((key&0X08)!=0X08) *p=13+num;</p><p><b> } </b></p><p><b> }</b></p><p> uchar key_scan()</p><p><b> {</b></p>
36、<p> uchar key_value;</p><p> scan(0Xf7,0,&key_value);//第一列</p><p> scan(0Xfb,1,&key_value);//第二列</p><p> scan(0Xfd,2,&key_value);//第三列</p><p>
37、scan(0Xfe,3,&key_value);//第四列</p><p> return key_value;</p><p><b> }</b></p><p> ///////////////////////////////////////////////////////////////</p><p&
38、gt; //////////////////////////////////////////////////////////////串口</p><p> void serial_init()</p><p><b> {</b></p><p> TMOD=0x20;//定時(shí)器一為工作方式二</p><p>
39、 SM0=0;SM1=1;REN=1;</p><p> TH1=0xf4;TL1=0xf4;</p><p> TR1=1;ES=1;EA=1;</p><p><b> }</b></p><p> void serial()</p><p><b> {</b>
40、;</p><p> serial_init();</p><p><b> while(1)</b></p><p><b> {</b></p><p> if(flag==1)</p><p><b> {</b></p>
41、<p><b> flag=0;</b></p><p><b> ES=0;</b></p><p><b> SBUF=x;</b></p><p> while(!TI);</p><p><b> TI=0;</b></p
42、><p><b> ES=1;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> void ser() interrupt 4</
43、p><p><b> {</b></p><p><b> RI=0;</b></p><p><b> P1=SBUF;</b></p><p><b> x=SBUF;</b></p><p><b> flag
44、=1;</b></p><p><b> }</b></p><p> /////////////////////////////////////////////////////////////</p><p> /////////////////////////////////////////////////////////
45、///</p><p> void lsd() //流水燈</p><p><b> {</b></p><p> uchar temp,i;</p><p> temp=0xfe;</p><p><b> while(1)</b></p>&l
46、t;p><b> { </b></p><p> if(key_test())</p><p><b> return;</b></p><p> for(i=0;i<8;i++)</p><p><b> {</b></p><p&
47、gt; if(key_test())</p><p><b> return;</b></p><p><b> P1=temp;</b></p><p> Delay(100);</p><p> temp=(temp<<1)|0x01;</p><p&g
48、t;<b> }</b></p><p> temp=0x7f;</p><p> for(i=7;i>0;i--)</p><p><b> {</b></p><p> if(key_test())</p><p><b> return;&l
49、t;/b></p><p><b> P1=temp;</b></p><p> Delay(100);</p><p> temp=(temp>>1)|0x80;</p><p><b> }</b></p><p><b> } &
50、lt;/b></p><p><b> } </b></p><p> //////////////////////////////////////////</p><p> void key_firm()</p><p><b> {</b></p><p>
51、 temp=key_scan();</p><p> switch(temp)</p><p><b> {</b></p><p> case 1: dis_play=dis_10[temp]; break;//1</p><p> case 2: dis_play=dis_10[temp]; break
52、;//2</p><p> case 3: dis_play=dis_10[temp]; break;//3</p><p> case 4: dis_play=dis_10[temp]; break;//4</p><p> case 5: dis_play=dis_10[temp]; break;//5</p><p> c
53、ase 6: dis_play=dis_10[temp]; break;//6</p><p> case 7: dis_play=dis_10[temp]; break;//7</p><p> case 8: dis_play=dis_10[temp]; break;//8</p><p> case 9: dis_play=dis_10[temp
54、]; break;//9</p><p> case 10: dis_play=dis_10[temp]; break;//0</p><p> case 11: dis_play=dis_10[temp]; break;//A</p><p> case 12: lsd(); break;//流水燈</p><p>
55、; case 13: time_work(); break;//秒表</p><p> case 15: time_init(); break;//復(fù)位</p><p> case 16: {XBYTE[0x8000]=0xc6;XBYTE[0x9000]=0xa4;</p><p> XBYTE[0xa000]=0xb0;XBYTE[0xb00
56、0]=0xa4;</p><p> serial();}break;//串口</p><p><b> }</b></p><p><b> }</b></p><p> void main()</p><p><b> {</b><
57、;/p><p> time_init();</p><p><b> while(1)</b></p><p><b> {</b></p><p> key_firm();</p><p><b> }</b></p><p&
58、gt;<b> }</b></p><p> void time_sm() interrupt 1/*定時(shí)器0中斷程序,定時(shí)50毫秒*/</p><p><b> {</b></p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《單片機(jī)課程設(shè)計(jì)》報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)數(shù)字時(shí)鐘
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)秒表系統(tǒng)設(shè)計(jì)
- 單片機(jī)課程設(shè)計(jì)報(bào)告——單片機(jī)控制步進(jìn)電機(jī)
- 單片機(jī)課程設(shè)計(jì)報(bào)告---單片機(jī)控制秒表系統(tǒng)
- 單片機(jī)課程設(shè)計(jì)報(bào)告doc
- 單片機(jī)課程設(shè)計(jì)課題報(bào)告
- btec單片機(jī)課程設(shè)計(jì)報(bào)告
- 單片機(jī)應(yīng)用課程設(shè)計(jì)報(bào)告
- 單片機(jī)課程設(shè)計(jì)報(bào)告 (2)
- 單片機(jī)課程設(shè)計(jì)報(bào)告-日歷
- 單片機(jī)課程設(shè)計(jì)報(bào)告蜂鳴器
- 單片機(jī)課程設(shè)計(jì)報(bào)告 (2)
- 單片機(jī)課程設(shè)計(jì)實(shí)習(xí)報(bào)告
評論
0/150
提交評論