欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 4384|回復(fù): 0
收起左側(cè)

基于51單片機(jī)的簡(jiǎn)易計(jì)算器程設(shè)計(jì)報(bào)告書(shū)(word格式 可編輯)

[復(fù)制鏈接]
ID:313342 發(fā)表于 2018-4-21 20:43 | 顯示全部樓層 |閱讀模式

單片機(jī)課程設(shè)計(jì)報(bào)告書(shū)

             設(shè)計(jì)題目:基于51單片機(jī)的簡(jiǎn)易計(jì)算器

             學(xué)生姓名:              

             學(xué)生學(xué)號(hào):        

             所在班級(jí):       自動(dòng)化        

             指導(dǎo)教師:              

目錄

引言              3

第一章 設(shè)計(jì)目的及方案

    1.設(shè)計(jì)目的              3

    2.設(shè)計(jì)方案              3

第二章 硬件基礎(chǔ)

    1.AT89S52簡(jiǎn)介              4

       2.L1602簡(jiǎn)介              4

       3.4*4鍵盤(pán)矩陣簡(jiǎn)介              5

第三章 程序設(shè)計(jì)              6

第四章 系統(tǒng)總述

   1.系統(tǒng)流程圖              11

      2.系統(tǒng)電路圖              12

      3.實(shí)物連接圖              12

第五章 總結(jié)體會(huì)              13

引言

眾所周知單片機(jī)是一種集成在電路芯片,是采用超大 規(guī)模集成電路技術(shù)把具有數(shù)據(jù)處理能力的中央處理器CPU隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、多種I/O口和中斷系統(tǒng)、定時(shí)器/計(jì)時(shí)器等功能(可能還包括顯示驅(qū)動(dòng)電路、脈寬調(diào)制電路、模擬多路轉(zhuǎn)換器、A/D轉(zhuǎn)換器等電路)集成到一塊硅片上構(gòu)成的一個(gè)小而完善的計(jì)算機(jī)系統(tǒng)。

目前,一個(gè)學(xué)習(xí)與應(yīng)用單片機(jī)的高潮正在工廠、學(xué)校及企事業(yè)單位大規(guī)模地興起。過(guò)去習(xí)慣于傳統(tǒng)電子領(lǐng)域的工程師、技術(shù)員正面臨著全新的挑戰(zhàn),如不能在較短時(shí)間內(nèi)學(xué)會(huì)單片機(jī),勢(shì)必會(huì)被時(shí)代所遺棄,只有勇敢地面對(duì)現(xiàn)實(shí),挑戰(zhàn)自我,加強(qiáng)學(xué)習(xí),爭(zhēng)取在較短的時(shí)間內(nèi)將單片機(jī)技術(shù)融會(huì)貫通,才能跟上時(shí)代的步伐。  

它所給人帶來(lái)的方便也是不可否定的,它在一塊芯片內(nèi)集成了計(jì)算機(jī)的各種功能部件,構(gòu)成一種單片式的微型計(jì)算機(jī)。20世紀(jì)80年代以來(lái),國(guó)際上單片機(jī)的發(fā)展迅速,其產(chǎn)品之多令人目不暇接,單片機(jī)應(yīng)用不斷深入,新技術(shù)層出不窮。20世紀(jì)末,電子技術(shù)獲得了飛速的發(fā)展,在其推動(dòng)下,現(xiàn)代電子產(chǎn)品幾乎滲透了社會(huì)的各個(gè)領(lǐng)域,有力地推動(dòng)了社會(huì)生產(chǎn)力的發(fā)展和社會(huì)信息化程度的提高,同時(shí)也使現(xiàn)代電子產(chǎn)品性能進(jìn)一步提高,產(chǎn)品更新?lián)Q代的節(jié)奏也越來(lái)越快。

  •   設(shè)計(jì)目的及方案


設(shè)計(jì)目的

