導航:首頁 > 操作系統 > 單片機簡易計算器設計

單片機簡易計算器設計

發布時間:2022-03-12 11:07:03

① 求助:關於80C51單片機簡易計算器設計的程序,要求是匯編語言。謝謝哈

ORG 0000H
START:MOV 78H,#0 ;初始化:78H放0的段碼,其餘放熄滅碼
MOV 79H,#10
MOV 7AH,#10
MOV 7BH,#10
MOV 7CH,#10
MOV 7DH,#10
MOV R5, #0 ;R5是按鍵次數,初始置0
MOV 30H,#0 ;30H是功能鍵存放單元,置為0
MOV 40H,#0 ;40H單元初始置為0
MOV 41H,#0 ;41H單元初始置為0
LOOP:LCALL DIR
LCALL KEY
INC R5
;散轉程序,判斷按下的是哪個鍵
S1:CJNE A,#10,S2 ;不是"+"鍵,跳到S2
LJMP FUN ;是"+"鍵,跳到FUN
S2:CJNE A,#11,S3 ;不是"-"鍵,跳到S3
LJMP FUN ;是"-"鍵,跳到FUN
S3:CJNE A,#12,S4 ; 不是"*"鍵,跳到S4
LJMP FUN ; 是"*"鍵,跳到FUN
S4:CJNE A,#13,S5 ; 不是"/"鍵,跳到S5
LJMP FUN ; 是"/"鍵,跳到FUN
S5:CJNE A,#14,S6 ; 不是"="鍵,跳到S6
LJMP FUN ;是"="鍵,跳到FUN
S6:CJNE A,#15,N1 ; 不是"CL"鍵,跳到N1
LJMP START ; 是"CL"鍵,跳到START
N1:CJNE R5,#1,N2 ;判斷第幾次按鍵
LJMP D11
N2:CJNE R5,#2,N3
LJMP T2
N3:CJNE R5,#3,N4
LJMP T3
N4:CJNE R5,#4,N5
LJMP T4
N5:CJNE R5,#5,N6
LJMP T5
N6:CJNE R5,#6,START
LJMP T6

D11:MOV R4,A
MOV 78H,A ;輸入值送顯示個位緩存
MOV 79H,#10
MOV 7AH,#10
MOV 7BH,#10
MOV 7CH,#10
MOV 7DH,#10
LJMP LOOP
T2:MOV R7,A
MOV B,#10
MOV A,R4
MUL AB
ADD A,R7
MOV R4,A
MOV 7AH,#10
MOV 7BH,#10
MOV 7CH,#10
MOV 7DH,#10
MOV 79H, 78H ;個位到十位
MOV 78H,R7 ;新數為個位
LJMP LOOP
T3:MOV R7,A
MOV B,#10
MOV A,R4
MUL AB
ADD A,R7
MOV R4,A
MOV 7BH,#10
MOV 7CH,#10
MOV 7DH,#10
MOV 7AH,79H ;十位到百位
MOV 79H,78H ;個位到十位
MOV 78H,R7 ; 新數為個位
LJMP LOOP
T4:MOV R7,A
MOV B,#10
MOV A,R4
MUL AB
ADD A,R7
MOV R4,A
MOV 7CH,#10
MOV 7DH,#10
MOV 7BH,7AH
MOV 7AH,79H
MOV 79H,78H
MOV 78H,R7
LJMP LOOP
T5:MOV R7,A
MOV B,#10
MOV A,R4
MUL AB
ADD A,R7
MOV R4,A
MOV 7DH,#10

MOV 7CH,7BH
MOV 7BH,7AH
MOV 7AH,79H
MOV 79H,78H
MOV 78H,R7
LJMP LOOP

T6:MOV R7,A
MOV B,#10
MOV A,R4
MUL AB
ADD A,R7
MOV R4,A
MOV 7DH,7CH
MOV 7CH,7BH
MOV 7BH,7AH
MOV 7AH,79H
MOV 79H,78H
MOV 78H,R7
LJMP LOOP

MOV 7CH,7BH
MOV 7BH,7AH
MOV 7AH,79H
MOV 79H,78H
MOV 78H,R7
LJMP LOOP

