基于51單片機的簡易計算器設計與制作_第1頁
基于51單片機的簡易計算器設計與制作_第2頁
基于51單片機的簡易計算器設計與制作_第3頁
基于51單片機的簡易計算器設計與制作_第4頁
基于51單片機的簡易計算器設計與制作_第5頁
已閱讀5頁,還剩20頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

湖南商務職業技術學院畢業設計

目錄

1產品功能分析.........................................................................................................1

2設計方案遴選.........................................................................................................1

2.1單片機的選擇..............................................................................................1

2.2系統框圖設計..............................................................................................2

3產品硬件設計.........................................................................................................3

3.1STC89C51單片機核心電路設計.................................................................3

3.2鍵盤電路設計............................................................................................3

3.3液晶顯示模塊電路.....................................................................................4

4產品軟件設計.........................................................................................................5

4.1主程序流程圖..............................................................................................6

4.2產品程序清單..............................................................................................7

5產品裝配調試及使用說明.....................................................................................8

5.1產品裝配圖..................................................................................................8

5.2產品調試......................................................................................................9

5.3產品使用說明............................................................................................10

6產品設計技術標準...............................................................................................10

附錄1元器件清單.....................................................................................................11

附錄2電路原理圖.....................................................................................................12

附錄3PCB設計圖....................................................................................................13

附錄4產品實物圖...................................................................................................14

附錄5主程序代碼...................................................................................................15

參考資料...................................................................................................................24

湖南商務職業技術學院畢業設計

基于51單片機的簡易計算器設計與制作

1產品功能分析

本設計是以STC89C51單片機為核心的計算器模擬系統設計,輸入采用4*4

矩陣鍵盤,可以進行加減乘除帶符號數字運算,并在液晶顯示屏LCD1602上顯

示操作過程和結果。

本設計旨在加強掌握單片機理論知識,加強對于實際應用系統設計能力。

綜合運用在校階段所學軟硬件知識分析實際問題,提高完成畢業設計實際問題

的能力,為以后單片機應用和開發奠定一定的基礎,并且完成出帶有四則運算能

力的簡易計算器設計。

2設計方案遴選

選擇好兼容合適的元器件進行產品的組裝,由STC89C51單片機的數據處理

功能以及液晶顯示功能組成,產品應能對數字進行有效運算。

2.1單片機的選擇

方案1:選擇C51系列單片機

51單片機作為應用最廣泛的8位單片機具有對于傳送,清零,置位,測試

等某些特殊功能寄存器進行處理,還有位的功能處理,這些功能的完備,讓操

作者可以得心應手,乘除法指令也給使用者的工作有著很大的便利,對單片機

底層工作原理也能有更深的理解和運用。

當然51單片機的短板也很明顯,外設資源非常有限,運行速度相對于stm32

來說較慢,不太適合做復雜的產品,但運用于不是很復雜的產品其性價比還是

很高的,本人在考慮到上手難度及價格方面等綜合因素,51系列單片機于個人

而言是個相當不錯的選擇,所以選擇了該系列單片機。

方案2:選擇STM32系列單片機

STM32單片機特點是性能好損耗較低,適用于設計的控制電路.但是缺點也

1

湖南商務職業技術學院畢業設計

很明顯,成本較高和復雜。并且STM32是跑指令的,適合跑算法,但是針對多

路的信號處理就需要很多片DSP來并行處理,個人角度而言不適用故沒有選擇。

2.2系統框圖設計

系統框圖如圖2-1所示:

按鍵控制

微處理器LCD1602

運算控制STC89C51單數據顯示

片機

圖2-1系統框圖

2

湖南商務職業技術學院畢業設計

3產品硬件設計

3.1STC89C51單片機核心電路設計

使用STC89C51因為價錢比較便宜,技術相當成熟了,加之穩定耐用,程序

跑起來不容易出錯,但是51單片機偏簡單,沒有現成的控制器和庫,需要了解

原理后親自實現一遍,但是也使基礎知識學習的更加扎實。AT89c51單片機實質

是一個硬件的芯片,要外加各種擴展接口電路,外部設備,硬件和軟件,本設

計選用以STC89C51單片機為主控單元。

3.2鍵盤電路設計

本設計使用4*4矩陣式鍵盤,對于功能相對復雜,需要輸入輸出參數較多

的系統,此矩陣式鍵盤控制十分方便,在單片機系統中,大部分都是設置鍵盤,

按鈕等功能,主要是為了控制運行狀態,便于輸入輸出一些命令或者數據,鍵

盤是最簡單最基本的進行人機交互的途徑,用按鍵的形式來控制,它實際上本

質是一個開關量,簡單的可以用獨立的按鍵,但是本設計需要進行加減乘除等