本設(shè)計(jì)要制作的是單片機(jī)于生活中最為常見(jiàn)的一種應(yīng)用—簡(jiǎn)易計(jì)算器。這要求我們以單片機(jī)為核心,在熟悉、掌握各種外圍接口電路芯片的工作原理和控制方法的前提下根據(jù)所學(xué)的知識(shí)以及編寫(xiě)程序來(lái)選取合適的器件設(shè)計(jì)簡(jiǎn)易計(jì)算器使之實(shí)現(xiàn)加減乘除以及清零的功能。

設(shè)計(jì)方案:

    根據(jù)計(jì)算器的功能要求,選擇AT89C51為主控機(jī),通過(guò)擴(kuò)展必要的外圍接口電路,實(shí)現(xiàn)對(duì)計(jì)算器的設(shè)計(jì)。外部主要由4*4矩陣鍵盤(pán)和一個(gè)液晶顯示屏構(gòu)成,內(nèi)部由一塊AT89S52單片機(jī)構(gòu)成。計(jì)算器電路包括四個(gè)部分:選用LCD作為顯示部分,矩陣鍵盤(pán)作為輸入部分,運(yùn)算模塊,單片機(jī)控制部分。模塊圖如圖所示:

本簡(jiǎn)易計(jì)算器AT89S52單片機(jī)作為核心。簡(jiǎn)易計(jì)算器顯示電路由LCD1602組成, 制作一個(gè)單片機(jī)計(jì)時(shí)裝置需要的材料需要有軟硬件的支持,硬件方面AT89S52單片機(jī),晶振,液晶屏LCD1602,鍵盤(pán)等部分構(gòu)成。軟件部分在keil環(huán)境下用C語(yǔ)言編寫(xiě)。本系統(tǒng)可進(jìn)行簡(jiǎn)易的計(jì)算。電路采用AT89S52單片機(jī)作為核心,功耗小,能在3V的低壓工作,電壓可選用3~5V電壓供電。

第二章 硬件基礎(chǔ)

1.AT89S52簡(jiǎn)介:

主要性能

與MCS-51單片機(jī)產(chǎn)品兼容

8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器

1000次擦寫(xiě)周期                           

全靜態(tài)操作:0Hz~33MHz

三級(jí)加密程序存儲(chǔ)器

32個(gè)可編程I/O口線

三個(gè)16位定時(shí)器/計(jì)數(shù)器

八個(gè)中斷源

全雙工UART串行通道

低功耗空閑和掉電模式

掉電后中斷可喚醒

看門(mén)狗定時(shí)器

雙數(shù)據(jù)指針

掉電標(biāo)識(shí)符

功能特性描述

AT89S52是一種低功耗、高性能CMOS8位微控制器,具有8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。

AT89S52具有以下標(biāo)準(zhǔn)功能:

8k字節(jié)Flash,256字節(jié)RAM,32 位I/O 口線,看門(mén)狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,三個(gè)16 位定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。空閑模式下,CPU停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。

2.1602液晶顯示器簡(jiǎn)介:

液晶(Liquid Crystal)是一種高分子材料,因其特殊的物理、化學(xué)、光學(xué)特性,廣泛應(yīng)用輕薄顯示器上。

液晶顯示器(Liquid Crystal Display,LCD)的主要原理是以電流刺激液晶分子產(chǎn)生點(diǎn)、線、面并配合背部燈管構(gòu)成畫(huà)面。

各種型號(hào)的液晶通常是按照顯示字符的行數(shù)或液晶點(diǎn)陣的行、列數(shù)來(lái)命名。例如,1602表示每行顯示16個(gè)字符,一共可以顯示兩行。這類液晶通常稱為字符型液晶,只能顯示ASCII碼字符。12232表示液晶顯示畫(huà)面由122列、32行組成,共有122*32個(gè)點(diǎn)來(lái)顯示各種圖形。用戶可以通過(guò)程序控制這些點(diǎn)中任何一個(gè)點(diǎn)顯示或不顯示,從而構(gòu)成各種圖形畫(huà)面。因此,12232稱為圖形型液晶。

