版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> 《單片機課程設計》</b></p><p><b> 課</b></p><p><b> 程</b></p><p><b> 設</b></p><p><b> 計</b></p>
2、;<p><b> 報</b></p><p><b> 告</b></p><p><b> 班 級:</b></p><p><b> 姓 名: </b></p><p><b> 學 號:</
3、b></p><p><b> 設計時間:</b></p><p> 實驗一 用單片機做簡易計算器</p><p><b> 一、實驗目的</b></p><p> 利用430作為主控器組成一個四則運算的計算器。</p><p><b> 二、實驗功
4、能</b></p><p> 1、 可以實現(xiàn)加、減、乘、除以及指數(shù)運算。</p><p> 2、硬件部分包括:430單片機、顯示4位的7段數(shù)碼顯示管、4×4的鍵盤。其中單片機的P2口將要顯示的數(shù)據(jù)的段碼送給顯示管,而P4口將位碼送給顯示管。P1口接鍵盤,其中高四位接鍵盤的四根列線,低四位接鍵盤的四根行線。</p><p><b>
5、 三、流程圖</b></p><p><b> 四、源代碼</b></p><p> #include <msp430x14x.h></p><p> const unsigned char data[22] ={0xc0,0xf9,0xa4,0xb0,</p><p> 0x99,0x
6、92,0x82,0xf8,0x80,0x90,</p><p> 0x88,0x83,0xc6,0xa1,0x86,0x8e,</p><p> 0x8f,0xbf,0x89,0xb9,</p><p> 0xff,0xaf};//0~9 a~f 符號</p><p> unsigned char segment[8] = {20,2
7、0,0,0,0,0,0,0};//初始數(shù)碼管</p><p> unsigned char flag1=0;</p><p> void delay(unsigned int j) //延時</p><p><b> { </b></p><p> unsigned int i;</p>
8、<p> for(i=0;i<j;i++);</p><p><b> }</b></p><p> unsigned int jisuan() //計算結果</p><p> {unsigned int y;</p><p> y=segment[2]*100000+s
9、egment[3]*10000+segment[4]*1000+segment[5]*100+segment[6]*10+segment[7];</p><p><b> return y;</b></p><p><b> }</b></p><p> void clear(void)
10、 //清屏</p><p> {unsigned int a;</p><p> for(a=7;a>1;a--)</p><p> segment[a]=0;</p><p><b> }</b></p><p> void zhuanhuan( unsigned long r)
11、 //將計算結果逐位取出</p><p><b> {</b></p><p> segment[7]=r%10;</p><p> segment[6]=r/10%10;</p><p> segment[5]=r/100%10;</p><p> segment[4]=r/10
12、00%10;</p><p> segment[3]=r/10000%10;</p><p> segment[2]=r/100000%10;</p><p><b> }</b></p><p> unsigned char getkey(void) //獲取鍵值 </p><
13、;p><b> {</b></p><p> unsigned char m,n=16;</p><p> P1OUT=0x00;</p><p> if((!(P1IN&BIT4))||(!(P1IN&BIT5))||(!(P1IN&BIT6))||(!(P1IN&BIT7)))</p&g
14、t;<p> {delay(10000);</p><p> if((!(P1IN&BIT4))||(!(P1IN&BIT5))||(!(P1IN&BIT6))||(!(P1IN&BIT7)))</p><p><b> {</b></p><p><b> flag1=1;<
15、;/b></p><p> for(m=0;m<=2;m++)</p><p><b> {</b></p><p> P1OUT=~BIT0; //第四列</p><p> if(!(P1IN&BIT7)){n=3;break;}</p><
16、;p> if(!(P1IN&BIT6)){n=7;break;}</p><p> if(!(P1IN&BIT5)){n=11;break;}</p><p> if(!(P1IN&BIT4)){n=15;break;}</p><p> P1OUT=~BIT1; //第三列</p>
17、<p> if(!(P1IN&BIT7)){n=2;break;}</p><p> if(!(P1IN&BIT6)){n=6;break;}</p><p> if(!(P1IN&BIT4)){n=14;break;}</p><p> if(!(P1IN&BIT5)){n=10;break;} </p&
18、gt;<p> P1OUT=~BIT2; //第二列</p><p> if(!(P1IN&BIT7)){n=1; break;}</p><p> if(!(P1IN&BIT6)){n=5; break;} </p><p> if(!(P1IN&BIT5)){n=9; break;
19、}</p><p> if(!(P1IN&BIT4)){n=13; break;}</p><p> P1OUT=~BIT3; //第一列</p><p> if(!(P1IN&BIT7)){n=0; break;}</p><p> if(!(P1IN&BIT6)){n=4
20、; break;}</p><p> if(!(P1IN&BIT5)){n=8; break;}</p><p> if(!(P1IN&BIT4)){n=12; break;} </p><p> while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN&
21、amp;BIT4)))</p><p> for(unsigned char j=0;j<=7;j++)</p><p><b> {</b></p><p> P4OUT=0x80>>j;</p><p> P2OUT=data[segment[j]];</p><p>
22、; delay(500); </p><p><b> }</b></p><p> delay(20000); </p><p><b> }</b></p><p><b> }</b></p><p><b>
23、 } </b></p><p> return (n);</p><p><b> }</b></p><p> void main(void) //主函數(shù)</p><p><b> { </b></p><p>
24、; unsigned char flag=0,i=9;</p><p> WDTCTL = WDTPW + WDTHOLD; //關看門狗 </p><p> P5DIR|=BIT7;</p><p> P5OUT&=~BIT7;</p><p> P4DIR=0xff;</p><p>
25、; P2DIR=0xff;</p><p> P1DIR=0x0f; //低四位輸入,高四位輸出</p><p> P1OUT=0xff; //輸出為高電位</p><p><b> while(1)</b></p><p>
26、{ unsigned long p,q,r; </p><p> unsigned long s=1;</p><p> segment[1]=20;</p><p> i=getkey();</p><p> if((i<10)&(flag1=1)) //數(shù)據(jù)輸入并移位</p><p
27、><b> { </b></p><p> segment[2]=segment[3];</p><p> segment[3]=segment[4];</p><p> segment[4]=segment[5];</p><p> segment[5]=segment[6];</p>&
28、lt;p> segment[6]=segment[7];</p><p> segment[7]=i;</p><p><b> flag1=0;</b></p><p><b> }</b></p><p> else //符號輸入&l
29、t;/p><p><b> {</b></p><p><b> switch(i)</b></p><p> {case 15:segment[0]=19;p=jisuan();clear();flag=15;break;</p><p> case 14:segment[0]=18;p=ji
30、suan();clear();flag=14;break;</p><p> case 13:segment[0]=17;p=jisuan();clear();flag=13;break;</p><p> case 12:segment[0]=16;p=jisuan();clear();flag=12;break;</p><p> case 10:segm
31、ent[0]=10;p=jisuan();clear();flag=10;break;</p><p> case 11:{q=jisuan(); clear(); //等號</p><p> switch(flag)</p><p> {case 12:r=p+q;break;</p><p> ca
32、se 13:r=p-q;break;</p><p> case 14:r=p*q;break;</p><p> case 15:r=p/q;break;</p><p> case 10:for(unsigned i=q;i>0;i--) //指數(shù)運算</p><p><b> { s=p*s;}</b&
33、gt;</p><p> r=s;break;</p><p><b> }</b></p><p> if(r>999999) //溢出判斷 </p><p> {clear();segment[5]=14;segment[6]=14;segment[7]=
34、21; } </p><p><b> else</b></p><p> zhuanhuan(r); </p><p><b> }</b></p><p><b> break;</b></p><p>
35、;<b> }</b></p><p><b> }</b></p><p> for(unsigned char j=0;j<=7;j++) //顯示 </p><p><b> {</b></p><p> P4OUT=0x80>&
36、gt;j;</p><p> P2OUT=data[segment[j]];</p><p> delay(200); </p><p><b> }</b></p><p> } </p><p><b> }</b></
37、p><p> 實驗二 基于單片機的簡單猜數(shù)字游戲</p><p><b> 一、實驗目的</b></p><p> 完成猜數(shù)字游戲的設計</p><p><b> 二、實驗功能</b></p><p> 系統(tǒng)設置四個數(shù),由游戲者來猜數(shù)字,根據(jù)所給的數(shù)字來判斷,顯示為_A
38、_B,A表示數(shù)字正確且位置正確,B表示數(shù)字正確。</p><p><b> 三、流程圖</b></p><p><b> 四、源程序</b></p><p> #include <msp430x14x.h></p><p> const unsigned char data[22
39、] ={0xc0,0xf9,0xa4,0xb0,</p><p> 0x99,0x92,0x82,0xf8,0x80,0x90,</p><p> 0x88,0x83,0xc6,0xa1,0x86,0x8e,</p><p> 0x8f,0xbf,0x89,0xb9,</p><p> 0xff,0xaf};//0~9 a~f 符號&
40、lt;/p><p> unsigned char a[8]={0,10,0,11,4,5,6,7},b[8]={0,10,0,11,0,0,0,0};</p><p> unsigned char flag=0;</p><p> void delay(unsigned int j) //延時</p><p><b&g
41、t; { </b></p><p> unsigned int i;</p><p> for(i=7;i<j;i++);</p><p><b> }</b></p><p> void clear(void) //清屏 </p><p&
42、gt; {unsigned int j;</p><p> for(j=4;j<=7;j++) </p><p><b> {</b></p><p> P4OUT=0x80>>j;</p><p><b> P2OUT=0;</b></p&g
43、t;<p> delay(2000); </p><p><b> }</b></p><p><b> }</b></p><p> unsigned char getkey(void) //獲取鍵值 </p><p><b> {
44、</b></p><p> unsigned char m,n=16;</p><p> P1OUT=0x00;</p><p> if((!(P1IN&BIT4))||(!(P1IN&BIT5))||(!(P1IN&BIT6))||(!(P1IN&BIT7)))</p><p> {de
45、lay(10000);</p><p> if((!(P1IN&BIT4))||(!(P1IN&BIT5))||(!(P1IN&BIT6))||(!(P1IN&BIT7)))</p><p><b> {</b></p><p><b> flag=1;</b></p>
46、<p> for(m=0;m<=39;m++)</p><p><b> {</b></p><p> P1OUT=~BIT0;</p><p> if(!(P1IN&BIT7)){n=3;break;}</p><p> if(!(P1IN&BIT6)){n=7;break;}
47、</p><p> if(!(P1IN&BIT5)){n=11;break;}</p><p> if(!(P1IN&BIT4)){n=15;break;}</p><p> P1OUT=~BIT1;</p><p> if(!(P1IN&BIT7)){n=2;break;}</p><p&
48、gt; if(!(P1IN&BIT6)){n=6;break;}</p><p> if(!(P1IN&BIT4)){n=14;break;}</p><p> if(!(P1IN&BIT5)){n=10;break;} </p><p> P1OUT=~BIT2;</p><p> if(!(P1IN&am
49、p;BIT7)){n=1; break;}</p><p> if(!(P1IN&BIT6)){n=5; break;} </p><p> if(!(P1IN&BIT5)){n=9; break;}</p><p> if(!(P1IN&BIT4)){n=13; break;}</p><p> P1OUT=
50、~BIT3;</p><p> if(!(P1IN&BIT7)){n=0; break;}</p><p> if(!(P1IN&BIT6)){n=4; break;}</p><p> if(!(P1IN&BIT5)){n=8; break;}</p><p> if(!(P1IN&BIT4)){n=
51、12; break;} </p><p> while((!(P1IN&BIT6))||(!(P1IN&BIT7))||(!(P1IN&BIT5))||(!(P1IN&BIT4)))</p><p> for(unsigned char j=0;j<=7;j++)</p><p><b> {</b>
52、</p><p> P4OUT=0x80>>j;</p><p> P2OUT=data[b[j]];</p><p> delay(500); </p><p><b> }</b></p><p> delay(20000); </p>&l
53、t;p><b> }</b></p><p><b> }</b></p><p><b> } </b></p><p> return(n); </p><p><b> }</b></p><p> void
54、 bijiao(void) //比較運算</p><p><b> {</b></p><p> unsigned char p,q,i=0,j=0;</p><p> for(p=4;p<8;p++)</p><p> for(q=4;q<8;q++)</p>
55、<p> if(a[p]==b[q]) i++;</p><p> for(p=4;p<8;p++)</p><p> if(a[p]==b[p]) j++;</p><p> b[0]=j;b[2]=i-j;</p><p><b> }</b></p><p>
56、void main(void) //主函數(shù)</p><p><b> { </b></p><p> unsigned char i=9;</p><p> WDTCTL = WDTPW + WDTHOLD; //關閉看門狗</p><p> P5DIR|=BIT7;</
57、p><p> P5OUT&=~BIT7;</p><p> P4DIR=0xff;</p><p> P2DIR=0xff;</p><p> P1DIR=0x0f; //低四位輸入高四位輸出</p><p> P1OUT=0xff;</p><p>
58、<b> while(1)</b></p><p><b> {a[1]=20;</b></p><p> i=getkey();</p><p> if((i<10)&(flag=1)) //獲取數(shù)字鍵</p><p><b> {</b><
59、/p><p> b[4]=b[5];</p><p> b[5]=b[6];</p><p> b[6]=b[7];</p><p><b> b[7]=i;</b></p><p><b> flag=0;</b></p><p><b&
60、gt; }</b></p><p> else if((i>=10)&(flag=1)) //獲取功能鍵</p><p> {switch(i)</p><p> {case 11:bijiao();break;</p><p> case 10:clear(); break;</p>&l
61、t;p><b> }</b></p><p><b> flag=0;</b></p><p><b> }</b></p><p> for(unsigned char j=0;j<=7;j++) //顯示 </p><p><b
62、> {</b></p><p> P4OUT=0x80>>j;</p><p> P2OUT=data[b[j]];</p><p> delay(500); </p><p><b> }</b></p><p> }
63、 </p><p><b> }</b></p><p><b> 心得小結</b></p><p> 雖然之前上課的時候有進行過單片機的實驗,但總體還是有一些參考模板的,所以做起來不是特別困難,在這一周多的單片機課程設計實驗過程中,這兩個實驗還是有許多值得思考的地方。</p><p> 首
64、先說說第一個實驗計算器的設計,因為用到了數(shù)碼管,雖然之前有用過,但對于數(shù)碼管的顯示以及數(shù)據(jù)的移位顯示還是存在疑惑的。大致將整個過程分為按鍵掃描、數(shù)字計算、數(shù)字的顯示三個過程。因為之前有做過按鍵的實驗,所以這一部分并不是很困難。涉及到了計算一開始也沒有什么頭緒,網上搜索到一些其他單片機制作簡單計算器的程序,借鑒了一下。對于數(shù)字的顯示,利用C語言學習過的一些知識,很快也解決了。最困難的是如何使的鍵入的數(shù)字移位。想了很多辦法,都沒有解決,最后
65、請教了一下其他同學,發(fā)現(xiàn)其實這個問題也很簡單。最后運行調試過程中,將程序的調用,數(shù)組稍加修改,很好的完成了計算器的功能,程序也變得很簡潔。</p><p> 對于第二個實驗猜數(shù)字游戲的設計,我只能覺得真心不明白,尤其是對液晶顯示器。因為之前沒有學過,只能看書,上網查資料,結果發(fā)現(xiàn)完全不明白。就完全沒有覺得這個實驗能成功。最后老師降低了難度,可以用數(shù)碼管顯示,才又重新開始了程序的編寫。其實這個程序完全可以在上一個
66、程序的基礎上改編而來。比較難的是不知道怎樣讓系統(tǒng)隨機出四個數(shù)。后來組里提出可以有一個人輸四個數(shù)作為答案,讓另一個人來玩游戲。于是我們按這一思路編寫下去。但如何將第一組四個數(shù)存入一個數(shù)組且保持不變又不影響接下來數(shù)據(jù)的存入與比較犯了難。最后只能采取更加簡便的方法,直接在系統(tǒng)內設好四個數(shù)作為答案。雖然這樣游戲變得單一化,但也是無可奈何的舉措了。程序運行調試后試玩了一下,顯示很真確,就有一個缺陷,數(shù)碼管顯示抖動有些嚴重,可能是延時的問題吧。&l
67、t;/p><p> 最后 談談感覺吧,對單片機總的感覺還不錯,比想象的要好。以前C語言學的不是很好但就這幾天學到了很多。雖然碰到比較復雜,比較煩,比較難的題目還是不能應付自如,當自己很長時間調出一個覺得還算滿意的程序時,看著自己的程序在實驗箱上跑著,好像自己完成了一件藝術品似的,欣賞著自己的成果有一種自豪感,這種感覺很好。</p><p> 在平時的學習中,我發(fā)現(xiàn)硬件方面的確很差
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機課程設計報告-簡易計算器
- 簡易計算器單片機課程設計報告
- 單片機課程設計報告-- 簡易計算器設計
- 單片機課程設計--簡易計算器
- 單片機課程設計簡易計算器
- 單片機課程設計-簡易計算器
- 單片機課程設計簡易計算器
- 單片機課程設計--簡易計算器
- 課程設計---單片機簡易計算器設計
- 單片機課程設計--簡易數(shù)字計算器
- 單片機課程設計---簡易計算器的設計
- 單片機課程設計--簡易計算器的設計
- 單片機課程設計報告--簡易計算器的設計、制作
- 基于51單片機簡易計算器課程設計
- 單片機課程設計報告---計算器
- 單片機計算器課程設計
- 單片機課程設計--計算器
- 單片機課程設計-計算器
- 課程設計-單片機計算器
- 單片機課程設計報告計算器2
評論
0/150
提交評論