運算,所以在這里我們使用的是4*4的矩陣式的鍵盤,鍵盤的連接方式如圖3-2

所示。

圖3-2鍵盤電路

3

湖南商務職業技術學院畢業設計

3.3液晶顯示模塊電路

液晶顯示器(LCD)功率小節電,價格實惠,同時使用時的顯示質量高,對

人體得電磁輻射小危害小,人們肉眼可視面積比較大,整體的一個體積相對較

小,本身配置的重量輕快,屏幕顯示出來的畫面效果好,在生活中可以應用范

圍的廣,還有可以數字式接口十分方便等優點,并且它的使用在日常生活可以

說是隨處可見了,像菜市場和便利店用到的計算器,旅游和電影中用到得數碼

相機,在家中擺放得液晶電視等,因為本設計在使用時需要顯示的信息比較多,

為了在操作時可以能直觀看到最后結果,并且看起來整體比較美觀,所以使用

總線等方法來簡化線路連接方式,本設計用液晶顯示器(LCD)。

LCD1602液晶顯示原理圖如圖3-3所示。

圖3-3LCD1602液晶顯示原理圖

LCM1602液晶顯示實物圖3-4如下圖所示:

4

湖南商務職業技術學院畢業設計

圖3-4LCM1602液晶顯示實物圖

4產品軟件設計

產品采用C語言,KELL編程環境,由相對簡單的幾個模塊化程序組成,計

算器需要用到很多按鍵,如果用獨立按鍵的方式,編程繪簡單很多,但是繪占

用許多I/O資源,所以一般情況都不會采用如圖4.1這種方式,但是資源有限,

不過并不會影響其計算器功能

5

湖南商務職業技術學院畢業設計

4.1主程序流程圖

主程序流程圖如圖4-1所示。

6

湖南商務職業技術學院畢業設計

圖4-1主程序流程圖

4.2產品程序清單

產品程序清單如圖4-2所示。

7

湖南商務職業技術學院畢業設計

圖4-2產品程序清單

5產品裝配調試及使用說明

5.1產品裝配圖

產品主要由STC89C52單片機模塊,LCD液晶顯示器模塊,電源接口,電源

8

湖南商務職業技術學院畢業設計

開關,獨立按鍵等等組成。產品裝配圖如圖5-1所示。

圖5-1產品裝配圖

5.2產品調試

A.檢查元件好壞

按照電路圖買好元件先大概檢查一下外部有無損壞,然后按照不同元件的不同

檢查方法一個一個來檢測,要細致把控每個元件的好壞,在對照這原理圖是否

一致,全部檢查完后在進行焊接,不然出錯后將會不方便更改。

B.放置、焊接各元件

首先按照原理圖來,一個一個放好元器件,在放好元器件的過程中,最好

9

湖南商務職業技術學院畢業設計

是要先焊接比較容易焊接容易的元器件,焊接難度高的和有特別要求的元件,

特別是容易壞的元件我們要后焊,要注意芯片和元件的安裝方向,如果弄錯不

方便更改,在焊接的時候我們要把控好時機連續焊接時間最好不要超過8s。

5.3產品使用說明

A.插好電源,按開關鍵等待計算機啟動。

B.該計算機一共有1到9,加減乘除,清零和運算結果加起來十五個按鍵。

C.隨機組合1234等數字進行運算,觀察液晶顯示屏上的運算結果如何,運

算完后按清零鍵即可重新開始計算。

D.使用完后按下開關,拔掉電源即可。

6產品設計技術標準

[1]J-STD-001E電氣與電子組件的焊接要求

[2]IPC-A-610D(中文版),IPC-A-610E電子組件的可接受性要求

[3]IPC-7711/21電子組件和電路板的返工&返修

[4]GB/T11457-2006信息技術軟件工程術語;

[5]GB/T8566-2007信息技術軟件生存周期過程標準;

[6]GB/T8567-2006計算機軟件文檔編制規范。

10

湖南商務職業技術學院畢業設計

附錄

附錄1元器件清單

11

湖南商務職業技術學院畢業設計

附錄2電路原理圖

12

湖南商務職業技術學院畢業設計

附錄3PCB設計圖

13

湖南商務職業技術學院畢業設計

附錄4產品實物圖

14

湖南商務職業技術學院畢業設計

附錄5主程序代碼

#include<reg52.h>//調用單片機頭文件

#include<stdio.h>//調用單片機頭文件

#include<string.h>//調用單片機頭文件

#include<stdlib.h>//調用單片機頭文件

#defineucharunsignedchar//無符號字符型宏定義變量范圍0~255

#defineuintunsignedint//無符號整型宏定義變量范圍0~65535

floatnum1;//保存第一個數