液晶體積小,功耗低,顯示操作簡(jiǎn)單。但其有致命的弱點(diǎn),即使用溫度范圍很窄。通用型液晶工作溫度為0到+55攝氏度,存儲(chǔ)溫度為-20到+60攝氏度。

主要參數(shù):

顯示容量:16*2個(gè)字符

芯片工作電壓:4.5~5.5V

工作電流:2.0mA

模塊最佳工作電壓:5.0V

字符尺寸:2.95*4.35(WXH)mm

RAM地址映射圖:

向圖中的 00~0F、40~4F 地址中的任意處寫(xiě)入顯示數(shù)據(jù)時(shí),液晶可立即顯示出來(lái); 當(dāng)寫(xiě)入到 10~27 或 50~67 地址時(shí),必須通過(guò)移屏指令將他們一移入可顯示區(qū)域方可正常 顯示。

  • 鍵盤(pán)部分:


實(shí)驗(yàn)箱4*4鍵盤(pán)實(shí)物圖:               4*4鍵盤(pán)電路圖:

編碼后按鍵功能:

+
3
2
1
-
6
5
4
*
9
8
7
/
=
CE
0


  • 系統(tǒng)電路圖:

3.實(shí)物連接圖:

  •   總結(jié)體會(huì)

單片機(jī)是我所學(xué)專業(yè)的主要課程之一,不僅培養(yǎng)了我綜合運(yùn)用所學(xué)知識(shí),發(fā)現(xiàn),提出,分析和解決實(shí)際問(wèn)題的能力,而且提高了我實(shí)際動(dòng)手操作能力.現(xiàn)實(shí)生活中,單片機(jī)在應(yīng)用可以說(shuō)得是無(wú)處不在。因此在大學(xué)中說(shuō)掌握單片機(jī)的開(kāi)發(fā)技術(shù)是十分重要的,也是十分必要的。      

我在剛剛拿到課程設(shè)計(jì)題目時(shí)有點(diǎn)迷惘,畢竟在前幾周的理論學(xué)習(xí)中沒(méi)有扎實(shí)的掌握單片機(jī)的理論知識(shí),面對(duì)芯片和五顏六色的導(dǎo)線,不知道如何下手,好在通過(guò)上網(wǎng)和圖書(shū)館查閱相關(guān)資料,自己認(rèn)真鉆研以及虛心詢問(wèn)同學(xué),終于解決了一個(gè)又一個(gè)的困難和障礙,成功完成了任務(wù)。   

通過(guò)本次的單片機(jī)課程設(shè)計(jì),不僅豐富了我的理論知識(shí),而且在實(shí)踐過(guò)程中更令我學(xué)會(huì)了堅(jiān)持、耐心和努力。此次單片機(jī)課程設(shè)計(jì)需要運(yùn)用到許多之前所學(xué)過(guò)的知識(shí),令我認(rèn)識(shí)到自己以前學(xué)習(xí)的一些不足之處,例如對(duì)以前所學(xué)知識(shí)的理解不夠深刻,掌握得不夠牢固,運(yùn)用不夠靈活。這讓我懂得了認(rèn)真學(xué)習(xí)的重要性,以及要孜孜不倦地鉆研所學(xué)過(guò)的知識(shí),做得融會(huì)貫通,不能一覽而過(guò),不求甚解。在邊學(xué)習(xí)邊動(dòng)手的過(guò)程中,我對(duì)AT89S52單片機(jī)的構(gòu)造以及原理有了進(jìn)一步的了解,同時(shí)也加深和鞏固了我對(duì)單片機(jī)匯編語(yǔ)言的認(rèn)識(shí)。除此之外,由于是第一次做單片機(jī),因此在此次課程設(shè)計(jì)的過(guò)程中,無(wú)論是電路繪制還是匯編語(yǔ)言編寫(xiě)都難免遇到了不少困難和障礙,例如匯編語(yǔ)言編寫(xiě)出錯(cuò)、電路元件無(wú)從入手等。在面對(duì)困難和障礙時(shí),我慶幸自己沒(méi)有選擇退縮和逃避,而是通過(guò)各種方法,迎難而上,以堅(jiān)持、耐心和努力勇敢無(wú)畏地面對(duì)困難,克服困難,解決困難。讓我發(fā)現(xiàn)問(wèn)題、分析問(wèn)題、解決問(wèn)題以及動(dòng)手實(shí)踐的能力都有了很大的提高,并了解到理論知識(shí)與實(shí)踐相結(jié)合的重要意義。   

