2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩26頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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

提交評論