floatnum2;//保存第二個數

ucharjjcc;//加減乘除標志變量

ucharLcd_Str[17];//顯示區緩存

ucharNum_str[17];

ucharLcd_num2_add=0;//第二個數據開始位的增量

ucharLcd_dis1_i=0;//記錄顯示第一行字符

ucharLcd_num1_i=0;//記錄num1是幾位數

ucharLcd_num2_i=0;//記錄num2是幾位數

ucharDian_i=0;//小數點位數

sbitrs=P1^0;//寄存器選擇信號H:數據寄存器L:指令寄存器

sbitrw=P1^1;//寄存器選擇信號H:數據寄存器L:指令寄存器

sbite=P1^2;//片選信號下降沿觸發

/********************************************************************

*名稱:delay_uint()

*功能:小延時。

*輸入:無

*輸出:無

***********************************************************************/

voiddelay_uint(uintq)

{

while(q--);

}

/********************************************************************

*名稱:write_com(ucharcom)

*功能:1602指令函數

*輸入:輸入的指令值

15

湖南商務職業技術學院畢業設計

*輸出:無

***********************************************************************/

voidwrite_com(ucharcom)

{

rs=0;//寫指令

rw=0;//對1602寫操作

P0=com;//P0口對1602寫指令數據

delay_uint(25);

e=1;//e=1使能信號

delay_uint(100);//延時一下等1602完成操作

e=0;

}

/********************************************************************

*名稱:write_data(uchardat)

*功能:1602寫數據函數

*輸入:需要寫入1602的數據

*輸出:無

***********************************************************************/

voidwrite_data(uchardat)

{

rs=1;//寫數據

rw=0;//對1602寫操作

P0=dat;//P0口對1602寫數據

delay_uint(25);

e=1;//e=1使能信號

delay_uint(100);//延時一下等1602完成操作

e=0;

}

/***********************lcd1602上顯示這字符函數************************/

voidDis_str(ucharadd,uchar*p)

{

write_com(add);//寫1602的地址

while(*p>0)

{

write_data(*p);//寫數據

p++;//指針地址加1

}

}

voidinit_1602()

16

湖南商務職業技術學院畢業設計

{

write_com(0x38);//顯示模式設置:16×2顯示,5×7點陣,8位數據接口不檢測忙信號

write_com(0x0c);//開顯示不顯示光標

write_com(0x06);//當寫一個字符是,地址指針加1

write_com(0x01);//清除顯示

}

/***************************************************************

*名稱:delay_1ms()

*功能:延時1ms函數

*輸入:q

*輸出:無

****************************************************************/

voiddelay_1ms(uintq)

{

uinti,j;

for(i=0;i<q;i++)

for(j=0;j<120;j++);

}

ucharKey_io;//暫存IO值

ucharkey_new;//松手檢測自鎖變量

ucharkey_can;//按鍵值

ucharKey_D_bit;

/********************按鍵程序*****************/

voidkey(void)

{

key_can=18;

P3=0xf0;//拉低第四位

Key_io=P3;

if(Key_io!=0xf0)//查看搞四位是否有低電平

{

Key_io|=0x0f;//保持高四位出現低電平的管腳,拉高第四位

P3=Key_io;//重新復制IO口

Key_io=P3;//讀取IO信息,確定鍵值

if(key_new==0)//自鎖變量,松手檢測

{

key_new=1;

switch(Key_io)

{

case0x7e:key_can=10;//得到按鍵值

break;

17

湖南商務職業技術學院畢業設計

case0x7d:key_can=0;//得到按鍵值

break;

case0x7b:key_can=11;//得到按鍵值

break;

case0x77:key_can=15;//得到按鍵值

break;

case0xbe:key_can=7;//得到按鍵值

break;

case0xbd:key_can=8;//得到按鍵值

break;

case0xbb:key_can=9;//得到按鍵值

break;

case0xb7:key_can=14;//得到按鍵值

break;

case0xde:key_can=13;//得到按鍵值

break;

case0xdd:key_can=6;//得到按鍵值

break;

case0xdb:key_can=5;//得到按鍵值

break;

case0xd7:key_can=4;//得到按鍵值

break;

case0xee:key_can=12;//得到按鍵值

break;

case0xed:key_can=3;//得到按鍵值

break;

18

湖南商務職業技術學院畢業設計

case0xeb:key_can=2;//得到按鍵值

break;

case0xe7:key_can=1;//得到按鍵值

break;

}

}

}

else

{

key_new=0;

}

}

ucharXS_JG(ucharadd,floatn)//顯示函數