FUN:MOV 78H,#10
MOV 79H,#10
MOV 7AH,#10
MOV R0,30H ;與上次功能鍵交換
MOV 30H,A
MOV A,R0
CJNE A,#10,FUN1 ;判斷功能鍵
LJMP ADDY ;"+"
FUN1:CJNE A,#11,FUN2
LJMP SUBT ;"-"
FUN2:CJNE A,#12,FUN3
LJMP MULT ;"*"
FUN3:CJNE A,#13,FUN4
LJMP DIVI ;"/"
FUN4:CJNE A,#14,FUN5 ;首次按功能鍵,即A=#0
LJMP EQUA ;"="
FUN5:MOV 40H,R4 ;保存第一個數
MOV R5,#0 ;按鍵次數清零
LJMP BCD ;將其拆為bcd碼,以便後來將其顯示
OF:LJMP START ;溢出處理
ADDY:MOV A,40H ;第一個數送累加器
ADD A,R4 ;第一個數加第二個數
JB CY,OF ;溢出
MOV 40H,A ;存本次結果
MOV R5,#0 ;按鍵次數清零
LJMP BCD
SUBT:MOV A,40H
SUBB A,R4
JB CY,OF
MOV 40H,A
MOV R5,#0
LJMP BCD
MULT:MOV A,40H
MOV B,A
MOV A,R4
MUL AB
JB OV,OF
MOV 40H,A
MOV R5,#0
LJMP BCD
DIVI:MOV A,R4
MOV B,A
MOV A,40H
DIV AB
JB OV,OF
MOV 40H,A
MOV R5,#0
LJMP BCD
EQUA:MOV R5,#0
LJMP BCD
BCD:MOV B,#10
MOV A,40H ;結果送累加器
DIV AB ;結果除10
MOV 41H,A ;暫存"商"
MOV A,B ;取個位數
MOV 78H,A ;個位數送顯示緩存
MOV A,41H
JZ RETURN ;結果是一位數,返回LOOP
MOV B,#10
MOV A,41H
DIV AB
MOV 41H,A
MOV A,B
MOV 79H,A ;十位送顯示緩存
MOV A,41H
JZ RETURN ;結果是二位數,返回LOOP
MOV 7AH,A ;百位數送顯示緩存
RETURN:LJMP LOOP
;動態顯示子程序
DIR:MOV DPTR,#TAB ; 數碼管解碼表首址
MOV R0,#78H ;待顯緩沖區個位地址
MOV A,#0FEH ; 個位位選信號
MOV R1,A
LD1:MOV A,@R0
MOVC A,@A+DPTR ;查表
MOV P2,R1 ;共陽極管字位選擇送到P2口
MOV P0,A ;欄位碼送P0口
LCALL DELAY1ms ;調延時1ms 子程序
INC R0 ;R0指向下一模塊
MOV A,R1 ;
JNB ACC.5,LD2 ;判斷是否發完6個數
RL A ;指向下一個位
MOV R1,A ;位選信號存回R3
SJMP LD1 ;跳去再顯示下一個數
LD2:RET ;發完6個數就返回
TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,90H,0FFH ;共陽極解碼表
DELAY1ms:MOV R6,#2
LOOP1:MOV R7,#248
NOP
LOOP2:DJNZ R7,LOOP2
DJNZ R6,LOOP1
RET
KEY:LCALL KS ;調用檢測按鍵子程序
JNZ K1 ;有鍵按下繼續
LCALL DELAY2 ;無鍵按調用延時去抖
ACALL DIR ;調用動態顯示
AJMP KEY ;返回繼續檢測按鍵
K1:LCALL DELAY2 ;有鍵按下延時去抖動
LCALL KS ;再調用檢測按腱子程序
JNZ K2 ;確認有按鍵進行下一步
ACALL DIR ;調用動態顯示
AJMP KEY ;無鍵按下返回繼續檢測
K2:MOV R2,#0EFH ;將掃描值送入R2暫存
MOV R3,#00H ;將第一列值送入R3暫存
K3:MOV P1,R2 ;將R2值送入P1口
L0:JB P1.0,L1 ;P1.0等於1跳轉到L1
MOV A,#00H ;將第一行值送入ACC
AJMP LK ;跳轉到鍵值處理程序
L1:JB P1.1,L2 ;P1.1等於1跳轉到L2
MOV A,#04H ;將第二行的行值送入ACC
AJMP LK ;跳轉到鍵值處理程序
L2:JB P1.2,L3 ;P1.2等於1跳轉到L3
MOV A,#08H ;將第三行行值送入ACC
AJMP LK ;跳轉到鍵值處理程序
L3:JB P1.3,NEXT ;P1.3等於1跳轉到NEXT處
MOV A,#0CH ;將第四行行值送入ACC
LK:ADD A,R3 ;行值與列值相加後的鍵值送入A
PUSH ACC ;將A中的值送入堆棧暫存
K4:LCALL DELAY2 ;調用延時去抖程序
LCALL KS ;調用按鍵檢測程序
JNZ K4 ;按鍵沒有松開繼續返回檢測
POP ACC ;將堆棧值送入ACC
MOV DPTR,#KEYTAB
MOVC A,@A+DPTR
RET
NEXT:INC R3 ;列值加一
MOV A,R2 ;R2值送入A
JNB ACC.7,KEY ;掃描完至KEY處進行下一掃描
RL A ;掃描未完將值左移一位進行下一列掃描
MOV R2,A ;將ACC值送入R2暫存
AJMP K3 ;跳轉到K3繼續
KS:MOV P1,#0FH ;將P1口高四位置0低四位置1
MOV A,P1 ;讀P1口
XRL A,#0FH ;將A中的值與A中的值相異或
RET ;子程序返回
KEYTAB:DB 1,2,3,10,4,5,6,11,7,8,9,12,15,0,14,13 ;鍵值表
DELAY2:MOV R6,#2H ;延時去抖動子程序
LP1:MOV R7,#0FAH
LP2:DJNZ R7,LP2
DJNZ R6,LP1
RET

