|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机仿真计算器 lcd1602液晶显示) o+ z1 t/ r2 F! Q
8 j9 j$ S/ o# C. X) o* F
! \6 ?3 g9 t+ y51单片机仿真计算器是用lcd1602液晶来显示的
Z, c& R/ z$ _" K" i8 p, A- ?
4 k8 a+ }8 b: [3 k \! x/ l% Q/ a
单片机源程序:% E1 y2 h/ B% f+ }7 ?* w) ? Q5 V
#include <reg51.h>+ `* J6 Y" n+ R A1 F! [6 M" N- g5 W
#include <stdio.h>
- s4 ~' y4 A4 E7 n/ r#include <stdlib.h>
1 r: }4 J* A' s6 M#include <string.h>: R2 z: E* @3 {4 W9 r/ y8 V2 {1 y
#include <math.h>" Q4 d/ M1 j5 g: w
#define uint unsigned int
$ ^7 R! c& ?$ k' i2 J#define uchar unsigned char6 v& c" g( D- O1 O, K+ E/ T& F2 Q& N
sbit pinRS=P2^0;
3 @0 I7 }+ S9 v2 R5 q7 y3 j$ Usbit pinRW=P2^1;1 I4 c- U# C# p1 @4 z9 E5 h
sbit pinE=P2^2;' s$ d2 l/ r6 A7 {) q7 i' T8 y2 A) B
#define pindata P06 l/ C9 y- D2 V3 h( e
#define clearscreen() writeinstruc(0x01)) D5 y3 \; z+ w) P
#define cursorreturn() writeinstruc(0x02), ^: g* b4 q z
#define inputmode(temp) writeinstruc(temp)4 c# Q6 f* l6 x3 d; o
//temp取值如下:
\; P$ R! L* U3 M/ {) f5 h8 d. r//0x04:减量方式,不移位: P$ C' S0 @* U& d' U
//0x05:减量方式,移位3 y( a" L; {) |7 n; l2 \( E! Q* Q
//0x06:增量方式,不移位
; z- V) g; x5 Q( K% w//0x07:增量方式,移位9 i8 F; L# C3 ~/ N! y; h9 X4 C0 {
#define dispcontrol(temp) writeinstruc(temp)7 `7 |1 P, ~! N) A# X6 `) p
//temp取值如下:& A/ @- x' Z, X5 M% Q
//0x08:显示关,光标关,闪烁关
. [: i, c0 V! }* S* U//0x0c:显示关,光标关,闪烁关! L+ j8 V8 i) `- P# c- g
//0x0d:显示开,光标关,闪烁开
) M; |: U- n4 a//0x0e:显示开,光标开,闪烁关
& N) S( ~6 e* [; l//0x0f:显示开,光标开,闪烁开
. Z9 P9 J: W0 E#define dispshift(temp) writeinstruc(temp)2 S0 S8 J# W9 Z4 R2 p7 c
//temp取值如下:
# {" q7 q& K0 Q* K! z C% F//0x10:光标左移
( u( K0 r0 ?+ z: a# F) s2 K- r//0x14:光标右移
: Y5 F5 _8 h$ F8 P/ v//0x18:显示整体左移
7 q' d( ~5 |+ ~//0x1c:显示整体右移4 j) T/ p8 A% D% [
#define functionset(temp) writeinstruc(temp)
1 J/ E! ?, w# G6 A//temp取值如下:
: T( ~! E0 p- }0 O3 W, _& K3 S//0x20:4位,1行,5*7
) N! C& y6 U7 b, h% R8 n% z//0x24:4位,1行,5*10/ h: u# s. F* W# R* V- {
//0x28:4位,2行,5*7
1 i2 ~1 T6 H, Q: e6 b: ^//0x2c:4位,2行,5*10
, w& T4 M2 z% v4 |//0x30:8位,1行,5*7
! P4 N M. w. [. g6 R. w//0x34:8位,1行,5*102 ~, N9 O6 c& G6 S
//0x38:8位,2行,5*7$ G3 Z6 ~, V# H3 S8 ?& {
//0x3c:8位,2行,5*10
5 m5 }: Q Z* ~4 B/ j" {#define setCGRAM_Add(address) writeinstruc(0x40|address)6 `: N/ a0 R3 j2 e) h4 [
#define setDDRAM_Add(address) writeinstruc(0x80|address)//短延时
+ N2 n( Z( D+ }+ F//void shortdelay(uchar i);
/ Z$ a+ k5 U; q: H; J6 G7 [//长延时8 n# O- q6 s+ F0 q/ z8 U# B
//void longdelay(uint i);
3 Y* y8 v, S# S5 L% p//P2口初始化
) B2 S8 k% n! S' E//void initP2(bit i);
+ D5 [9 @* G% t7 s% ^ p//寄存器选择信号
' \% d* x2 s( j//void setRS(bit i);
: ~5 b3 ^% B8 g" p) s4 K9 q//读写操作控制1 k2 `) N9 \0 r/ {. b
//void setRW(bit i);% w$ s* k/ v0 [, E! s. n
//使能信号+ V0 ^# V. z/ c' D( T4 `9 N
//void setE(bit i);/ ]# {8 \' ~" z
//读BF以及AC的值
% J! w# i1 b h+ M) x//uint read_BF_AC();" `1 Y" e+ z% s* `* {
//判忙$ R! u u! f w9 P3 s5 z
//bit statuscheck();
6 f7 q) r% e% R% \//写指令函数- h q4 @. F- S d; o" X
//void writeinstruc(uint instruc);: a* b3 v, M8 I" E
//写数据到RAM
' s, c. k7 r- }$ w$ a5 l' |//void writedata(uint data1);% d: ?, I& ~6 Y; @8 E
//从RAM中读数据函数0 M2 I, |; j M$ z. c
//uint readdata(void);/ Y- j9 Z& w# N9 p
//显示程序 X为行号,Y为列号,date为要显示的数据# l( `2 m1 W' h/ [" \. A
//void dispcharacter(int x,uint y,uint data1);
/ P& O! K9 A% Q/ T6 q. G% J//LCD复位函数
/ K! M% u3 W9 e& M4 z1 M, M//void LCDreset();- X1 Y$ ]1 ]6 g; K4 V
#define uchar unsigned char& t- l S6 H- E$ D3 E/ _* y% H
uchar k=0,result1;- N, r+ z n, I7 p7 h7 r( h" q0 y
void shortdelay(uchar i)//短延时
9 H5 e! H& V) p1 k6 E" U$ r{
) M" Y! e. v' j* h7 w& efor(;i>0;i--);- Q; y/ h* K4 G9 T. g0 k7 r! {, y
}4 G% [ {4 C( a3 Z5 z+ \
//长延时
5 {5 x1 H: M# n3 L- m* [1 jvoid longdelay(uint i)3 p" S: F$ R/ v
{3 j. I% ?9 N0 a5 q- k4 C* L
uint j;( f6 i% i. j1 v$ V+ L2 g/ [, [
for(;i>0;i--)
$ _2 c/ M3 ~( i( _{for(j=100;j>0;j--);}
! H8 w" A! F$ r( Z1 c% W; M* T} W- ~! \4 r4 I
//延时程序
+ o% D/ a" A2 R" Qvoid delay(int i)0 K' \" z- R, F$ U
{int j;2 u' f k5 s/ M- n1 F
for(;i>0;i--)
, J& W% A: F% O for(j=0;j<100;j++);6 L* {3 x7 ~6 `# g
}0 O. c% S8 O8 v6 H% ]
//初试状态8 Z' m1 w9 w0 U( L; x
void io_init()9 M. q; |8 }, K
{P1=0xff;0 }$ C0 u- ]" f0 [8 ~
}' C3 [4 {' v7 n1 A! o# E
//?---------------------------键盘扫描部分-----------------------------//
9 O! N. Y4 }3 q) J+ Y( G' eunsigned char key_scan()
& F+ H: c/ \* y2 m2 s{ unsigned char key;3 y- D, H' ?( j4 Q1 B$ X; f; x4 Z
unsigned char temp;& Z0 |- q* g# `8 c
uint flag;
3 @- B6 e' P) E+ E$ V, t io_init();
% N* c8 m- j) ?; B; A1 B" u" } P1=0xf0;
" b9 a0 ]3 Y" G flag=0;+ ^. p5 G$ H3 x% U) @/ H
loop: temp=P1^0xf0;+ \9 ?+ G) j/ @/ U! L0 ^
while(temp)0 t# u( ]$ _7 T8 l% ^5 b# h2 s
{
: h3 v. U$ J6 n' _$ T9 g5 K* e P1=0xfe;
& k/ f, A ~: A* ~# g/ D4 N delay(1);
: d! ^; X0 z4 s if((P1&0xfe)!=0xfe)
F: q$ a/ R) F! c, _% h$ Z switch(P1)
! D! n! a+ m2 S8 c7 _6 h# G6 B/ y {
% H& a" D! z6 O0 _9 p case 0xee: key=0x11;flag=1;break;//读7键和值
' r3 X3 s6 K3 Q1 D1 H case 0xde: key=0x12;flag=1;break;
" ]- G# b2 _# S) L case 0xbe: key=0x13;flag=1;break;
# R# \4 }+ B) E- E case 0x7e: key=0x14;flag=1;break;//读除键的值
8 S6 o- z. M& O+ t }
' g7 g" Z+ F8 n2 E* I; ?- A% S if(flag)
* k! b2 t* m2 X* X goto exit;
7 Y; G8 `! V* L2 ^; r; B else
: K. T8 j! Z b: O/ e P1=0xfd;& n( n- [! I- k- q# W( C' D+ j
delay(1);
4 r* e4 M9 A6 j$ J if((P1&0xfd)!=0xfd)
_) X$ _9 X/ @) B3 o switch(P1)) L& Y) W; I1 h M: U" r! I7 _. c- T
{
. m' |4 z8 j1 E case 0xed: key=0x21;flag=1;break;
5 ^: B" b/ ~. ^" d3 c" R case 0xdd: key=0x22;flag=1;break;' I; g) N7 V0 _7 x @# Q' C3 I
case 0xbd: key=0x23;flag=1;break;, ]* w; P! ^7 R
case 0x7d: key=0x24;flag=1;break; //读4到乘的键值
4 `7 X, l/ h0 l% g i/ X. \ }0 e! ^4 m* x4 q! ?; C
if(flag)5 B9 A4 f) Q: }+ M6 ^) G
goto exit;
, p; K& g- |- J) I& h else
3 @( A$ G/ R% D P1=0xfb;4 G$ Y, a# i. U1 F; j/ p$ i
delay(1);) |' g! [, }% ^! i7 R! P
if((P1&0xfb)!=0xfb)
" S) Y/ X( ~4 l switch(P1)
9 w' u! _1 y9 r: G {
. q+ n! \6 G1 I; V3 i7 B* L" b case 0xeb: key=0x31;flag=1;break;
+ Y, U k8 J. l case 0xdb: key=0x32;flag=1;break;: ^& d8 `! I- x. J* |
case 0xbb: key=0x33;flag=1;break;, |4 i" ~" K. p& U$ Y
case 0x7b: key=0x34;flag=1;break;//读1到减的键值- |+ D4 L& w0 q" `! ^9 o
}3 |" r' m; |6 D" @+ [- J7 f
if(flag); Q% Z& i0 ^; f8 G
goto exit;( G2 _6 {3 A" H. U# l, C1 l2 c0 O
else. | W. C; c. L! t" U
P1=0xf7;
w5 v( I8 V- E# o) O* U8 f delay(1);( @; F# }9 o- J
if((P1&0xf7)!=0xf7)% V$ n! i! Q! S. x( J2 g& c
switch(P1)- U. @# v/ E8 e0 f
{
: {1 g9 B& z( W5 o) L( l( j case 0xe7: key=0x41;flag=1;break;//后退" o2 i% X8 E# D- V+ c
case 0xd7: key=0x42;flag=1;break;//06 o/ D3 B8 K& ]; f) V* o
case 0xb7: key=0x43;flag=1;break;//等于+ {& U$ d# d- ^- l; Z2 K* c) t
case 0x77: key=0x44;flag=1;break;//加
1 d* O3 G% F1 n% E }
1 i* X4 _* B J9 U4 m, Q, T5 D. C7 ~8 d
exit: return key;( a$ H6 ]- b0 j# v/ \0 ^" }; ^
}
& P5 }: x7 @+ p0 s J if(temp==0)
: C: w F9 F4 C* @/ u( d( a# D goto loop;1 Z$ n9 ~# r T7 m/ P0 l
}9 {7 j0 M- [* \, z
//---------------------------------键盘扫描完--------------------------------------------//
. @$ M u$ {- [) U//---------------------------------显示初始化?----------------------------------------//5 t3 T: ?- L9 P
//P0口初始化
, r5 A @ ]1 i- {( m& vvoid initpindata(bit i)
) D& u/ ?- @5 q$ D) e{
; h3 O+ S) z3 T$ Rif(i==1) pindata=0xff;
* U5 p) g, q- x, p' x$ I# i, @) Telse pindata=0X00;
K# l0 o9 U2 }9 A% q}5 |3 K* e& O1 L* h7 t8 S
//寄存器选择信号
. ]% J; x0 {. M- Fvoid setRS(bit i)
- o* Z& C( V3 I. J! i, Y( r{
% @9 z6 G3 i7 x$ jif(i==1) pinRS=1;) a1 H1 m: ]- z! [) j. u
else pinRS=0;9 A% `) O5 r% `
}+ }& ~" H) q( U7 R+ W+ n* g3 K- N$ S
//读写操作控制
* s$ Y5 A4 y; {3 h/ d$ f/ i7 Evoid setRW(bit i)5 l5 G# O6 Z. O5 S! V* _
{
' r& E2 L, s% ?if(i==1) pinRW=1;
' N: i& }3 }3 C4 [" D# f/ N) X4 Belse pinRW=0;
+ ~ {/ G) u+ h- U}0 Q+ `% e9 B* _# t" |
//使能信号
d- b9 ]- q0 |4 }void setE(bit i)
" o' _' n/ p) l! ^/ c: b{
2 e9 \! K; f+ w" n$ _! u; O0 ~0 dif(i==1) pinE=1;, P6 A8 [& K# \! K
else pinE=0;& X5 G0 M! L$ Z0 M- I
}9 e* y" j' W+ |- V7 \! J/ @
//读BF以及AC的值
8 e/ |) U3 N; k& K0 I: |uint read_BF_AC()2 q. q( D% _3 ^; H* S
{% b: A( j% i( k$ I
uint temp;
% t3 V) K5 E+ H+ b! ]1 Tinitpindata(1);
& }7 V H+ m- V6 b% ]setRS(0);3 [4 R& ]: H7 d$ d4 ?& E2 j
setRW(1);$ I7 n" }3 F) Q
setE(1);4 H* n, x% U( y$ m5 Y' q- J" [
shortdelay(1);
1 ^6 S: r, s5 Stemp=pindata;& W% \1 T( f8 _
shortdelay(10);4 ~" f; y; {/ `) ]4 c5 A
setE(0);/ o2 P9 d( ~8 H+ { f
return(temp);
: S% L. _5 v" d/ K+ r: n}& D0 R, ^3 l* Z6 B
//判忙0 X& L! G, g9 s9 s/ K! R
bit statuscheck(). v# B' N5 W$ [, T. w4 @3 Q
{
6 I$ f1 y- P* s. f9 g4 V8 Preturn((bit)(read_BF_AC()&0x80));
; j! L% ^# M# U1 p+ d6 K8 `}# I& D$ ?5 C- D- C
//写指令函数 @# ` n4 l6 C/ o
void writeinstruc(uint instruc)
- c( C" L( A* C% y{/ g; s% `4 O1 o$ k8 Z, z
while(statuscheck());
2 u6 ~# Z4 `, o0 v! T$ A, h. Sinitpindata(0);
6 x1 e7 y4 @4 x- k' D) ZsetRS(0);% b; O- }+ ?' h/ I$ u' {! h) l
setRW(0);
: ^$ G4 y3 G' N: Z! p; ^setE(0);7 u) B) l z/ c" ]8 _
pindata=instruc;
. g! h# b: q% }4 {$ ~1 F Z//short delay(1);
# D% |6 A1 F7 D0 l$ @4 |' AsetE(1);$ [: ~. ]9 i9 |
shortdelay(10);+ e+ a, n; g! j4 I
setE(0);/ {! q0 ^+ E7 o2 w% S4 n* y! q
}
- n* l8 |: X/ f//写数据到RAM' ?* p2 a+ w( X4 X- o
void writedata(uint data1)
) e$ [; o; ?& N* s) T; M{" y( X# q9 ?/ Z" [
initpindata(0);% x: Y) d |1 ~3 R0 y7 X" s% `& {) R2 b
setRS(1);
9 {; L2 @8 ?# W; CsetRW(0);
: Z; k4 c; ^% _setE(0);
" Q |* l" z# kpindata=data1;2 v! h+ @4 ?. ` b. n- E3 x
setE(1);
% }) {: @4 i n1 |. q8 cshortdelay(10);/ j$ B7 W0 { m9 O! |" Z* R2 E+ I
setE(0);3 X" A7 c# Q. e6 v% M8 J9 U% O
}& m, ?, {7 K; ~; m
//从RAM中读数据函数
! `' a+ Y1 a, M8 G/ z C% Euint readdata(void)
1 e9 Z- V! I r9 c3 Q{% _$ E" Y3 Z& T. h
uint temp;4 s6 ]( X/ ?3 h: a, d F
initpindata(1);
" ~% Q, R# H% A6 I) LsetRS(1);
& a/ O# E8 E9 U: ]setRW(1);; u: }0 P8 ]+ A" B2 M2 I2 T
setE(1);
3 R6 m# o8 j+ |% p' cshortdelay(1);6 A8 r0 p; y* d, c9 B: f
temp=pindata;' G5 O' U! X" \& o0 i. n
shortdelay(10);
( L ?0 o" b- O5 s( S1 }1 l3 XsetE(0);9 x( @3 ~- ]5 U. N" K+ i* g5 u+ r
return(temp);6 l* c/ B: U7 c' X+ W0 I
}3 m! D8 @. `1 d5 q6 @
//显示程序 X为行号,Y为列号,date为要显示的数据, v# S/ A; `, I( q3 u. r
void dispcharacter(int x,uint y,uint data1)! `' a- ~+ h; ^' z
{% W- x$ ?6 X8 `8 s7 v5 Y2 O- \
uint temp;8 I1 k, @, g2 X/ g! N
while(statuscheck());
: x1 r* N& b8 L( a; Htemp=y&0x0f;- K8 v" {9 b/ o) L' l
x&=0x01;
* @/ A, n+ ]3 f0 m! z! mif(x) temp|=0x40;2 z6 C' q9 @5 ]7 n8 `
setDDRAM_Add(temp);
$ }; p; e" B `( |4 o1 c6 S8 hwritedata(data1);
: Z; G; B% z2 T! k) V// writedata(data1);
7 \ y3 V8 l: m& @* n* E}
( y5 P1 p! B \//LCD复位函数
$ k- E/ s" w) ?& b% ovoid LCDreset()- P! A! i. v' A
{# T8 Y0 O! O) i E/ {! E
clearscreen();" T) H5 e' t& W/ i) c
cursorreturn();
# z- v( y J- p. Y}/ e, i3 Y+ F& I
//LCD初始化
' K' x$ P, e% m u9 }: V! ~void initLCD()
" e: c0 \# ^ g. v5 r, y$ r{2 H( k+ `. e3 n5 ]( c( t
LCDreset();% B7 y Z0 ~( m* `. p
inputmode(0x06);//增量方式,不移位
3 x4 D, S8 g/ \: E1 \+ _( ]dispcontrol(0x0c);//显示开,光标关,闪烁关9 Z' r" v- ?" A1 t
functionset(0x38);//8位,2行,5*7
$ C" i* f. K2 _}
+ E' j2 y7 I' B; w7 w2 \1 e/ H6 q//-----------------------------------准备工作完成-----------------------------------//
/ X; N, p. o) g//-----------------------------------计算器-----------------------------------------//5 f% n+ e" J' I! y4 q
compute(char key1,i)
6 I4 u$ O6 ~5 J, b3 R# W' s{
9 ?$ f0 J0 B8 Ssigned char m,n,c,act;
* U) W& Y4 _) C2 J. X# A; z* \& xlong int num1,num2,result;: O( f' O q# ]% z; ~
signed char str[4][4]={{'7','8','9','/'},
2 W! u( D# _) L {'4','5','6','*'},' J7 t/ h G4 u+ S: X& Y
{'1','2','3','-'},
( i0 Y3 f% d9 a7 D5 A1 @ a {'c','0','=','+'}};
h, F( s5 w2 q1 u3 L- Fsigned char str1[11],string1[2];2 T: J3 `% ^7 H3 J+ U8 N K9 D" U
m=(key1&0xf0);
- u7 n( P* V& nm=m/16;
* Q1 z+ H1 }: Y& c& Jm=m-1;
+ {4 ]$ }8 j( x. tn=key1&0x0f;
7 o) z6 }# p. t9 Yn=n-1;
) R3 p' C8 A* w+ X' N% hc=str[m][n];
! k5 u8 \+ j& X1 T* q- c5 Csprintf(string1,"%c",c);0 W, m' {' y& ], |( ~
strcat(str1,string1);
0 i# l# u- A1 X2 P$ x7 t$ Wif((c=='+')||(c=='-')||(c=='*')||(c=='/'))
! Q$ \ J* W% ]6 b{
7 [) u/ G1 R2 J9 n3 ]+ v6 {act=c;0 H9 V8 L9 B" `( u: r7 x* \9 c
num1=atoi(str1);
" ~5 I' |2 ^1 A) L; zmemset(str1,0,11);
, j; R1 ^/ {7 R# l! xmemset(string1,0,2);0 T- Q# W6 R5 ~: Y9 x+ g; P' v; O
}
* ?* J+ _3 r; {; z8 l) hif(c=='=')
. G$ j* y8 l1 W8 Q$ o" g) D) N{5 u9 w4 J) J2 o3 M* j8 H4 t
num2=atoi(str1);0 y6 S# U( T+ `; B+ }
5 O- w- z, {; E {+ {* a! E
switch(act)
% r( x" y- o8 O& p( k0 s) ^* b4 J{
6 r! }! X2 K. Y$ v: H+ g* pcase'+':
( {+ W$ m) l, A: E9 S9 X{ if(k==0)
/ Y# O* z3 y& A( K6 @' i {result=num1+num2;k++;break;}! d1 J( o) v7 B1 C
else
% A( i8 }- _8 s' V- M1 J {result+=num2;k++;break;}
- t5 T& e, [2 V( h: N }
: I% D* s% U( k' K' R' k. ~# jcase'-':9 m. Y* B# W, ]8 [ Q5 a
{if(k==0)
- d7 V$ N& N; T5 G: f {result=num1-num2;k++;break;}* c& e L* h- A+ g7 u: p
else
7 `9 ]) p6 w8 {1 V% K, ~ {result-=num2;k++;break;}. u; e; w7 @" G: E
}
) t1 J% O( ~" x# _/ Fcase'*':
$ c* y* N* M6 u0 F{if(k==0)+ {+ X$ n, B$ _" G5 p
{result=num1*num2;k++;break;}; P; `1 A# y! q: h
else% @- j4 G! K) u$ l8 `3 D
{result*=num2;k++;break;}* k& k" ]7 {6 x- S( ]
}
& d8 f# U2 \4 Y4 D- ?" Ncase'/':2 M# b# D% f0 a$ d1 }, Q2 \& S; U
{if(k==0)/ Q: D$ t, j) P% K1 |: _
{result=num1/num2;k++;break;}. N) D! x) A2 c1 h* x
else
0 K9 }$ N' x& l9 s. C { result/=num2;k++;break;}
% b Z( u {% j }' t* X3 K* h4 X) l9 X1 G& x
}
4 b* w7 P( k3 K}9 |; Z4 t; L& y2 P5 n
if(c=='c')1 d4 u2 B: ^+ n9 g2 K1 |
{1 g: N1 T `9 ^9 x
act=0;5 h- O# @* K! y9 m9 w7 J7 D
num1=str1[0];- l- ^# d1 \' n6 h2 U3 `6 S
num1=str1[8];
9 L# R3 x3 C7 _% Q) ~5 }memset(str1,0,11);
6 |8 h9 @- k% `6 \& O; z9 Dmemset(string1,0,2);
/ _$ Y4 p3 {5 j2 Cnum1=str1[0];
, f% T7 {& I/ ?/ Anum1=str1[8];) d4 e2 j7 m& G$ k
k=0;
% K2 J+ l+ I3 x! _. x5 C( g}
5 v9 l, \* U# q# W q, X) nlongdelay(350); F6 F5 {. J$ Z/ ^5 c
switch(key1) //显示部分
. b" H N9 f( Y$ E, T ~- ?{case 0x11: dispcharacter(0,i,'7');i++;break;! |- e# k3 s9 Q9 W
case 0x12: dispcharacter(0,i,'8');i++; break;7 I8 E# s! \4 s
case 0x13: dispcharacter(0,i,'9');i++; break;
6 R* q( X! h0 K& l" ]5 h8 vcase 0x14: dispcharacter(0,i,'/');i++;break;
% o! w; t) Y$ u# Dcase 0x21: dispcharacter(0,i,'4');i++;break;/ I6 \: s- p% q8 ~0 D- B
case 0x22: dispcharacter(0,i,'5');i++;break;
/ m" Q9 u! C# b/ rcase 0x23: dispcharacter(0,i,'6');i++;break;) C' H3 K* A; V% t
case 0x24: dispcharacter(0,i,'*');i++;break;" x& X9 H% e8 d$ C8 X# c
case 0x31: dispcharacter(0,i,'1');i++;break;
6 i K h! s4 R1 O# ], ]; _case 0x32: dispcharacter(0,i,'2');i++;break;4 g. Q$ n) V2 a- b5 h
case 0x33: dispcharacter(0,i,'3');i++;break;3 @ A. K2 {, X: ~; I
case 0x34: dispcharacter(0,i,'-');i++;break;4 j# Q/ \0 r. o: q& J5 R
case 0x41: clearscreen(); break;4 q+ I \* \* I3 z8 o0 X4 S
case 0x42: dispcharacter(0,i,'0');i++;break;5 z9 ~" N3 \9 y- w2 z$ b, v
case 0x43: dispcharacter(0,i,'=');i++;
$ v! Q u/ \4 _4 y m=result/10000;! g/ m3 f! J' o. I6 k' \
result1=result%10000;
+ h! N$ z$ E4 F. {& b if(m!=0||result==0)
6 N2 X# Q) m6 ^( n A/ P {
7 k a. Z. ^$ j8 y; F, K; F. P3 O n=0;4 e0 Y6 a2 }5 {+ |" f2 |5 v
m=m+'0';& R: m S( x+ P7 R D
dispcharacter(0,i,m);i++;& \* r1 Y$ R8 [1 p9 r
}
8 y) Q+ _+ z- x Y, r m=result1/1000;
- E V4 Q6 x5 U4 L result1=result1%1000;: |' d _+ @8 @* n, {7 |* T7 i
if(m!=0||n==0)
- \! |* k9 U+ X( B3 F- ~0 \ {, c5 d9 P; n" z# I, S" z. ~
m=m+'0';& \% a9 J# f$ r1 |/ j) O$ [
n=0;/ S+ r) Z& r6 |8 j2 I2 l
dispcharacter(0,i,m);i++;
. C% T7 [( x( C$ S }
6 d. u) Z/ {" \. {8 u m=result1/100;% P+ U; }7 ?, g/ y0 q
result1=result1%100;
# _) m" [# H- }* C4 ^& W8 X' U0 Z7 Q if(m!=0||n==0)- ?* s9 q0 r2 q6 d9 q2 e
{
+ j3 C9 S$ ?% F- \7 d8 } m=m+'0';
* k/ @1 V3 f2 m }$ Y6 ?* v: z n=0;
2 Q. v) @2 o( c: Z! `& @0 J dispcharacter(0,i,m);i++;% m, `$ F, V7 `+ E0 o
}
% `2 ]5 N# @$ |' H5 C m=result1/10;
. a1 L" I! {: g# u# t6 f# c result1=result1%10;
; M& o. o8 |# }# b if(m!=0||n==0)9 C7 S/ S* F( f' e, V* {
{; O4 q3 \: m Y) F
m=m+'0';- M% `; K, h" E9 S
n=0;
?; _' f' ~, C4 V% I9 ~- m' P: k+ C+ m dispcharacter(0,i,m);i++;
- U8 i7 T' }4 j, @, }& Q }
" S1 w' M2 F' s B( p m=result1;
- o; b% \ Q9 e+ t+ X6 A: S if(m!=0||n==0)
3 c1 r3 o: ^, d4 q. {$ v m=m+'0';* _5 H) r* |: |9 H3 b
dispcharacter(0,i,m);i++;break;
" I6 @/ m! b; G8 b3 l* N8 Zcase 0x44: dispcharacter(0,i,'+');i++;break;
" v8 l; Q& k7 _}
/ J4 x2 {; G- @$ I2 K# Nreturn(i);8 Q, T8 f/ T1 y' v; R4 M- {
}, Q0 |, f: [ y! w
//---------------------------------------------------------------------------------//( x3 | q) q6 S( Q& J
//-------------------------------------主函数---------------------------------------//
. W; d# I" S: v7 b I9 ~6 |1 Dvoid main()
5 t( F1 d1 \" w0 A3 x I{
1 j( M4 L# N. D' ?$ I" Pchar key1,i;
) Q0 F6 n$ M7 ^start:initpindata(0);7 D O. a4 c/ [* |, b; f
P2=0X00;: L$ c3 M* D& l, k. }
initLCD();
& O9 q& C7 a# }- I/ t- di=0;
. ]) U* z$ d1 y4 H2 G0 h9 `, N5 lscan:key1=key_scan();6 T ~6 W9 ]9 ?0 [1 T9 a2 P
i=compute(key1,i);% Y( q7 i; c) L& d$ g
if(key1==0x41): s1 p0 g% E5 o1 N/ k5 ^
goto start;
8 `8 Q$ O- Y$ u# {else
O2 {" J" B: wgoto scan;
( N- ]- \3 K9 E}
# l, f! G7 ?4 |) n9 ?: n8 [$ N8 s
, n- N/ h: r& O4 k' c单片机计算器仿真工程文件及其源程序下载:6 A4 O/ X9 e/ `
51单片机仿真计算器.rar
(202.58 KB, 下载次数: 2)
: K5 u" J2 ^+ w$ ?1 B) y! x* Y
3 @- ^7 ?; V; N. J9 J- N6 _ |
|