版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 課程設(shè)計報告</b></p><p> 課程名稱:單片機原理及應(yīng)用課程設(shè)計 </p><p> 設(shè)計題目: 個人所得稅計算器 </p><p> 系 別: 通信與控制工程系 </p><p> 專
2、 業(yè): 自動化專業(yè) </p><p> 班 級: 10級一班 </p><p><b> 摘 要</b></p><p> 單片機的出現(xiàn)是計算機制造技術(shù)高速發(fā)展的產(chǎn)物,它是嵌入式控制系統(tǒng)的核心,如今,他已廣泛的應(yīng)用到我們生活中的各個領(lǐng)域,電子
3、、科技、通信、汽車、工業(yè)等。我們這次設(shè)計的個人所得稅計算器也是利用AT89C52單片機制作而成的。該計算器設(shè)計師采用C語言編寫,實現(xiàn)了個人所得稅的運算,比較實用和方便。</p><p> 該設(shè)計電路是采用AT89C52單片機為主要控制電路,然后使用8255驅(qū)動電路驅(qū)動六位LED數(shù)碼管現(xiàn)實數(shù)據(jù),利用4×4矩陣鍵盤完成電路的實際操作,電路比較簡單,但是很使用方便。</p><p>
4、 關(guān)鍵詞:單片機;個人所得稅計算器;STC89C52;中斷;8255;Display數(shù)碼管顯示;鍵盤掃描</p><p><b> 目 錄</b></p><p><b> 設(shè)計要求1</b></p><p> 1 方案論證與對比1</p><p> 1.1 數(shù)碼管顯示方案一1&l
5、t;/p><p> 1.2 數(shù)碼管顯示方案二1</p><p> 2 單元電路設(shè)計與計算2</p><p> 2.1 電源部分的設(shè)計2</p><p> 2.2 復(fù)位電路的設(shè)計2</p><p> 2.3 數(shù)碼管顯示電路3</p><p> 2.4 鍵盤控制電路設(shè)計3<
6、/p><p> 3 系統(tǒng)程序設(shè)計4</p><p> 3.1 主程序設(shè)計4</p><p> 3.2 LED顯示程序設(shè)計5</p><p> 4 調(diào)試及性能分析7</p><p> 4.1硬件調(diào)試7</p><p> 4.2軟件調(diào)試7</p><p&g
7、t; 4.3性能分析7</p><p> 5詳細儀器清單8</p><p><b> 6總結(jié)與思考9</b></p><p><b> 7 致謝10</b></p><p><b> 參考文獻11</b></p><p> 附
8、錄一:簡易計數(shù)器的PCB板12</p><p><b> 附錄二:程序13</b></p><p><b> 個人所得稅計算器</b></p><p><b> 設(shè)計要求</b></p><p> 利用單片機作為控制核心,設(shè)計出個人所得稅計算器,具有以下功能: &l
9、t;/p><p> (1)具有計算個人所得稅功能;</p><p> (2)從鍵盤輸入數(shù)值并顯示數(shù)值,數(shù)值范圍在0~99999;</p><p> ?。?)當按下等號鍵時輸出并顯示結(jié)果;</p><p> ?。?)當按下復(fù)位按鈕數(shù)碼管清零。</p><p><b> 方案論證與對比</b><
10、;/p><p> 數(shù)碼管顯示是本設(shè)計主要的部分。根據(jù)需要,可采用兩種方案實現(xiàn),即靜態(tài)顯示法和動態(tài)顯示法。</p><p><b> 數(shù)碼管顯示方案一</b></p><p> 方案一:靜態(tài)顯示。所謂靜態(tài)顯示,就是當顯示器顯示某一字符時,相應(yīng)的發(fā)光二極管恒定的導(dǎo)通或截止。該方式每一位都需要一個8位輸出口控制。靜態(tài)顯示時較小的電流能獲得較高的亮度
11、,且字符不閃爍。但當所顯示的位數(shù)較多時,靜態(tài)顯示所需的I/O口太多,造成了資源的浪費。</p><p><b> 數(shù)碼管顯示方案二</b></p><p> 方案二:動態(tài)顯示。所謂動態(tài)顯示就是一位一位的輪流點亮各個位,對于顯示器的每一位來說,每隔一段時間點亮一次。利用人的視覺暫留功能可以看到整個顯示,但必須保證掃描速度足夠快,字符才不閃爍。顯示器的亮度既與導(dǎo)通電流
12、有關(guān),也與點亮?xí)r間與間隔時間的比例有關(guān)。調(diào)整參數(shù)可以實現(xiàn)較高穩(wěn)定度的顯示。動態(tài)顯示節(jié)省了I/O口,降低了能耗。</p><p> 由于靜態(tài)現(xiàn)實法需要數(shù)據(jù)鎖存器等硬件,接口復(fù)雜一些,又考慮到時鐘顯示只有5位,且系統(tǒng)沒有其他的處理任務(wù);并且從節(jié)省I/O口和降低能耗出發(fā),所以決定采用動態(tài)掃描法實現(xiàn)LED的顯示,即采用方案二。</p><p><b> 單元電路設(shè)計與計算</b
13、></p><p><b> 電源部分的設(shè)計</b></p><p> 電源電路包括變壓器、橋式整流器、電容和穩(wěn)壓器。通過變壓器變壓,使得220V電壓變?yōu)?V,在通過橋式整流,電容的濾波作用,穩(wěn)壓器的穩(wěn)壓作用,可輸出5V的穩(wěn)定電壓。</p><p> 如圖1所示,從外部引入5V的直流電,位單片機、復(fù)位電路提供電源。</p>
14、;<p> 圖 1 +5v電源模塊電路圖</p><p><b> 復(fù)位電路的設(shè)計</b></p><p> 為了初始化單片機內(nèi)部的某些特殊功能寄存器,必須采用復(fù)位的方式,復(fù)位后可使CPU及系統(tǒng)各部件處于確定的初始狀態(tài),并從初始狀態(tài)開始正常工作。單片機的復(fù)位是靠外電路來實現(xiàn)的,復(fù)位操作有兩種情況,即上電復(fù)位和手動(開關(guān))復(fù)位。本系統(tǒng)采用上電復(fù)位方式
15、。</p><p> 上電復(fù)位:上電復(fù)位電路時一種簡單的復(fù)位電路,只要在RST復(fù)位引腳接一個電容到VCC,接一個電阻到地就可以了。上電復(fù)位是指在給系統(tǒng)上電時,復(fù)位電路通過電容加到RST復(fù)位引腳一個短暫的高電平信號,這個復(fù)位信號隨著VCC對電容的充電而回落,所以RST引腳復(fù)位的高電平維持時間取決于電容的充電時間。為了保證系統(tǒng)安全可靠的復(fù)位,RST引腳的高電平信號必須維持足夠才的時間。</p><
16、;p> 上電自動復(fù)位是通過外部復(fù)位電路的電容充電來實現(xiàn)的。只要VCC的上升時間不超過1ms,就可以實現(xiàn)自動上電復(fù)位。如下圖2:</p><p><b> 圖2 復(fù)位電路</b></p><p><b> 數(shù)碼管顯示電路</b></p><p> 數(shù)碼管顯示器成本低,配置靈活,與單片機接口簡單,在單片機應(yīng)用系統(tǒng)
17、中廣泛應(yīng)用。</p><p> 數(shù)碼管工作原理:數(shù)碼管是由8個發(fā)光二極管構(gòu)成的顯示器件。在數(shù)碼管中,若將二極管的陽極連在一起,稱為共陽極數(shù)碼管:若將二極管的陰極連在一起,稱為共陰極數(shù)碼管。我們單片機板上的5個數(shù)碼管均是共陽極的。當發(fā)光二極管導(dǎo)通時,它就會發(fā)光。每個二極管就是一個筆劃,若干個二極管發(fā)光時,就構(gòu)成了一個顯示字符。將單片機的I/O口控制相應(yīng)的芯片與數(shù)碼管的a-g相連,高電平的位對應(yīng)的發(fā)光二極管亮,這樣
18、,由I/O口輸出不同的代碼,就可以控制數(shù)碼管顯示不同的字符。本文的4個數(shù)碼管均采用動態(tài)顯示方式,顯示當前的時間[1]。數(shù)碼管顯示電路如下圖3所示:</p><p> 圖 3 數(shù)碼管顯示電路</p><p><b> 鍵盤控制電路設(shè)計</b></p><p> 該設(shè)計需要顯示按鍵輸入和結(jié)果輸出,當按下數(shù)值馬上顯示,按下等號輸出計算結(jié)果,當按
19、下復(fù)位按鈕計算器清零。按鍵的開關(guān)狀態(tài)通過一定的電路轉(zhuǎn)換為高、低電平狀態(tài)。按鍵閉合過程在相應(yīng)的I/O端口形成一個負脈沖。閉合和釋放過程都要經(jīng)過一定的過程才能到達穩(wěn)定,這一過程是出于高、低電平的一種不穩(wěn)定狀態(tài),稱為抖動。抖動的持續(xù)時間隨鍵盤材料和操作員而異,不過通??偸遣淮笥?0ms。很容易想到,抖動的持續(xù)時間隨鍵盤材料和操作員而異,不過通??偸遣淮笥?0ms,而抖動問題不解決就會引起對閉合鍵的識別。用軟件方法可以很容易地解決抖動問題,通過
20、延遲10ms。 </p><p> 圖4是鍵盤控制電路,利用MCS-51單片機接口構(gòu)成4*4的鍵盤。</p><p> 圖4 鍵盤控制電路圖</p><p><b> 系統(tǒng)程序設(shè)計</b></p><p><b> 主程序設(shè)計</b></p><p>
21、 主程序首先進行初始化, 設(shè)定一些變量及其意義,掃描鍵盤,當輸入有0~99999數(shù)字時,通過鍵盤的掃描程序, 將數(shù)值賦給MONEY并在顯示器上來,當按下等號時,跳到運算部分,通過判斷MONEY的值,進行不同的運算,應(yīng)納個人所得稅稅額=(應(yīng)納稅所得額-扣除標準)*適用稅率-速算扣除數(shù)。</p><p> 不超過1500元的,稅率3%,速算扣除數(shù)為0;</p><p> 超過1500元至4
22、500元的部分,稅率10%,速算扣除數(shù)為105;</p><p> 超過4500元至9000元的部分,稅率20%,速算扣除數(shù)為555;</p><p> 超過9000元至35000元的部分,稅率25%,速算扣除數(shù)為1005;</p><p> 超過35000元至55000元的部分,稅率30%,速算扣除數(shù)為2755;</p><p>
23、超過55000元至80000元的部分,稅率35%,速算扣除數(shù)為5505;</p><p> 超過80000元至99999元的部分,稅率45%,速算扣除數(shù)為13505。</p><p> 輸出并顯示結(jié)果到數(shù)碼管上。</p><p><b> LED顯示程序設(shè)計</b></p><p> LED顯示器由七段發(fā)光二極管
24、組成,排列成8字形狀,因此也成為七段LED顯示器,器排列形狀如下圖所示:</p><p> 圖5 七段LED顯示器</p><p> 為了顯示數(shù)字或符號,要為LED顯示器提供代碼,即字形代碼。七段發(fā)光二極管,再加上一個小數(shù)點位,共計8段,因此提供的字形代碼的長度正好是一個字節(jié)。簡易計算器用到的數(shù)字0~9的共陰極字形代碼如下表:</p><p> 表格1 0~9
25、八段數(shù)碼管共陰級字形代碼</p><p> 6位LED顯示的程序流程圖如下: </p><p> 圖6 LED顯示流程圖</p><p>&
26、lt;b> 調(diào)試及性能分析</b></p><p><b> 硬件調(diào)試</b></p><p> 硬件調(diào)試時可以檢查印制板及焊接的質(zhì)量情況,在檢查無誤的后可通點檢查LED顯示器的點亮狀況。若亮度不理想,可以調(diào)整P0口的電阻大小,一般情況下取200Ω</p><p> 電阻即可獲得滿意的亮度效果。實驗室制作時,可結(jié)合示波
27、器測試晶振及P0、P2端口的波形情況進行綜合硬件測試分析。</p><p><b> 軟件調(diào)試</b></p><p> 根據(jù)上述需求分析得出的思路,進行C語言程序的編寫。C語言程序一共分為三個部分:第一部分是STC89C52 芯片的初始化;第二部分是8255 可編程計數(shù)芯片的初始化;第三部分是,模塊的編寫。在該電子跑表的設(shè)計過程中一共有兩個模塊:1運算模塊、2數(shù)
28、碼管顯示模塊、3鍵盤掃描模塊。</p><p> 軟件調(diào)試在Wave或Keil C51編譯器下進行,源程序編譯及仿真調(diào)試應(yīng)分段或以子程序為單元逐個進行,最后可結(jié)合硬件實時調(diào)試。</p><p><b> 性能分析</b></p><p> 設(shè)計之初的思路是選擇個人所得稅區(qū)間分化分放在一個內(nèi)存中,通過查表的方法去的各區(qū)間的運算方式,這樣在計
29、算個人所得稅計算器的設(shè)計上將變得簡單。由鍵盤輸入可以實現(xiàn)0~99999的個人所得稅的計算,按等號可以顯示輸出結(jié)果,輸入時符合輸入習(xí)慣,鍵盤排布如圖6所示,沒有再發(fā)現(xiàn)漏洞。發(fā)現(xiàn)的問題如何知道之前鍵入的字符,以便處理當前鍵入字符,加入標記就能通過查看標記值得知之前鍵入字符。長按會連續(xù)送數(shù) ,加一條命令while((P3&0xf0)!=0xf0);可等待按鍵放開后才繼續(xù)。左移命令的問題,查書后明白左移后末位補的是0,而要補的是1。所以
30、要加一條或命令。</p><p> +----------------+ | 7 | 8 | 9 | | | 4 | 5 | 6 | | | 1 | 2 | 3 |
31、 | | 0 | | | =| +----------------+</p><p><b> 圖 7 鍵盤排布</b></p><p><b> 詳細儀器清單</b
32、></p><p><b> 表格 2器件清單</b></p><p><b> 總結(jié)與思考</b></p><p> 我們在這次個人所得稅計算器的課程設(shè)計中受益匪淺。通過對自己這一學(xué)期來所學(xué)知識的回顧,并充分發(fā)揮對所學(xué)知識的理解和對課程設(shè)計的思考及書面表達能力,最終完成了。這對自己今后進一步深化學(xué)習(xí),積累了一
33、定寶貴的經(jīng)驗。撰寫論文的過程也是專業(yè)知識的學(xué)習(xí)過程,同時強化了自己的動手能力,對PCB軟件,作圖軟件,仿真等軟件更加熟練。對程序和硬件電路的調(diào)試也有了很大的提高。它使我運用已有的專業(yè)基礎(chǔ)知識,對其進行設(shè)計,分析和解決一個理論問題或?qū)嶋H問題,把知識轉(zhuǎn)化為能力的實際訓(xùn)練。讓我們知道了理論和實際的距離,也知道了理論和實際相結(jié)合的重要性。由于接觸單片機課程的時間尚短,專業(yè)知識還不扎實,在編寫程序時難免受阻,要常翻閱課本查閱資料,進度較慢。并且有
34、時程序?qū)戝e,程序有不完整的現(xiàn)象,無法達到預(yù)定結(jié)果,需重新調(diào)整寫過。通過自己分析,查閱資料,向老師與同學(xué)請教,與同組的同學(xué)們一起推敲,再推敲,共同解決問題。</p><p><b> 7 致謝</b></p><p> 首先感謝我的論文指導(dǎo)老師方老師和姚老師,我們的論文是在他們的悉心指導(dǎo)下完成的,方老師嚴謹細致、一絲不茍的作風(fēng)一直是我工作生活的榜樣,他們循循善誘的教
35、導(dǎo)和不拘一格的思路給予我們無盡的啟迪。</p><p> 在這次課程設(shè)計中遇到了很多編程問題,最后在老師的辛勤指導(dǎo)下,終于迎刃而解,在此我表示感謝!同時,對給過我?guī)椭乃型瑢W(xué)和各位指導(dǎo)老師再次表示忠心的感謝! </p><p><b> 參考文獻</b></p><p> [1] 李朝青.單片機原理及接口技術(shù)(第3版). 北京航空航天
36、大學(xué)出版社.2006 [2] 田立 田青 代萬震.51單片機C設(shè)計快速入門 .人民郵電出版社.2007</p><p> [3] 樓然苗 李光飛.51單片機設(shè)計實例.北京航空航天大學(xué)出版社.2004</p><p> [4] 王守中51單片機開發(fā)入門與典型實例. 人民郵電出版社.2007</p><p> 附錄一:簡易計數(shù)器的P
37、CB板</p><p> 圖9 簡易計算器PCB原理圖</p><p><b> 附錄二:程序 </b></p><p> #include <reg52.h></p><p> #define uchar unsigned char</p><p> #define uin
38、t unsigned int</p><p> #define udouble unsigned double</p><p> #define START 0X0F</p><p> uchar xdata PA _at_ 0xD9FF, PB _at_ 0XDBFF, PC _at_ 0XDDFF,//定義外部變量,強制分配地址</p
39、><p> EX_PORT_CON _at_ 0XDFFF;</p><p> uchar data DISPLAY_BUF[6];</p><p> uchar code LED_CODE[]={0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA,//LED段碼(0~9)</p><p>
40、 0X20,0X28}; </p><p> uint code KOUCHU_TAB[]={13505,5505,2755,1005,555,105,0};</p><p> unsigned long code REF_TAB[]={80000,55000,35000,9000,4500,1500,0};</p><p> double sui_TAB[
41、]={0.45,0.35,0.30,0.25,0.20,0.10,0.03};</p><p> unsigned long int MONEY=0;</p><p> uchar PLACE=0,KEY,TEMP;</p><p> bit KEY_DIS=0;</p><p> uchar Key_Scan(); </p&g
42、t;<p> void Display();</p><p> void Delay(uint A);</p><p> void Calculate();</p><p> void main()</p><p><b> { </b></p><p> uchar
43、KEY;</p><p> EX_PORT_CON=0X81;</p><p> PA=PB=0XFF;</p><p><b> while(1)</b></p><p><b> {</b></p><p> KEY=Key_Scan();</p>
44、<p> Display();</p><p> if(KEY==START)</p><p><b> {</b></p><p> Calculate();</p><p> KEY_DIS=1;</p><p> while(Key_Scan()!=START){Di
45、splay();}</p><p> KEY_DIS=0;</p><p><b> MONEY=0;</b></p><p><b> PLACE=0;</b></p><p><b> }</b></p><p><b> }&
46、lt;/b></p><p><b> }</b></p><p> void Display()</p><p><b> {</b></p><p><b> uchar A;</b></p><p> unsigned long B
47、=10000;</p><p> for(A=0x02;A<=0X20;A<<=1)</p><p><b> { </b></p><p> if((MONEY/B)||(A==0X20)) //當前位(從高到低)第一次不為零則開始顯示</p><p> {Delay(150)
48、; </p><p> PA=PB=0XFF; //消影</p><p> PB=LED_CODE[(MONEY%(B*10))/(B)];</p><p><b> PA=~A;</b></p><p><b> }B/=10;</b></p><p&
49、gt;<b> }</b></p><p><b> }</b></p><p> void Delay(uint A)</p><p><b> {</b></p><p> while(A--);</p><p><b> }
50、</b></p><p> uchar Key_Scan()</p><p><b> {</b></p><p> uchar A=4,ROW=0x08,T=0XFF;</p><p> if(PC!=0XF0) //是否有鍵按下</p><p> {De
51、lay(300); //消抖</p><p> if(PC!=0XF0)</p><p> while(A--) //查詢,逐列</p><p> {ROW<<=1;</p><p><b> PC=ROW;</b></p><p> T=(PC
52、&0X0F);</p><p> if(T!=0X00) //但前列是否有鍵被按下</p><p><b> {</b></p><p> T=(T+(ROW&0XF0)); //計算鍵值</p><p> do {Display();} //防止數(shù)碼管在按鍵按下時
53、閃爍</p><p> while((PC&0X0F)!=0); //松手檢測</p><p> break; //跳出循環(huán)</p><p> } </p><p> } PC=0xf0; //鍵盤初始化</p><p><b> switc
54、h(T)</b></p><p><b> {</b></p><p> case 0x18:TEMP=7;break;</p><p> case 0x28:TEMP=8;break;</p><p> case 0x48:TEMP=9;break;</p><p> ca
55、se 0x14:TEMP=4;break;</p><p> case 0x24:TEMP=5;break;</p><p> case 0x44:TEMP=6;break;</p><p> case 0x12:TEMP=1;break;</p><p> case 0x22:TEMP=2;break;</p><
56、;p> case 0x42:TEMP=3;break;</p><p> case 0x11:TEMP=0;break;</p><p> case 0x81: return START;</p><p><b> }</b></p><p> if(!KEY_DIS)</p><p
57、> {PLACE++; </p><p> if(PLACE==7){PLACE=0;return START;}</p><p><b> else</b></p><p> MONEY=((MONEY*10)+TEMP);</p><p> } </p>&l
58、t;p><b> }</b></p><p> return T; </p><p><b> }</b></p><p> void Calculate()</p><p><b> {</b></p><p><b>
59、uchar I;</b></p><p> if(MONEY>3500)</p><p><b> {</b></p><p> MONEY-=3500;</p><p> for(I=0;;I++)</p><p><b> {</b></
60、p><p> if(MONEY>REF_TAB[I])break;</p><p><b> }</b></p><p> MONEY=((MONEY)*sui_TAB[I])-KOUCHU_TAB[I];</p><p><b> } </b></p><p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論