END

② 一、設計題目 基於單片機的簡易計算器設計 二、設計任務 1、用單片機設計一簡易計算器。 2、採用4*4鍵盤,

1. 4X4鍵盤輸入,點陣字元型液晶顯示。
2. 由於所採用的浮點程序庫的限制(MCU平台只找到這個……),浮點運算採用3位元組二進制補碼表示,有效數字6位。對於輸入輸出,採用3位元組BCD碼浮點數格式,有效數字只有4位,因此最終有效數字只有4位。
3. 可進行連續輸入,例如:1.23+4.56*8.23/234.8 ,但是運算結果為從左到右,這也是8位簡易計算器的方式。
4. 可進行錯誤判斷,溢出、除零等錯誤將顯示一個字元 E 。
5. 由於鍵盤只有16個按鍵,安排如下:
+---------------+
| 7 | 8 | 9 | + |
| 4 | 5 | 6 | - |
| 1 | 2 | 3 | * |
| 0 | . | = | / |
+---------------+
6. 按鍵的缺少導致取消了一些特殊函數,即開根號,三角函數(sin, cos, tan, ctg)的實現,由於這些函數在浮點程序庫中均已提供,如果硬體允許,在原來的框架上添加這些附加功能是很容易的(可以看作和+, -, *, /等價的按鍵操作,調用不同的子程序進行運算即可)
7. 按兩次 = 等於清靈。因為按鍵實在太少,才採用了這個做法。
8. 相應舉例:
按鍵 結果 說明
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
123+= 123 按下等號而沒有第二個操作數,保留第一個操作數
並認為此次運算結束(等號的功能)

123+321/111 4.0 等價於(123+321) / 111

2.3+5.4=/0.1+ 77 等號後直接按 / ,則將前面的運算結果作為第一個
操作數
1/0= E 錯誤顯示

源碼去這里:

③ 基於MSP430單片機的簡易計算器設計

這是我以前的,你可以看看:
第六頁 開始:模擬+程序
http://wenku..com/view/2447d32d915f804d2b16c18e.html

④ 用單片機設計簡易計算器

給你些子程序,自己看著湊吧。呵呵。有了這些,寫出來應該不難了。