{

ucharlen,p=0;

memset(Lcd_Str,0,16);//內存空間初始化

sprintf(Lcd_Str,"%e",n);

while(Lcd_Str[p]!='e')

{

p++;

}

if(Lcd_Str[p+2]==0x30&&Lcd_Str[p+3]<0x37)

{

sprintf(Lcd_Str,"%f",n);

len=strlen(Lcd_Str);

while(len)

{

if(Lcd_Str[len-1]=='.')

{

Lcd_Str[len-1]=0;

break;

}

len--;

}

}

else

{

while(p)

{

if(Lcd_Str[p-1]=='.')

19

湖南商務職業技術學院畢業設計

{

Lcd_Str[p-1]='';

break;

}

p--;

}

}

Dis_str(add,"");

Dis_str(add,Lcd_Str);

returnlen;

}

/*************顯示特殊字符函數***************/

voidfuhao(uchars)

{

if(jjcc<5)

{

if(jjcc==0)

{

Num_str[Lcd_dis1_i]=s;

Lcd_dis1_i++;

Lcd_num2_add=Lcd_dis1_i;

}

else

{

if(Num_str[Lcd_num2_add]==0)

Num_str[Lcd_dis1_i-1]=s;

}

Dis_str(0x80,Num_str);

}

if(jjcc==5)

{

Lcd_dis1_i=4;

Lcd_num2_i=0;

Lcd_num2_add=4;

memset(Num_str,0,16);//內存空間初始化

Num_str[0]='A';

Num_str[1]='n';

Num_str[2]='s';

Num_str[3]=s;

20

湖南商務職業技術學院畢業設計

Dis_str(0x80,"");

Dis_str(0x80,Num_str);

}

}

voidmain(void)

{

init_1602();//lcd1602初始化

write_data('0');

memset(Num_str,0,16);

while(1)

{

key();//讀按鍵值

delay_1ms(10);

if(key_can<18)//是否有按鍵按下,小于16時有按鍵按下

{

delay_1ms(30);

switch(key_can)

{

case11:if(Num_str[Lcd_num2_add]<=0x39&&Num_str[Lcd_num2_add]>=0x30)

num2=atof(Num_str+Lcd_num2_add);//從數組中取第二個數字

else

break;

Lcd_num2_i=0;

switch(jjcc)

{

case1:num1+=num2;//加

break;

case2:num1-=num2;//減

break;

case3:num1*=num2;//乘

break;

case4:num1/=num2;//除

break;

}

XS_JG(0xc0,num1);

Dis_str(0x80+Lcd_dis1_i,"=");

jjcc=5;//等號標志

21

湖南商務職業技術學院畢業設計

break;

case12:if(Num_str[0]==0||Lcd_num2_i>0)

break;

fuhao('+');

jjcc=1;Dian_i=0;

break;//按下加號鍵

case13:if(Num_str[0]==0||Lcd_num2_i>0)

break;

fuhao('-');

jjcc=2;Dian_i=0;

break;//按下減號鍵

case14:if(Num_str[0]==0||Lcd_num2_i>0)

break;

fuhao('*');

jjcc=3;Dian_i=0;

break;//按下乘號鍵

case15:if(Num_str[0]==0||Lcd_num2_i>0)

break;

fuhao('/');

jjcc=4;Dian_i=0;

break;//按下除號鍵

case10:if(Dian_i==0&&(Lcd_num1_i!=0||Lcd_num2_i!=0))//輸入小數點時

前面必須有數字

{

Dian_i++;//小數點

Num_str[Lcd_dis1_i]='.';

Lcd_dis1_i++;

Dis_str(0x80,Num_str);

}

break;

case16:jjcc=0;

Dis_str(0x80,"0");//清除顯示

Dis_str(0xc0,"");

/*********************刪除一個數字*******************/

case17:if(Lcd_dis1_i==0)

break;

/*********************刪除一個數字刪

除小數點按等號后不再撤銷*******************/

if(((Num_str[Lcd_dis1_i-1]<=0x39&&Num_str[Lcd_dis1_i-1]>=0x30)||Num_str[Lcd_dis1_i-1]==

'.')&&jjcc!=5)

22

湖南商務職業技術學院畢業設計

{

if(Num_str[Lcd_dis1_i-1]=='.')

{Dian_i=0;}

else

{

if(jjcc==0)

{

Lcd_num1_i--;

}

else

{

Lcd_num2_i--;

}

}

Lcd_dis1_i--;

Lcd_num2_add=Lcd_dis1_i;

Num_str[Lcd_dis1_i]=0;

Dis_str(0x80,"");

Dis_str(0x80,Num_str);

}

if(Lcd_dis1_i==0)

write_data('0');

break;

default:if(key_can<10&&Dian_i<7)//顯示對應的數字鍵,輸入的小數

點后位數小于7位

{

if(jjcc==5)

{

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論