|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机仿真计算器 lcd1602液晶显示; X8 z: m/ d3 @/ L
2 G- y9 M( A; U8 A! ^- [
* y/ o% B( A- Z- t7 T/ J51单片机仿真计算器是用lcd1602液晶来显示的( u) H6 h# d- y0 x! t' m* A
8 d- `! U# E5 ~
1 ?! m1 x2 S: o% ?1 U单片机源程序:" E3 H( O, {9 x
#include <reg51.h>% T% }# Y4 x# n) ]2 g$ f# F
#include <stdio.h>
1 r1 @% v, q3 q4 }8 c$ z#include <stdlib.h>
& \( {7 u" v6 p& K$ h5 b8 V#include <string.h>, Z! {, m4 I* S0 f) F
#include <math.h>
9 {% A, c, T$ Y) r' I5 I#define uint unsigned int
- F9 [3 `; T( q, `8 J#define uchar unsigned char/ ?$ _1 t P1 Y( Z
sbit pinRS=P2^0;5 A3 F# u1 M- N) E! E
sbit pinRW=P2^1;
5 Q% s0 H$ V, v) f% ~, Qsbit pinE=P2^2;
% a/ Q( x( l2 q#define pindata P08 H6 m& ?: G7 g9 s; D
#define clearscreen() writeinstruc(0x01)+ p% }' p% k2 w3 u
#define cursorreturn() writeinstruc(0x02)2 _' P& |( e U! h3 R8 H# A
#define inputmode(temp) writeinstruc(temp)% Z. ~* R# ^9 G+ F, p% |
//temp取值如下:
6 O* @0 B2 W5 M( A W//0x04:减量方式,不移位
! W9 ^7 X0 w- v4 G! g7 ]5 c/ t//0x05:减量方式,移位% {! C5 B7 p$ x7 T9 H
//0x06:增量方式,不移位" t* x6 T3 D& [6 [/ e% d
//0x07:增量方式,移位
& L# g0 Y' _, `0 v#define dispcontrol(temp) writeinstruc(temp)3 i2 P! o8 c* `
//temp取值如下:1 ~& [; r1 }% R, z- c
//0x08:显示关,光标关,闪烁关
+ E8 e! ?" f& o8 n2 Z7 X; }//0x0c:显示关,光标关,闪烁关
@+ N5 U" U3 z$ t0 n$ P- e. C//0x0d:显示开,光标关,闪烁开& w' I6 J0 {, v7 |
//0x0e:显示开,光标开,闪烁关
! S7 W8 R9 }( ?//0x0f:显示开,光标开,闪烁开, s3 y$ y+ |# P& v: B; {
#define dispshift(temp) writeinstruc(temp)2 z* O7 {! N J2 q' C$ {
//temp取值如下:0 x3 X! j6 [- S, l
//0x10:光标左移
1 s$ t# H% v; D7 {3 X//0x14:光标右移
) a+ \( o& l3 l: t* e//0x18:显示整体左移9 B$ A. W( D0 }3 y( |
//0x1c:显示整体右移
# @% c# h8 O5 i; y#define functionset(temp) writeinstruc(temp)1 D/ Y; O3 V' M6 w% r7 v, B8 J
//temp取值如下:
, D, ]% U" n2 h, S, n//0x20:4位,1行,5*7
5 S' E5 ^$ |8 H3 W( C//0x24:4位,1行,5*10
; v$ @+ x3 \; f3 M4 k. T/ A ^//0x28:4位,2行,5*7" x2 q5 }5 {& l7 u
//0x2c:4位,2行,5*10& m1 k+ u3 p5 T/ E* Q3 L H
//0x30:8位,1行,5*77 ^4 W# P R* _: r/ y; q% S/ W# [+ d
//0x34:8位,1行,5*10
- |* Z* e0 v- s s. l: C" e5 S. s//0x38:8位,2行,5*7, X% ? h5 f; \. a) C! P2 ~: b
//0x3c:8位,2行,5*10
! z4 f* c3 t/ X5 C" j! Y [8 O#define setCGRAM_Add(address) writeinstruc(0x40|address)
. j7 @" ]- _& C#define setDDRAM_Add(address) writeinstruc(0x80|address)//短延时 a0 O! z" o" r* V, N* p1 t
//void shortdelay(uchar i);
* ?4 n3 D* `* Z4 J$ U//长延时1 j7 @9 G* {' X2 y, n" v1 L
//void longdelay(uint i);$ _. u u. y6 m9 ?
//P2口初始化6 T8 r4 | m! S+ n
//void initP2(bit i);
7 C: l$ _' F1 |% H% y/ Q- h! a" K//寄存器选择信号
0 d* r2 P* P+ B2 n//void setRS(bit i);% D+ H" h0 B- \- {
//读写操作控制% Q, \$ e7 C6 d4 e+ y/ X
//void setRW(bit i);
9 l: N( d2 I7 ~//使能信号8 w( Y9 @% i& z: F
//void setE(bit i);3 A+ x( N) H; v* {; U
//读BF以及AC的值
, n. [3 x8 Q1 v/ F# h" r, z: [//uint read_BF_AC();+ ^ d% A6 V! N
//判忙) E* G# h6 b6 D' `
//bit statuscheck();
" @2 Y3 V/ i! m" c" Q. k0 Y//写指令函数
: B K$ {0 X5 z2 Z% B) T7 @6 I1 J//void writeinstruc(uint instruc);
+ \; R# P. R- n! s' e! H# |+ ?3 y//写数据到RAM
( r( m/ z0 E% _+ L7 b//void writedata(uint data1);; O' L- Q3 q9 I6 }/ X
//从RAM中读数据函数
7 a( S2 m7 m2 R' T//uint readdata(void);
5 }" Z# i% C. ]9 }5 v; P//显示程序 X为行号,Y为列号,date为要显示的数据
}0 G3 s! c, B0 O& x/ Z//void dispcharacter(int x,uint y,uint data1);( o4 c* E$ l2 \& P8 R
//LCD复位函数
9 U) C) Z! q6 U/ V//void LCDreset();
/ a. O- `1 I* j! c8 h#define uchar unsigned char
' m! a6 l2 z& u8 H0 muchar k=0,result1;
- H9 ~5 ?2 |8 s4 w+ Gvoid shortdelay(uchar i)//短延时+ Y; J7 {6 O. K% V& R9 ^8 w) Y
{( \) \( f, d6 C* T0 |. t$ l
for(;i>0;i--);' j/ w f8 w* W& y8 O
}
" ~9 l6 P8 U* `/ z//长延时
5 `& B( d7 r/ O5 }, ^+ {void longdelay(uint i)! j3 m3 w2 ^, z5 e9 u" T5 F
{; @( F* D7 i; |, C" R
uint j;
% |9 r7 U& {8 Z% B: z6 V6 \7 Vfor(;i>0;i--)
; M. X( ?) B# g: V{for(j=100;j>0;j--);}
' @3 d" ~0 x" d8 U' M. Y, D}
" j" V' N- Z5 G' n3 j//延时程序/ {$ I7 C, k3 z8 w/ D
void delay(int i)/ ^, c& _& y& A& V
{int j;# i- ~+ @9 r( ^# q
for(;i>0;i--)1 P% ^0 Q4 o( d5 n. i$ l9 c3 @
for(j=0;j<100;j++);, v/ ]4 p3 S( c/ G
}
" E/ R5 s2 s/ _3 `//初试状态
, u$ K `. ]6 t" s1 hvoid io_init()
0 L. h0 ?& Y# O3 v' R3 O8 `{P1=0xff;- Q; I; v5 Y3 U+ D
}
7 m" u7 F( B; A8 X4 V8 V+ `9 l//?---------------------------键盘扫描部分-----------------------------//
& ?1 q6 f" a; H( P8 O* A. x/ Punsigned char key_scan()3 c7 n1 t H+ F; j" z3 X
{ unsigned char key;
- S% U* b+ d7 A) A! N# ^& U! E8 t2 J' \ unsigned char temp;
! @9 N T2 M6 K( f! b uint flag;
! i8 k+ W6 r: l; h io_init();
/ U% g+ Y3 ~8 a4 g6 d P1=0xf0;/ p5 _& v/ H n
flag=0;
; A; c7 D. E, bloop: temp=P1^0xf0;+ a0 x7 ^3 k+ J i
while(temp)* ~8 f! c+ G" q1 {
{: w3 W" n) D9 K" r* x0 d& r
P1=0xfe;1 z, t0 P0 `& }
delay(1);6 h- _. i$ m) ?) e( Q. t) }) h
if((P1&0xfe)!=0xfe)+ q2 o$ x9 D. e" O6 b
switch(P1)
( e2 D# G% n, V {: M! u$ ^5 k7 T y
case 0xee: key=0x11;flag=1;break;//读7键和值3 R& t5 f$ i; ~
case 0xde: key=0x12;flag=1;break;9 H( ?# c/ U# W
case 0xbe: key=0x13;flag=1;break;& j [( f7 H7 q& L/ d. c7 N
case 0x7e: key=0x14;flag=1;break;//读除键的值
, X/ b5 t0 n) ? }
2 C, [: {+ J( Y- y) A; b+ S if(flag)( G2 q: ^) A2 Y- z6 P J4 \
goto exit;
2 E' K5 S+ u. p# Z& T8 {2 { else
1 j7 M( ]7 c3 u6 f; j, E P1=0xfd;) i8 @' _1 V, K" {
delay(1);+ W+ {: `% u6 p4 l- v! Z' S, {
if((P1&0xfd)!=0xfd)
, M. c+ A6 A4 P8 C. W switch(P1)
3 t; s: ]* a, E0 g2 @ {& _1 f, s" I: D$ `2 ]
case 0xed: key=0x21;flag=1;break;
: t' P2 T+ n% d( y2 U! h |0 ` case 0xdd: key=0x22;flag=1;break;
' ~0 z. n& ^# U, k7 M4 d. Z case 0xbd: key=0x23;flag=1;break;
7 R- Q! q4 D' ]; e8 f. g1 \% E case 0x7d: key=0x24;flag=1;break; //读4到乘的键值
# _, g% |( Z3 ~. a: H* r! v# h9 V }5 W3 Q1 x5 p# X1 t( p8 O
if(flag)( I, I# n/ E/ ~' T( h
goto exit;, @9 x8 J# M" h# a! S" q
else
' R4 m& t1 P, s2 z/ z P1=0xfb;
7 u; o4 L0 P* h, S% v delay(1);
) C0 @5 v, S0 b4 u L" f7 P+ f if((P1&0xfb)!=0xfb)1 ~0 n( K3 P3 L7 P
switch(P1)
; p+ R. ~& k8 z8 w2 O% ] {. x* W# Y4 O* G( I; Q
case 0xeb: key=0x31;flag=1;break;
& k7 O9 s' W4 u% J" X case 0xdb: key=0x32;flag=1;break;
+ y6 k3 c% w* V7 Z* G2 I( [ case 0xbb: key=0x33;flag=1;break;
. k" s, z5 p2 b- s5 _ O, V& B case 0x7b: key=0x34;flag=1;break;//读1到减的键值
1 a5 P$ y5 c6 v( c) j9 k }
, t/ ~7 S2 ?' u5 W( K* H, G if(flag)& ?; L* H9 Q. x
goto exit;
8 y1 Y0 r0 `: k+ P else
0 y( f F. Q& m9 b! R5 z* g3 Y P1=0xf7;$ \9 F) ] O. O* X0 v1 a; F
delay(1);- ]* ^) P0 t' S2 u
if((P1&0xf7)!=0xf7)9 P; @- k- N/ E' G$ O6 W
switch(P1)* L, u: M' J! Y+ i" A
{
5 e6 K: T. [& u! Z, R1 e case 0xe7: key=0x41;flag=1;break;//后退: n+ N0 L4 J! ]
case 0xd7: key=0x42;flag=1;break;//0
/ ?# ?2 l$ d' l K( t8 z9 l4 x case 0xb7: key=0x43;flag=1;break;//等于
5 u: m2 T8 {" P3 X. ] |* X case 0x77: key=0x44;flag=1;break;//加
: ^+ I4 v# h- Z$ u. g2 f }
2 o! s- g. y. l) { s
% a* _* ^% x9 B/ Aexit: return key;( q# B2 B: n1 {+ N7 R7 |
}8 F8 d+ ^3 I* j
if(temp==0)
) W8 `. e' D+ v+ o" I$ F7 @; m goto loop;
- i% j {" @& e3 S) Z }
6 Y* O) E& T7 n" p//---------------------------------键盘扫描完--------------------------------------------//. d* ~: P; q$ e# H' R% I+ |
//---------------------------------显示初始化?----------------------------------------//, M2 t7 v: f1 {
//P0口初始化% y. r) }8 Z0 g
void initpindata(bit i)$ ^) u" C Y& r1 t
{
" c0 r+ t2 ]- C% G. _if(i==1) pindata=0xff;
3 g0 k1 K/ y# _# i6 d3 Zelse pindata=0X00;
- p& V: l7 k3 [* e}8 S; _! S3 E6 z2 [
//寄存器选择信号
& h. o6 K! i0 ^5 vvoid setRS(bit i)( }. D( n) a8 o
{
U( ]% b$ x. G$ a, _7 eif(i==1) pinRS=1;
1 U3 h1 A$ i9 \ ~+ s- k4 relse pinRS=0;9 m1 h1 q4 u D) t' c
}, K6 w0 X5 s: m& q0 j
//读写操作控制
& A+ V' e, s! h$ x9 |+ {void setRW(bit i)
# g6 `* D% n4 x{9 N: W N2 A: @. X5 \2 m
if(i==1) pinRW=1;6 ]: d* s4 x' A, A7 \8 Z X
else pinRW=0;
1 `! P* { R9 k: a; E; C9 F# J}6 C* K4 z1 r3 O( n1 I: T
//使能信号
7 O* O' B& K& Z; ~" R: uvoid setE(bit i)
: o K4 l6 l. c" o% F- g{
8 |# w6 U' N5 v3 h5 y5 W1 b0 dif(i==1) pinE=1;! q F4 M3 p4 D7 e2 A
else pinE=0;
; T- b1 V# q8 e, J7 \. u}- `, }6 W8 e& _- c& ^; p+ I S
//读BF以及AC的值
: A5 g3 b' x& f/ r+ B1 ]2 I; s. j2 Guint read_BF_AC()
; p9 q# Y: R# `1 O; h* m{
2 M- Q o9 I# v; suint temp;
7 w' v2 S6 v9 R* b7 {- F' ninitpindata(1);& y7 Z# X9 i' U1 ~# t
setRS(0);) t" s0 J3 M4 I! Q1 d5 i
setRW(1);
! u. p, d1 a& i8 v$ gsetE(1);
& z# }5 _3 q& n' z, m1 Bshortdelay(1);
* N$ t& l" f! Btemp=pindata;
& D# |: }8 d9 i0 | j% _( S: Y) Oshortdelay(10);; P' ?& o" f/ X& d+ ]
setE(0);4 U8 V$ R. L- D- F
return(temp);
( v9 Q+ D& N3 {+ Z9 J! J4 D}0 Z$ o& e8 H ]* L6 k, X. M
//判忙7 E: e5 o! q g. s. C
bit statuscheck()7 S" k/ F: v! D" A
{( Q h4 {& ?! m
return((bit)(read_BF_AC()&0x80));
6 b% T/ F% Q' U! E. M% L5 f% E}8 K9 d7 d$ q" U, X$ P- z* @1 P
//写指令函数 D, Q) n+ s" t& m# x3 `
void writeinstruc(uint instruc)# y& _! n, `( y/ G. O& R
{
1 V# T" U+ q$ [! h# gwhile(statuscheck());% I, x/ |7 U7 C, n
initpindata(0);$ N9 y7 r( a- x9 e* r: Z' O1 O
setRS(0);2 z' f' |8 U# W! K4 f- K8 X% J& I1 i
setRW(0);* A- w9 w! j5 F* m3 X. B( s5 @
setE(0);
8 d9 Z# A/ @, A. M* {. ipindata=instruc;( G& M# j j4 p' ] M
//short delay(1);
1 t( _/ A7 K3 k3 J$ @0 XsetE(1);
" z- p! d, M' Yshortdelay(10);( u, F* n( R0 Y
setE(0);, i3 e$ Q& `+ M# U% b+ Y
}
4 Q' z5 ^3 M5 ~* o1 M4 D$ ]//写数据到RAM) ?; \1 O! i! z' t6 P9 B
void writedata(uint data1)# e8 D/ V6 y/ B/ E- ?: }
{
/ {, X' y$ A, R4 Minitpindata(0);
) x7 W. k; H: k+ i+ u0 g" }setRS(1);# V8 i3 X; M' `
setRW(0);3 u4 f5 H0 l: p
setE(0);
: x, K0 D1 w3 K, J! p/ C2 fpindata=data1;
' D9 g9 t1 z! ~+ ]2 U% xsetE(1);
h3 R2 ]! q3 |2 {shortdelay(10);
$ [5 @* v# Q% XsetE(0);
* M) E% S9 c6 m% d: u3 M5 a}
; g' C# Q8 P0 F4 V* h. Y//从RAM中读数据函数
3 l( u/ S6 K% M- ~9 r! Y3 E, G Luint readdata(void)5 K7 O* `' a( R$ E, ^
{' q$ o( K3 d8 V4 ^; _$ L/ r
uint temp;
5 Z% z x' H3 l$ F& a( Ainitpindata(1);
0 u9 D: d5 w% {( TsetRS(1);% ?: B) J+ }6 ~
setRW(1);- U2 S. o8 S: b3 \
setE(1);
1 r% }6 x( p# [% p) l9 x e w; f3 kshortdelay(1);6 `- F ^( k& H; d/ [, Z9 K! V
temp=pindata;. l P; p) ~4 P1 Y: t9 }
shortdelay(10);9 f/ X* E6 ~; _: Q" n# W
setE(0);1 W. c, _4 a: u0 [
return(temp);
) { Z; j5 w0 S8 b/ g" \}
% o; I: t7 L. [# A8 _/ C4 l//显示程序 X为行号,Y为列号,date为要显示的数据8 H' p: \7 H' J
void dispcharacter(int x,uint y,uint data1)
6 B2 U; U; u/ f8 R2 B{: Y9 \ T+ u2 b
uint temp;
1 G2 r, X2 o P9 A1 |' s$ C3 E$ Pwhile(statuscheck());
4 J) [8 D W- X! ftemp=y&0x0f;) M: w! m! M* o" ^
x&=0x01;' F1 w3 e' w4 _
if(x) temp|=0x40;, U6 w3 `; [! k' ]
setDDRAM_Add(temp);
+ j0 {, W7 a8 Q7 ^+ M3 W$ awritedata(data1);
. X- H0 ?+ c% b% j3 U4 T* B// writedata(data1);
: K0 W+ r( u2 _}/ P( W1 b6 i$ A
//LCD复位函数' F7 h& ^% Z! S2 }( D
void LCDreset()
8 ^" F; Z) j5 x3 O/ J* W{
: q* L/ k6 T+ {6 W2 O4 Cclearscreen();! \- w0 {$ x; i! P/ ?! {
cursorreturn();
! v7 W+ ` q; i/ A6 @# \}
8 C* U- v" W2 m- X//LCD初始化
+ M j! t1 P* I& @- [8 L& G! N' Svoid initLCD()
9 q ?/ z; K7 R$ s; a8 s G$ T- M{, U2 h$ Q" Q$ E- G
LCDreset();
! k1 l( H+ \% d: r& tinputmode(0x06);//增量方式,不移位, j7 B& T& z- z4 q; S
dispcontrol(0x0c);//显示开,光标关,闪烁关: x+ G6 |! i1 F; q$ e3 C, r
functionset(0x38);//8位,2行,5*7
. }% e }) x6 a: L9 w! X0 L& m5 i}
8 `: |/ e* ~, u: z0 \//-----------------------------------准备工作完成-----------------------------------//" [7 H% s. F a7 i; x
//-----------------------------------计算器-----------------------------------------//* Z: e6 n/ [$ A7 `: V: _
compute(char key1,i)
' }. R3 f9 F- t$ @{
O( n. F% V) Nsigned char m,n,c,act;
' K1 Q% s% V' Y! X9 Rlong int num1,num2,result;
. q0 x! N0 K4 l9 R4 H( r4 w- qsigned char str[4][4]={{'7','8','9','/'},
0 [& X! y/ A+ | {'4','5','6','*'},! j: Z @* E u: X8 ]
{'1','2','3','-'},( X# Q, n1 E J) D; M% |6 T
{'c','0','=','+'}};
$ l3 R8 P$ e# t% f4 lsigned char str1[11],string1[2];5 A7 N j* q4 L. ?, T8 W
m=(key1&0xf0);
8 {: q1 h& z3 ]. L1 D' O. ^* _m=m/16;( {3 d' E" B x- w3 F( @! h( j/ @
m=m-1;, I/ F4 n- l7 I2 C+ a4 f! h5 b
n=key1&0x0f;
8 Y* y; [& g4 @0 i' Gn=n-1;
: g6 P7 M+ B6 g2 V5 Fc=str[m][n];
X) U. ] t: z1 H3 T" Ksprintf(string1,"%c",c);1 _: \! K8 \5 O5 b
strcat(str1,string1);" N' v7 ]( f- r8 `8 P' v' Q
if((c=='+')||(c=='-')||(c=='*')||(c=='/')); I5 g$ A6 O4 \3 B/ l
{% _7 Q) W0 {$ e
act=c;
. X: s! \% ?8 _9 T' j% G! M6 i0 Vnum1=atoi(str1);! {9 x6 X) ^, i8 \* p
memset(str1,0,11);. r2 D1 F, G& j8 B
memset(string1,0,2);
! n- K2 p# S# W9 x}1 l; `' P) H' w& a$ \$ ^
if(c=='=')
& h5 T/ \9 _' g! y% t1 t1 p# u{
7 S& W' @3 v* M5 L+ k& Ynum2=atoi(str1);
( r0 |/ H) y4 V3 F! Z! k+ q2 j
switch(act), m1 T% x+ } s* R/ Q+ ?: m3 U- F$ [/ z
{& r k( ?1 n0 P' G
case'+':! h; C! ?# I1 ~: ] I) v
{ if(k==0)% W4 H+ n o5 b0 N9 \
{result=num1+num2;k++;break;}9 V/ N5 | k8 J0 Y) z/ R. N
else6 t3 K u/ v% C; N/ C# k$ L( j5 I
{result+=num2;k++;break;}
J% @: c3 O% J6 f: [2 y/ Y }
2 J% c5 `; ?4 V0 j7 p% {case'-':
8 w, z" L. @5 C, d$ J {if(k==0)' x2 l8 g8 P ~. c
{result=num1-num2;k++;break;}
6 K# S- ], R9 u else; x" [$ _! N2 A" c
{result-=num2;k++;break;}$ U' U+ X9 J9 k( O% K
}4 {. j: v% w( q9 c* l
case'*':
& H2 s' i3 h: I, f0 }6 \8 s: u# b{if(k==0)
4 x) E& r$ g- H {result=num1*num2;k++;break;}
0 L, l0 S0 O2 W" P% T. E& ?* { else* }4 T9 X. }- G$ }
{result*=num2;k++;break;}7 ?/ ^7 `, E+ e. A' O4 |9 B
}( d, K& t* N7 N( u9 r
case'/':& {4 B, K0 b* W. B$ ]8 E& A
{if(k==0)
% F9 J: g1 o Z) ]# Z+ L# I {result=num1/num2;k++;break;}
+ g( d8 _- l+ y4 J else
$ a. u$ o% d+ U' a V { result/=num2;k++;break;}
- q! \1 p! `& v# l( Q3 J }3 s. ?5 N. C7 w8 I$ `/ r& v
}$ `1 R3 C, h+ f9 e8 s) U
}
5 z) V9 x- Q/ `if(c=='c')
+ Z2 w/ }; G" q( Y$ o! X3 L{
U$ a7 S8 w+ wact=0;8 h9 D' o9 L, J1 M6 @
num1=str1[0];6 r+ l8 Y6 y2 E# v5 b
num1=str1[8];. A: I8 W6 p- Q& K
memset(str1,0,11);
* ^# j. s9 x; D2 Bmemset(string1,0,2);
% D3 y( F& m% U) ?+ M, Gnum1=str1[0];" Y1 U* ~. J+ B/ c( H- |1 |
num1=str1[8];
Q6 Q7 M$ x4 Y) @; g7 ck=0;
! y5 f+ N) }1 W6 n4 L}
' h9 P/ i8 d, h" Glongdelay(350);
% O m4 n, r# U/ [. fswitch(key1) //显示部分
# W* [% r: K! H, ?" T# J5 w' w6 m' D{case 0x11: dispcharacter(0,i,'7');i++;break;
- c/ e' @$ O9 M; O* H2 |% p& rcase 0x12: dispcharacter(0,i,'8');i++; break;
; a- O! X3 m& I5 Y0 Dcase 0x13: dispcharacter(0,i,'9');i++; break;
/ E8 W% m- u, t( `9 _0 Xcase 0x14: dispcharacter(0,i,'/');i++;break;
* G4 K: m* g G ncase 0x21: dispcharacter(0,i,'4');i++;break;
, S* A7 c4 K2 U( t& ^case 0x22: dispcharacter(0,i,'5');i++;break;
0 V1 V T1 D3 R! A" _case 0x23: dispcharacter(0,i,'6');i++;break;2 q! ]7 l& K4 _( x' ^
case 0x24: dispcharacter(0,i,'*');i++;break;
1 C; n0 N- j- P6 a6 d( ocase 0x31: dispcharacter(0,i,'1');i++;break;/ T' j# V( a6 i5 [. g
case 0x32: dispcharacter(0,i,'2');i++;break;
# d' t) V, b; `- \case 0x33: dispcharacter(0,i,'3');i++;break;! b5 a- k9 q8 e1 J( _" A+ e
case 0x34: dispcharacter(0,i,'-');i++;break;
4 m/ g: u+ C# A! m! P Wcase 0x41: clearscreen(); break;
! I1 b) `# A' m: ?+ L0 Qcase 0x42: dispcharacter(0,i,'0');i++;break;
* S: t0 A$ E+ z* w$ @case 0x43: dispcharacter(0,i,'=');i++;
4 x/ g8 [0 Y- W; Q: M2 k6 N m=result/10000;) B' _; d/ ]( p x
result1=result%10000;
8 s' O( k7 u/ q4 }+ T if(m!=0||result==0)
% }" O, M* B' C {7 V4 I9 t/ `, x+ E, n1 X& d
n=0;
% v/ ^5 G7 g2 E a' q* M m=m+'0';6 n7 V, [4 K% q6 k- i# y6 D
dispcharacter(0,i,m);i++;7 s$ V- o" i, n% r9 f7 a
}
' O/ q0 }: N" F+ j# J# W, B m=result1/1000;
* ^ ^/ m0 B. D1 E& x: K result1=result1%1000;
9 d: R. s# f4 l j if(m!=0||n==0) O( n8 `4 A1 m8 B4 r, h6 R
{
8 x& p' p2 z5 A, v' d m=m+'0';
- @' w; e7 U: K F+ l l9 c- G& } n=0;6 ?) M7 k) b7 V0 W% E) |, z i) K9 I
dispcharacter(0,i,m);i++;4 u7 q" q+ r4 d; M- C
}
" ?; D7 Z5 Q+ W; T0 { m=result1/100;
/ O( i) f$ @1 Z/ L" h6 z result1=result1%100;
6 C- ^) H I; B- o o if(m!=0||n==0)
- A) T) k" f9 \4 I {
1 H! _. K) F6 ^' |6 B( ` m=m+'0';4 y! L8 c# [9 Z! K' L8 K( b0 i2 Z, C
n=0;4 I4 z; x: A3 d
dispcharacter(0,i,m);i++;
2 J" E8 v3 @. G7 z; \$ q }
|" O- o, w% t5 Q; T% Y m=result1/10;2 a# |* N( M4 E
result1=result1%10;
+ i* b7 V4 v% Z3 G( b if(m!=0||n==0)
- ?3 W6 J' U8 ~5 ? {) J0 @& K6 k. S6 e% q
m=m+'0';9 Q0 c# K: C2 \7 n5 g4 S" y% ^
n=0;! Q* {/ M# H9 l3 T: L6 ]
dispcharacter(0,i,m);i++;
" B5 |5 {1 c* b2 ~ }
, O' h' a X1 T m=result1;
- E3 `6 g/ W! d R0 I4 H. w if(m!=0||n==0)4 [: L+ P h8 T, K- {, h
m=m+'0';, [) H: S) [: {$ v1 R7 ], P; g
dispcharacter(0,i,m);i++;break;
' u) _3 o3 Z( G: R' Icase 0x44: dispcharacter(0,i,'+');i++;break;( P9 l( D0 r. b' C9 a* U& H- n
}
% a/ s6 U: V8 b- P/ C* r4 l lreturn(i);
" s# d' Q' N0 Q5 W, \. \ ^7 R$ z}3 N( u/ X+ f' g. g
//---------------------------------------------------------------------------------//
, z5 m, x! o6 T& q, z, W% A//-------------------------------------主函数---------------------------------------//1 e! _; g$ y! j
void main()
. m! b- J# Q [. I: t{
8 ` y- _! n. e gchar key1,i; 1 h1 Y1 U& G* K9 t3 Z1 G
start:initpindata(0);3 P+ X+ s7 n: q' S: A
P2=0X00;
4 V- {9 [0 U R2 L GinitLCD();
, N9 h1 Z6 _( di=0;9 }% m; Y0 Y$ `3 c, F
scan:key1=key_scan();& l# T6 ?8 E- u: G6 n
i=compute(key1,i);4 h- T; H/ [) I8 O
if(key1==0x41)
1 c {/ ]; `% ^. Q* i# bgoto start;6 @7 u+ l( r1 Y1 i1 K/ R5 y
else * L& ?8 p7 `9 Z8 l, t
goto scan;
7 m7 t, S& G7 s" {}
) X; ?% e4 a; o ?/ K
1 q9 X p5 q/ i1 E) c单片机计算器仿真工程文件及其源程序下载:' E' y" U# E4 L7 }6 _0 ]
51单片机仿真计算器.rar
(202.58 KB, 下载次数: 2)
7 r; u& W. G; P: p( d7 [. [+ w6 o
, ^" Z& Q1 _. U4 `8 C4 @ Z |
|