;@@@@@@@@@雙位元組整數運算@@@@@@@@@@@@@@@@@@
;***********雙位元組無符號加法**************
;入口:R6(H),R7,R4(H),R5,出口:和R6(H),R7(L)
UADD: MOV A,R7
ADD A,R5
MOV R7,A
MOV A,R6
ADDC A,R4
MOV R6,A
RET
;***********雙位元組無符號減法**************
;入口:被減數R6(H),R7(L),減數R4(H),R5(L),出口:差R6(H),R7(L)
CLR C
MOV A,R7
SUBB A,R5
MOV R7,A
MOV A,R6
SUBB A,R4
MOV R6,A
RET
;***********雙位元組無符號乘法**************
;入口:R6(H),R7(L),R4(H),R5(L),出口:積R6(H),R7(L)
UMUL: MOV A,R7
MOV B,R5
MUL AB
MOV R0,B
XCH A,R7
MOV B,R4
MUL AB
ADD A,R0
XCH A,R6
MOV B,R5
MUL AB
ADD A,R6
MOV R6,A
RET

;***********雙位元組無符號除法*****************
;入口:R6(H),R7(L),R4(H),R5(L),出口:商R6(H),R7(L),余R4(H),R5(L)
;影響:R2,R3,
;堆棧需求:1
UDIV: CLR C
CLR A
MOV R2,A
MOV R3,A
MOV B,#10H
MOVBIT: MOV A,R7;R6、R7中數據左移一位到R2、R3中,C到R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R3
RLC A
MOV R3,A
MOV A,R2
RLC A
MOV R2,A
CLR C ;R2R3-R4R5
MOV A,R3
SUBB A,R5
PUSH Acc
MOV A,R2
SUBB A,R4
JBC Cy,MOVBIT0;不夠減,清C繼續左移
MOV R2,A;夠減,存回余數並置位C
POP Acc
MOV R3,A
SETB C
SJMP MOVBIT1
MOVBIT0: POP Acc
MOVBIT1: DJNZ B,MOVBIT
MOV A,R7
RLC A
MOV R7,A
MOV A,R6
RLC A
MOV R6,A
MOV A,R2
MOV R4,A
MOV A,R3
MOV R5,A
RET

(7) 標號: DIVD 功能:雙位元組二進制無符號數除法

入口條件:被除數在R2、R3、R4、R5中,除數在R6、R7中。
出口信息:OV=0 時,雙位元組商在R2、R3中,OV=1 時溢出。
影響資源:PSW、A、B、R1~R7 堆棧需求: 2位元組
DIVD: CLR C ;比較被除數和除數
MOV A,R3
SUBB A,R7
MOV A,R2
SUBB A,R6
JC DVD1
SETB OV ;溢出
RET
DVD1: MOV B,#10H ;計算雙位元組商
DVD2: CLR C ;部分商和余數同時左移一位
MOV A,R5
RLC A
MOV R5,A
MOV A,R4
RLC A
MOV R4,A
MOV A,R3
RLC A
MOV R3,A
XCH A,R2
RLC A
XCH A,R2
MOV F0,C ;保存溢出位
CLR C
SUBB A,R7 ;計算(R2R3-R6R7)
MOV R1,A
MOV A,R2
SUBB A,R6
ANL C,/F0 ;結果判斷
JC DVD3
MOV R2,A ;夠減,存放新的余數
MOV A,R1
MOV R3,A
INC R5 ;商的低位置一
DVD3: DJNZ B,DVD2 ;計算完十六位商(R4R5)
MOV A,R4 ;將商移到R2R3中
MOV R2,A
MOV A,R5
MOV R3,A
CLR OV ;設立成功標志
RET

⑤ 單片機89c52的簡易計算器的製作

顯示屏最好用液晶的,1602就可以啦。然後4*4鍵盤,單片機的最小系統,電源模塊等等。

如果幫助到您,請記得採納為滿意答案哈,謝謝!祝您生活愉快! vae.la

⑥ 課程設計:用51單片機設計一個簡易計算器

『哦啦啦啊呀呀有個子系統好嗎啉了解我在不在』

⑦ 基於51單片機的簡易計算器設計,急

