基于51單片機簡易計算器的原理圖如下
2021-01-12_100911.png (127.34 KB, 下載次數(shù): 60)
下載附件
2021-1-12 10:17 上傳
基于51單片機簡易計算器的pcb圖如下
2021-01-12_101016.png (115.34 KB, 下載次數(shù): 70)
下載附件
2021-1-12 10:19 上傳
任務書如下
一. 設計要求
(一) 基本任務
該簡易計算器設計硬件電路采用三部分電路模塊構成, 第一部分是鍵盤模塊
電路, 采用 4*4 矩陣式鍵盤作為輸入電路; 第二部分是 LCD1602 液晶顯示模塊;
第三部分是以 51 單片機作為控制核心。 軟件程序主要由三部分組成: 主程序、
按鍵掃描程序和 LCD1602 顯示程序。
(二) 性能指標
(1) 用單片機 stc89C51 設計一個簡易計算器, 并用 1602 液晶顯示相應的
數(shù)據(jù)。
(2) 可以進行簡單的加減乘除運算。
(3) 最大可以 9999*9999, 。
(4) 可以通過 proteus 仿真。
附: 可供選用的元件清單
1)1602 液晶
2)排針*16
3)16p 母座
4)STC89C51 單片機
5)40 腳 IC 座
6)10k 電阻*2
7)1.5k 電阻
8)103 排阻
9)10uf 電解電容
10)12M 晶振
11)30pf 電容*2
12)按鍵*17
13)自鎖開關等等
Proteus仿真如下
2021-01-12_102321.png (56.46 KB, 下載次數(shù): 65)
下載附件
2021-1-12 10:29 上傳
單片機源程序如下:- #include "reg52.h"
- #include "string.h"
- #include "stdio.h"
- #include "lcd1602.h"
- #include "keyboard.h"
- #define keydeng 14
- #define keyzuoyi 12
- code unsigned char KeyDisPlaybuf[16] =
- {
- '1', '2', '3', '+',\
- '4', '5', '6', '-',\
- '7', '8', '9', '*',\
- '<', '0', '=', '/'
- };
- long Count(char *ch, char len)//簡單計算器 僅支持+-*/
- {
- unsigned char i = 0;
- char Operation;
- long Num1=0,Num2=0;
- while(i<len && ch[i]!='+' && ch[i]!='-' && ch[i]!='*' && ch[i]!='/')
- {
- Num1*=10;
- Num1+=ch[i]-'0';
- i++;
- }
- Operation=ch[i++];
- while(i<len && ch[i]!='=')
- {
- Num2*=10;
- Num2+=ch[i]-'0';
- i++;
- }
- switch(Operation)
- {
- case'+':return Num1+Num2;
- case'-':return Num1-Num2;
- case'*':return Num1*Num2;
- case'/':return Num1/Num2;
- }
- return 0;
- }
- void EasyCounter(void)
- {
- unsigned char buff[30];
- unsigned char text[30];
- unsigned char key;
- unsigned char i = 0;
- do
- {
- key = keycan();//讀取鍵值
- if(key!=0xff)//鍵值不等于0
- {
- text[i++]=KeyDisPlaybuf[key];//記錄鍵值對應的字符
- text[i]='\0';
- LCD_ShowStr(0,0," ");
- LCD_ShowStr(16-strlen(text),0,text);
- }
- if(key==keyzuoyi&&i>0)//按下"<"時刪除一位
- i-=2;
- }while(key!=keydeng);//按下'='時結束輸入
- sprintf(buff, "%ld", Count(text, strlen(text)));
- LCD_ShowStr(0,1," ");
- LCD_ShowStr(16-strlen(buff),1,buff);
- }
- void main(void)
- {
- LCD_Init();
- while(1)
- {
- EasyCounter();
- }
- }
復制代碼- #include "reg52.h"
- #include "keyboard.h"
- #define Key P1
- code unsigned char KeyValueL[]={0xf7,0xfb,0xfd,0xfe};
- code unsigned char KeyValueH[]={0x70,0xb0,0xd0,0xe0};
- void KeyDelay(unsigned char xms)
- {
- unsigned char i;
- while(xms--)
- {
- for(i=0; i<120; i++);
- }
- }
- unsigned char keycan(void)
- {
- unsigned char i,j;
- unsigned char tmp;
- Key=0xf0;
- if(Key!=0xf0)
- {
- KeyDelay(10);
- if(Key!=0xf0)
- {
- for(i=0; i<4; i++)
- {
- Key=KeyValueL[i];
- for(j=0; j<4; j++)
- {
- if((Key&0xf0)==KeyValueH[j])
- {
- tmp=i+j*4;
- while(Key!=KeyValueL[i]);
- return tmp;
- }
- }
- }
- }
- }
- return 0xff;
- }
復制代碼
2021-01-12_103212.png (93.19 KB, 下載次數(shù): 71)
下載附件
2021-1-12 10:32 上傳
所有資料51hei提供下載:
原理圖andPCB圖.zip
(9.1 MB, 下載次數(shù): 61)
2021-1-12 10:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
簡易計算器.doc
(676.5 KB, 下載次數(shù): 55)
2021-1-12 10:38 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
c程序,和仿真.zip
(89.59 KB, 下載次數(shù): 79)
2021-1-12 10:38 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
2021-01-12_103522.png (4.51 KB, 下載次數(shù): 68)
下載附件
2021-1-12 10:35 上傳
|