從這次的課程設(shè)計(jì)中,我才真正明白理論結(jié)合實(shí)際的道理,在以后的學(xué)習(xí)中,更要把理論聯(lián)系實(shí)際,把我們所學(xué)的理論知識(shí)用到實(shí)際當(dāng)中,學(xué)習(xí)單機(jī)片機(jī)即是如此,出色的程序最終用實(shí)際操作來(lái)實(shí)現(xiàn)才是完美。十分慶幸擁有這次課程設(shè)計(jì),讓我受益匪淺。


單片機(jī)源程序如下:


  1. #include<reg52.h>

  2. #include<stdio.h>

  3. #include<intrins.h>

  4. #define uchar  unsigned char

  5. #define uint  unsigned int

  6. #define CHECK_BUSY

  7. sbit RS = P2^4;

  8. sbit RW = P2^5;

  9. sbit EN = P2^6;

  10. void Delay10ms(unsigned int c)

  11. {

  12. unsigned char a,b;

  13. for (;c>0;c--)

  14. {

  15. for(b=38;b>0;b--)

  16. {for(a=130;a>0;a--);

  17. }

  18. }

  19. }

  20. //判忙函數(shù)

  21. bit LCD_Check_Busy()

  22. {

  23. #ifdef CHECK_BUSY

  24. P0= 0xFF;

  25. RS=0;

  26. RW=1;

  27. EN=0;

  28. _nop_();

  29. EN=1;

  30. return (bit)(P0 & 0x80);

  31. #else

  32. return 0;

  33. #endif

  34. }

  35. //命令函數(shù)



  36. void write_com(uchar com)

  37. {

  38. while(LCD_Check_Busy());

  39. RS=0;

  40. RW=0;

  41. EN=1;

  42. P0= com;

  43. _nop_();

  44. EN=0;

  45. }

  46. //數(shù)據(jù)函數(shù)



  47. void write_dat(uchar dat)

  48. {

  49. while(LCD_Check_Busy());

  50. RS=1;

  51. RW=0;

  52. EN=1;

  53. P0= dat;

  54. _nop_();

  55. EN=0;

  56. }

  57. //字符函數(shù)



  58. void LCD_Write_Char(uchar x,uchar y,uchar dat)

  59. {   

  60. if (y == 0)

  61.   {   

  62.   write_com(0x80 + x);   

  63.   }  

  64. else

  65.   {   

  66.   write_com(0xC0 + x);   

  67.   }      

  68. write_dat( dat);

  69. }

  70. //字符串函數(shù)

  71. void Write_String(uchar x,uchar y,uchar *s)

  72. {   



  73. while (*s)

  74.   {   

  75.   LCD_Write_Char(x,y,*s);   

  76.   s++;

  77.   x++;   

  78.   }

  79. }

  80. //初始化函數(shù)



  81. void LCD_Init()

  82. {

  83.    write_com(0x38);

  84.    Delay10ms(20);

  85.    write_com(0x06);

  86.    Delay10ms(20);

  87.    write_com(0x0C);

  88.    write_com(0x01);

  89.    }

  90. //按鍵掃描函數(shù)



  91. uchar KeyScan()

  92. {

  93. unsigned char cord_h,cord_l;

  94. P3=0x0f;         

  95. cord_h=P3&0x0f;   

  96. if(cord_h!=0x0f)   

  97. {

  98.   Delay10ms(40);      

  99.   if((P3&           0x0f)!=0x0f)

  100.   {

  101.     cord_h=P3&0x0f;

  102.     P3=cord_h|0xf0;

  103.     cord_l=P3&0xf0;

  104.     while((P3&0xf0)!=0xf0);//等待松開(kāi)并輸出

  105.     return(cord_h+cord_l);//鍵盤(pán)最后組合碼值

  106.    }

  107.   }

  108.   return(0xff);

  109. }

  110. unsigned char KeyPro()

  111. {

  112. switch(KeyScan())

  113. {

  114.   case 0x7e:return '1';break;//按下相應(yīng)的鍵所顯示相應(yīng)的值

  115.   case 0x7d:return '2';break;

  116.   case 0x7b:return '3';break;

  117.   case 0x77:return '+';break;

  118.   case 0xbe:return '4';break;

  119.   case 0xbd:return '5';break;

  120.   case 0xbb:return '6';break;

  121.   case 0xb7:return '-';break;

  122.   case 0xde:return '7';break;

  123.   case 0xdd:return '8';break;

  124.   case 0xdb:return '9';break;

  125.   case 0xd7:return 'x';break;

  126.   case 0xee:return '0';break;

  127.   case 0xed:return '.';break;

  128.   case 0xeb:return '=';break;

  129.   case 0xe7:return '/';break;

  130.   default:return 0xff;break;

  131. }

  132. }

  133. main()

  134. {

  135. unsigned char num,i,sign;               

  136. unsigned char temp[16];

  137. bit firstflag;

  138. float a=0,b=0;

  139. unsigned char s;

  140. LCD_Init(); //初始化液晶屏

  141. Delay10ms(40);//延時(shí)

  142. write_com(0x01);

  143. Write_String(0,0,"I LIKE MCU");   

  144. Write_String(0,1,"HBKJXY");   

  145. for(s=0;s<25;s++)

  146.     Delay10ms(300);

  147. write_com(0x01);

  148. while (1)   //主循環(huán)     

  149.   {

  150. num=KeyPro();  //掃描鍵盤(pán)

  151. if(num!=0xff)  //如果掃描是按鍵有效值則進(jìn)行處理

  152.    {

  153.     if(i==0)   

  154.    write_com(0x01);

  155. if(('+'==num)|| (i==16) || ('-'==num) || ('x'==num)|| ('/'==num) || ('='==num))//輸入數(shù)字最大值16,輸入符號(hào)表示輸入結(jié)束

  156.    {

  157.    i=0;

  158.   if(firstflag==0)

  159.       {

  160.       sscanf(temp,"%f",&a);

  161.          firstflag=1;

  162.    }

  163.    else

  164.       sscanf(temp,"%f",&b);

  165.    for(s=0;s<16;s++)

  166.       temp[s]=0;

  167.       LCD_Write_Char(0,1,num);



  168.    if(num!='=')  //判斷當(dāng)前符號(hào)位并做相應(yīng)處理  

  169.       sign=num;   

  170.    else

  171.       {

  172.    firstflag=0;   //檢測(cè)到輸入=號(hào),判斷上次讀入的符號(hào)

  173.          switch(sign)

  174.         {

  175.       case '+':a=a+b;

  176.    break;

  177.    case '-':a=a-b;

  178.    break;

  179.    case 'x':a=a*b;

  180.    break;

  181.    case '/':a=a/b;

  182.    break;

  183.    default:break;

  184.      }

  185.    sprintf(temp,"%g",a);   

  186.          Write_String(1,1,temp);//顯示到液晶屏

  187.    sign=0;a=b=0;      //數(shù)據(jù)清零     

  188.    for(s=0;s<16;s++)

  189.       temp[s]=0;

  190.    }

  191.    }

  192. ……………………

  193. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:

基于51單片機(jī)的簡(jiǎn)易計(jì)算器 .docx (422.11 KB, 下載次數(shù): 32)




回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表