//功能 0 1 2 3 4 5 6 7 8 9 + - × ÷ = 清零 表3-1 3.2 計算器的軟體設計

#include<reg51.h> //頭文件

#define uint unsigned int //

#define uchar unsigned char

sbit lcden=P2^3; //定義引腳

sbit rs=P2^4;

sbit rw=P2^0;

sbit busy=P0^7;

char i,j,temp,num,num_1;

long a,b,c; //a,第一個數 b,第二個數 c,得數

float a_c,b_c;

uchar flag,fuhao;//flag表示是否有符號鍵按下,fuhao表徵按下的是哪個符號

uchar code table[]={ 7,8,9,0, 4,5,6,0, 1,2,3,0, 0,0,0,0};

uchar code table1[]={

7,8,9,0x2f-0x30,

4,5,6,0x2a-0x30,

1,2,3,0x2d-0x30,

0x01-0x30,0,0x3d-0x30,0x2b-0x30};

void delay(uchar z) // 延遲函數

{

uchar y;

for(z;z>0;z--)

for(y=0;y<110;y++);

} void check() // 判斷忙或空閑

{

do{

P0=0xFF;

rs=0; //指令

rw=1; //讀

lcden=0; //禁止讀寫

delay(1); //等待,液晶顯示器處理數據

lcden=1; //允許讀寫

}while(busy==1); //判斷是否為空閑,1為忙,0為空閑

}

void write_com(uchar com) // 寫指令函數

{

P0=com; //com指令付給P0口

rs=0;

rw=0;

lcden=0;

check();

lcden=1;

}

void write_date(uchar date) // 寫數據函數

{

P0=date;

rs=1;

rw=0;

lcden=0;

check();

lcden=1;

}

void init() //初始化

{

num=-1;

lcden=1; //使能信號為高電平

write_com(0x38); //8位,2行

write_com(0x0c); //顯示開,游標關,不閃爍*/

write_com(0x06); //增量方式不移位 顯竟獗暌貧 柚?

write_com(0x80); //檢測忙信號

write_com(0x01); //顯示開,游標關,不閃爍

num_1=0;

i=0;

j=0;

a=0; //第一個參與運算的數

b=0; //第二個參與運算的數

c=0;

flag=0; //flag表示是否有符號鍵按下,

fuhao=0; // fuhao表徵按下的是哪個符號

}

void keyscan() // 鍵盤掃描程序

{

P3=0xfe;

if(P3!=0xfe)

{

delay(20); //延遲20ms

if(P3!=0xfe)

{

temp=P3&0xf0;

switch(temp)

{

case 0xe0:num=0;

break;

case 0xd0:num=1;

break;

case 0xb0:num=2;

break;

case 0x70:num=3;

break;

}

}

while(P3!=0xfe);

if(num==0||num==1||num==2)//如果按下的是'7','8'或'9

{

if(j!=0)

{

write_com(0x01);

j=0;

}

if(flag==0)//沒有按過符號鍵

{

a=a*10+table[num];

}

else//如果按過符號鍵

{

b=b*10+table[num];

}

}

else//如果按下的是'/'

{

flag=1;

fuhao=4;//4表示除號已按

}

i=table1[num];

write_date(0x30+i);

}

P3=0xfd;

if(P3!=0xfd)

{

delay(5);

if(P3!=0xfd)

{

temp=P3&0xf0;

switch(temp)

{

case 0xe0:num=4;

break;

case 0xd0:num=5;

break;

case 0xb0:num=6;

break;

case 0x70:num=7;

break;

}

}

while(P3!=0xfd);

if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6'

{

if(j!=0)

{

write_com(0x01);

j=0;

}

if(flag==0)//沒有按過符號鍵

{

a=a*10+table[num];

}

else//如果按過符號鍵

{

b=b*10+table[num];

}

}

else//如果按下的是'/'

{

flag=1;

fuhao=3;//3表示乘號已按

}

i=table1[num];

write_date(0x30+i);

}

P3=0xfb; if(P3!=0xfb)

{

delay(5);

if(P3!=0xfb)

{

temp=P3&0xf0;

switch(temp)

{

case 0xe0:num=8;

break;

case 0xd0:num=9;

break;

case 0xb0:num=10;

break;

case 0x70:num=11;

break;

}

}

while(P3!=0xfb);

if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'

{

if(j!=0)

{

write_com(0x01);

j=0;

}

if(flag==0)//沒有按過符號鍵

{

a=a*10+table[num];

}

else//如果按過符號鍵

{

b=b*10+table[num];

}

}

else if(num==11)//如果按下的是'-'

{

flag=1;

fuhao=2;//2表示減號已按

}

i=table1[num];

write_date(0x30+i);

}

P3=0xf7;

if(P3!=0xf7)

{

delay(5);

if(P3!=0xf7)

{

temp=P3&0xf0;

switch(temp)

{

case 0xe0:num=12;

break;

case 0xd0:num=13;

break;

case 0xb0:num=14;

break;

case 0x70:num=15;

break;

}

}

while(P3!=0xf7);

switch(num)

{

case 12:{write_com(0x01);a=0;b=0;flag=0;fuhao=0;}//按下的是"清零"

break;

case 13:{ //按下的是"0"

if(flag==0) //沒有按過符號鍵

{

a=a*10;

write_date(0x30);

P1=0;

}

else if(flag==1)//如果按過符號鍵

{

b=b*10;

write_date(0x30);

}

}

break;

case 14:{j=1;

if(fuhao==1){write_com(0x80+0x4f);//按下等於鍵,游標前進至第二行最後一個顯示處

write_com(0x04); //設置從後住前寫數據,每寫完一個數據,游標後退一格

c=a+b;

while(c!=0)

{

write_date(0x30+c%10);

c=c/10;

}

write_date(0x3d); //再寫"="

a=0;b=0;flag=0;fuhao=0;

}

else if(fuhao==2){write_com(0x80+0x4f); //游標前進至第二行最後一個顯示處

write_com(0x04); //設置從後住前寫數據,每寫完一個數據,游標後退一格

//(這個照理說順序不對,可顯示和上段一樣)

if(a-b>0)

c=a-b;

else

c=b-a;

while(c!=0)

{

write_date(0x30+c%10);

c=c/10;

}

if(a-b<0)

write_date(0x2d);

write_date(0x3d); //再寫"="

a=0;b=0;flag=0;fuhao=0;

}

else if(fuhao==3){write_com(0x80+0x4f);

write_com(0x04);

c=a*b;

while(c!=0)

{

write_date(0x30+c%10);

c=c/10;

}

write_date(0x3d);

a=0;b=0;flag=0;fuhao=0;

}

else if(fuhao==4){write_com(0x80+0x4f);

write_com(0x04);

i=0;

c=(long)(((float)a/b)*1000);

while(c!=0)

{

write_date(0x30+c%10);

c=c/10;

i++;

if(i==3)

write_date(0x2e);

}

if(a/b<=0)

write_date(0x30);

write_date(0x3d);

a=0;b=0;flag=0;fuhao=0;

}

}

break;

case 15:{write_date(0x30+table1[num]);flag=1;fuhao=1;}

break;

}

}

}


main()

{

init();

while(1)

{

keyscan();

}

}

⑧ 基於51單片機的簡易計算器製作

您好,這樣的:
縱觀單片機的發展過程,可以預示單片機的發展趨勢,;1)低功耗CMOS化;MCS-51系列的8051推出時的功耗達630m;2)微型單片化;現在常規的單片機普遍都是將中央處理器(CPU)、;此外,現在的產品普遍要求體積

照程序設計的各部分實現的功能不同,將整個軟體系統分成了三個塊,並對每一個功能塊所採用的元器件進行了詳細介紹。此外還編寫了主要功能模塊的基本程序,詳盡闡述了各模塊的工作過程。還有總流程圖,源代碼,硬器件鋪線圖。

⑨ 單片機簡易計算器設計的程序

展開全部
首先會按鍵掃描,再會數碼管或液晶屏顯示,基本上可以了
程序
流程:
掃描按鍵(最多5次,最大65536,簡易計算器嗎)獲得一個數,再掃描按鍵獲得加減乘除符號
掃描按鍵獲得另一個數
掃描按鍵獲得「=」,顯示計算結果
由於程序比較長,且與硬體有關,因此只貼出主程序:
void
main()
{
while(1)
{
c=1;
while(c<6)//輸入第1個5
位數
{
keyval=keyscan();
if(keyval<10)
{
switch(c)
{
case
1:b1=keyval;
break;
case
2:b2=keyval;
break;
case
3:b3=keyval;
break;
case
4:b4=keyval;
break;
case
5:b5=keyval;
break;
}
c++;
}
display1(b1,b2,b3,b4,b5);
}
while(c==6)
//輸入計算符號
{
keyval=keyscan();
if((keyval>=10)&&(keyval<14))
//10-13代表加減乘除
4種符號
{
d=keyval;
}
c=1;
display3(d);
}
while(c<6)
//輸入第2個5
位數
{
keyval=keyscan();
if(keyval<10)
{
switch(c)
{
case
1:d1=keyval;
break;
case
2:d2=keyval;
break;
case
3:d3=keyval;
break;
case
4:d4=keyval;
break;//

case
5:d5=keyval;
break;
}
c++;
}
display2(d1,d2,d3,d4,d5);
}
bb=
b1*10000+b2*1000+b3*100+b4*10+b5;//5個按鍵數值合成一個數
dd=d1*10000+d1*1000+d3*100+d4*10+d5;
//另外5個按鍵數值也合成一個數
while(keyval!=14)
//等待按下"="
{
keyval=keyscan();
}
Delay1ms(10);
switch(d)
{
case
10:ee=bb+dd;
break;//+
case
11:
flag1=1;//結果是負數的標志,先假定是負數
if(bb>=dd)
{
ee=bb-dd;
//結果不是負數
flag1=0;
}
else
ee=dd-bb;
//減數和被減數交換
break;
case
12:ee=bb*dd;
break;//*可能會溢出
case
13:ee=bb/dd;
//除法小數部分會丟失,保留2位
ff=bb%dd;
fd1=ff*10/dd;
fd2=ff*100/dd%10;
break;
}
f10=ee/1000000000%10;
f9=ee/100000000%10;
f8=ee/10000000%10;
f7=ee/1000000%10;
f6=ee/100000%10;
f5=ee/10000%10;
f4=ee/1000%10;
f3=ee/100%10;
f2=ee/10%10;
f1=ee%10;
display4(f10,f9,f8,f7,f6,f4,f4,f3,f2,f1,fd1,fd2);
while(keyval!=15)
{
keyval=keyscan();
}
b1=0;b2=0;b3=0;b4=0;b5=0;
d1=0;d2=0;d3=0;d4=0;d5=0;
bb=0;dd=0;ee=0;
init2();
}
}

⑩ 用AT89C51單片機來製作簡易計算器

這個本身很簡單的,輸入只有按鍵,輸出只有顯示,可以用LCD或者數碼管,至於精度多少完全由你自己確定

閱讀全文

與單片機簡易計算器設計相關的資料

熱點內容
如何驗證web伺服器是否正常工作 瀏覽:131
全球最大的加密貨幣網站 瀏覽:284
解壓文件為什麼有問號 瀏覽:389
php考試系統模板 瀏覽:431
pdf導出圖片模糊 瀏覽:610
我的世界編玩邊學伺服器地址 瀏覽:456
基於單片機的火災報警系統 瀏覽:166
上海追星用什麼app 瀏覽:423
海馬m5壓縮機維修 瀏覽:98
抖音怎麼給自己喜歡的加密 瀏覽:247
中國五大加密貨幣 瀏覽:263
程序員手疼7年查6處骨腫瘤 瀏覽:39
python列表對象的創建與刪除 瀏覽:467
python刪除excel表格中的一行 瀏覽:521
android資料庫的增刪改查 瀏覽:632
雲伺服器2g4g有什麼區別 瀏覽:324
顯示文件夾所有文件的文件名函數 瀏覽:213
可以在網站寫代碼的編譯器 瀏覽:76
王者換伺服器怎麼不用重玩 瀏覽:328
武漢編譯ipfs雲存儲器 瀏覽:52