|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于51单片机的计算器源码和原理图# z0 ]' m& h( H( ^" u
! G7 V3 ~5 F" T6 d% `6 P' r
8 V3 x$ q X2 G: m, o源程序:1 U" e z1 j X" _
#include<reg52.h>5 G3 E* Y3 A3 |$ Z
#define uchar unsigned char
# k, y6 K' S/ e' R3 i#define ulong unsigned long6 q% c7 G5 ~, Y7 H- v
2 K9 @9 o/ ?2 T y6 T m//uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; //共阴极$ u; L# g6 Y1 M( E3 \. d4 e
// 0 1 2 3 4 5 6 7 8 9 熄灭 -
4 j5 E( s* M! C1 A) h//uchar code loc[]={0xff,0xfe,0xfd,0xfb,0xf7}; 0 r' I5 z2 w4 ^+ [0 u% c0 N
//uchar code ero[]={0x79,0x50,0x5c};# J" L8 r. P1 o, P2 \
4 K5 K: d9 I4 @+ j! z
" x' X, F4 k7 s' ?% \7 r& U. Z) suchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x40}; //共阳极
( ^. Q0 W8 P5 Z. v1 muchar code loc[]={~0x00,~0x10,~0x20,~0x40,~0x80,~0x08,~0x04,~0x02,~0x01}; , t& L% R, ]! D, M: p( y3 B9 r
uchar code ero[]={~0x79,~0x77,~0x3f};
. T% s" ^: ]7 |$ I/ D7 q, T- C5 N& g
! m$ f. X! M1 i) Hulong n=0,n1=0,n2=0; //赋初值 # K- k' q* f! X
8 ~$ q3 h3 s6 ]9 x! G1 ^; F5 Iuchar flag=0; //计算类型选择关键字
+ _/ x( j% ?+ Y6 s( M" R+ Z2 j: D
4 K! t$ V2 Z2 d, b. I: J- _void delay(int t);; n; }/ X4 j* j' I, ~' d
void display(int n);* ^. D/ l9 f) s0 H5 v Z
void error();! \0 p: _! n7 k$ `& Z
1 L2 ~0 ?. j+ X/ }# y
4 k6 g4 w: }1 M( ?main()' [; x/ n, J! |6 b7 Y# h
{
+ @$ i# `) b4 x. p! ~ $ I3 b: C' n; L( m# E% R
while(1)
* ?. P: `, F; G5 }; {* t { , c2 Y, Z/ i# d* s' ?7 W% |, R
uchar temp;
. t( }" f, T$ ?! J8 z6 {5 }4 [ //第一行检测. y4 L1 w! }( G/ P- F
P1=0xfe; y; S' y# W, k4 l3 p+ Z
temp=P1;* T d* {! G$ }5 Z6 ]) G0 }
temp=temp&0xf0;
8 G, W7 S# ^) q if(temp!=0xf0)
' m$ x* m+ i# I. j* v2 T' P# D {
% u. ?1 R6 F0 |, p9 {" t delay(10);; s$ S% b* T& s5 r
temp=P1;
5 G$ y% w2 b& g temp=temp&0xfe;
) i8 g3 `( ~' H3 A if(temp!=0xfe)7 R* H v# b; u* j% t
{
. w/ z* Z( H- z. ]1 n temp=P1;" j1 b1 O+ [( m N% {* E# D
switch(temp); D2 }! m$ H0 a$ L6 M% e
{4 ]. r; I9 y0 w% V6 U! k
case 0xee:n1=0;n2=0;n=0;flag=0;break; //清零6 Q' A9 r( G& h$ b7 q6 N
case 0xde:n1=10*n1+0;n=n1;break; //0
i# y3 \* |' [% d, q( F# [: p case 0xbe: if(flag==1)n=n2+n1; //=
" A# H/ k9 M2 A6 t if(flag==2)n=n2-n1;
+ Q+ U) y, P! C% Q if(flag==3)n=n2*n1;
0 ]8 u8 r$ }. w0 i if(flag==4)n=n2/n1;1 P3 J" I& o6 V7 y' v$ y0 B e
n1=0;
. H( I( U4 s' _ break;
: k# W5 B+ v; ?8 j7 t" J* R case 0x7e: // +
6 F: k* F, {" h& i4 D* }6 G# G n2=n1;n1=0;
8 P2 A: C# o. T" \7 W" g' S" X flag=1;break; $ \# {7 q0 t( a, m
}4 J8 E5 F6 L8 |" t. `' K
while(temp!=0xf0)
7 s# ]' g" g% e# y* B2 K {
8 m& k/ b7 Y" [8 F- @ temp=P1;
/ b9 }0 T- Z( u3 g! N) h temp=temp&0xf0;* E1 s, t' M7 P/ |5 M3 ?4 @
$ D# F- K7 ?4 ]0 W- J/ p
} 4 A. K# B5 E8 i
2 i0 A: [! i! r3 I, v( A9 A }
( \, j! b9 }' b0 g 4 q; F; R3 g! h; o2 q
& G+ h6 O+ a' S1 d, i; |! ^% [ }
; G/ g. |! i* O2 ~2 {. q' V //扫描第二行7 r8 R$ Z" d/ j/ j8 s, U
P1=0xfd;. P: I- H1 ^4 b% ]1 e! m7 N
temp=P1;
. m' j& d* C" Z temp=temp&0xf0;
% m& j2 R- b4 x" B+ L if(temp!=0xf0)
" g" C6 F% S Q% t$ L J" s- @* l {
- C1 W8 g5 r( @) n0 v0 E delay(10);2 a1 o [1 J3 U$ A; b. c* v
temp=P1;) C. Q0 k9 j/ K0 }# z- |; o
temp=temp&0xf0;
& a- B! } f# m. M0 V) o3 O if(temp!=0xf0)# |1 f; K' S0 \% W0 n: K
{" C& x. J0 r, |0 i R
temp=P1;
& ?) a" N4 E3 a6 `& t1 L switch(temp)
9 Y2 H+ k f' F( |0 e {9 t' W, \* U, A" n2 ~
case 0xed:n1=10*n1+1;n=n1;break; //4
5 O& b# A4 G. d+ _ case 0xdd:n1=10*n1+2;n=n1;break; //5
4 }6 Y) q( r1 Q- B case 0xbd:n1=10*n1+3;n=n1;break; //6! Y3 i, N, d- d
case 0x7d: // - 7 _% W r# g: ?) _/ t
n2=n1;n1=0;
7 w2 z f( _% P( |' M& g2 } flag=2;break;
) F- Q7 a$ X5 T L+ F% x 6 G. H/ m; _) _4 S* [. W- R
}! [& t; M$ i) S) j" M
while(temp!=0xf0)
9 Y) Y6 b9 x% h% v3 Z r9 l! Z! ` {5 \' b" ]; K# M" x* h+ g
temp=P1;0 m* g2 V* H# E7 |! o- k
temp=temp&0xf0;
- e$ B! i% a! [: P7 ^0 J ]9 y }
( J n: s% S( l: L4 g
8 w I$ U( w( _$ E2 G7 t4 v }( F" F% b, X7 _1 d" B
2 h+ A( `! x/ ^! _ 0 m4 W, V9 j; W8 H; {6 z
}
& R9 i+ X% r3 v6 X6 T" ~2 y. S //扫描第三行3 k5 Y6 X3 P/ y7 [ s
P1=0xfb;
0 @2 M2 S+ M/ o6 N8 c. w; g temp=P1;$ g- {% w! ?6 Z2 i+ S
temp=temp&0xf0;
, a8 ^; @* Z1 l. j if(temp!=0xf0)
: S; ^' ?" m3 n% [9 Q {0 M5 g7 t% K! T- |" S, E
delay(10);
5 g1 n+ m; r1 w) G2 T temp=P1;
$ O% P: ?, `! ?- s temp=temp&0xf0;2 h7 R! G- I7 `" D8 d
if(temp!=0xf0)
7 N. u* \3 @+ T8 C% ~ {
) ]4 q' D- M; u- O7 I9 M temp=P1;
. R% ^4 P5 B1 V: e7 m! r- x switch(temp)
( \/ l- X8 g5 B: D8 j! p$ t {+ H+ u3 H5 B b- N. ^: V
case 0xeb:n1=10*n1+4;n=n1;break;6 l0 i' f" g5 g. X9 ]
case 0xdb:n1=10*n1+5;n=n1;break;
! w: ^+ U9 U& ^, L) M$ F6 U" H: m case 0xbb:n1=10*n1+6;n=n1;break;
3 g2 C& t6 F1 h1 [ case 0x7b: // * , ^7 {( n- ?7 r" y$ f2 r, t V' M
n2=n1;n1=0;& m, o& J4 ~! E* K9 o6 A4 K! c) s
flag=3;break;. c1 w8 q7 k! e2 o) @( G/ X# \. M# d
}
) H0 Z# S9 I; V$ t7 n while(temp!=0xf0)$ Q8 V: H2 U# x7 G
{
/ G2 v; |2 Y- F temp=P1;7 y4 s5 y% ]# ^5 y, D
temp=temp&0xf0;
4 P, h; h, X: I9 |9 X- J7 E4 i; n1 D }
8 r8 v$ I( S" p, h5 F0 r+ ^. E. A }
X& h: k( l: V7 m3 b7 K/ f }
0 g) n w" f! g: {6 X //扫描第四行
5 G3 y3 f# v6 E, F0 P. M P1=0xf7;
. K" H2 s; s" [$ z! k temp=P1;
) X, b9 S) Q% W4 l temp=temp&0xf0;, w( M* W) I4 ?: ?0 c/ H
if(temp!=0xf0)- h& ~. `( F6 P) y4 f7 }) k
{
- s( s7 L @: T delay(10);5 B2 H! \1 N" J& s; d0 q
temp=P1;
6 P P1 f9 E' o1 v temp=temp&0xf0;
+ W# q+ f* r1 T' G if(temp!=0xf0)
. r. E+ @! }, q {' z1 ^8 S* C4 L' Y6 e/ S
temp=P1;
, @8 _3 B0 @& M switch(temp)9 t- M0 p% p5 ~& y4 T
{
9 G5 x/ R! Y- r9 v- J( R- H& E case 0xe7:n1=10*n1+7;n=n1;break; //73 |1 |' n, X* A8 v& C. N
case 0xd7:n1=10*n1+8;n=n1;break; //8
0 g$ x f' ?; s6 i4 o) A# u( k2 \ case 0xb7:n1=10*n1+9;n=n1;break; //9
) l9 @! m/ |* O2 @: t7 d
1 z) x1 z# g$ Z case 0x77: // /
( H E3 p2 r; d& \ Y: ? n2=n1;n1=0;
3 l- u; S0 K _5 q& { flag=4;break;
8 v# F' V5 d0 y* `1 d; O7 G 3 L3 \: L* \9 j8 a3 G8 O9 j5 L
}
7 z* f+ C& B" h: f6 T while(temp!=0xf0)
! k' O& Y0 G: c. r: M {' ^0 G: ?7 N5 P; ]
temp=P1;
, P/ G' _! C6 L, f* J temp=temp&0xf0;
' \% V# O7 h% @" p( z6 q; K } 4 d2 F! x6 T1 ^+ K ^
}/ Q2 `6 B6 y4 z/ b G
}
- @5 g# L/ i6 k" i3 t3 D display(n);9 W1 w) ]( \; a" C- u
}
) ]6 i3 V& I, B. Y8 c+ A! {& S5 a}/ E2 d+ C5 m0 v N; a+ d
0 D3 ~ @2 ~! f p+ j" e1 [/ ]
: D+ C% c4 L) T! H6 }5 R/ r$ d8 ?% I2 t4 o2 B6 y, z% G, ~
+ }4 V, S% Y- Y/ h/ {
//延时函数1 w8 ]. J7 p) C- f
void delay(int t)* M9 J' H2 M8 ]' c9 j- ?8 }
{
# ~9 N. T# @3 @+ H int x,y;0 K- Q: |% \+ s" H) L
for(x=0;x<t;x++)
& q0 j' n# Q2 Y2 g8 g( u' L4 b for(y=0;y<t;y++);
0 z$ j `" o' Q}
2 W7 g5 W3 j0 z) _1 H2 ~" R2 O! s0 z& o5 ~
8 y) _% U; i8 [, t, X9 l5 D( e
" ~* Q$ V; @4 m9 h, F d; f) ^5 Z o+ A0 A8 z
; O% Q5 Y1 `, F2 G! b
+ Y E' Z8 ]. [+ A* W
//数码管显示8 w+ t# d( k# o3 R) [( ?$ u7 z; ?8 a
void display(int n)) i4 w5 ^3 B: V% n
{2 W4 L$ o" I0 k: g: L! }- c. ~3 W
//溢出处理
# |. h8 e$ P6 d l; d: ~ uchar g,s,b,q,a,c;- m; x" s# t' u" o: |, T* v1 R
int abs;# G5 N. N j2 G* {/ w* s" h/ M2 C- C
if((n>999999)||(n<-99999)) 6 N% U% i( L; b4 a! P7 P
error();; L* R. l! N7 F; U1 ~/ O
0 P3 h2 i3 G' K" t a
//正数. \1 r6 y x; J# z y" D4 `
if((n>=0)&&(n<=999999)) 3 C0 T) N+ D/ a5 C+ M) U
{
' d5 v9 R+ U$ V3 L- y g=n%10;
. c8 k* G% @0 I# C s=n/10%10;" X. a6 z+ a# Q
b=n/100%10;
. {8 ^: `7 e9 u2 t3 l q=n/1000%10;
5 L6 Q$ E! E9 c8 J a=n/10000%10;# A4 V: n e+ c W
c=n/100000%10;
' @8 y# }% R/ ] P0=num[g];* l$ \; P4 }/ X# c! G. a* d
delay(5); + Y$ A1 S7 l6 Q
P2=loc[4]; ( t, o8 Z+ I8 J N% f1 m
delay(2);
# K, Z# Q% x% c: _& |1 c8 { P2=loc[0];
5 z) E. ~, M- |, d9 X1 ^- z& _% O delay(3);' k4 I" J6 q/ K5 Z2 ^6 {
if(n>=10)
% I& T2 \$ }& j Q. i {. G: c! t( \3 P
P0=num;7 B9 g. g5 C: \& C- m8 e
P2=loc[3];9 Q( _/ N0 D- q! [( [; ~
delay(2);" d4 G9 U7 ~7 d+ U/ R* x
P2=loc[0];( D0 P ^. p; L$ m
delay(3);) N0 o: I) F+ \
}
$ q$ Y" I* P% `; U+ N5 u5 R& ~5 J + R' d2 o! w9 H* X8 Z9 T$ K& \
if(n>=100) 8 V/ R2 J, g- C4 `- y7 c0 U, \
{
5 \5 }9 t( o! e# e. @ P0=num; 5 B! v5 Q5 s v
P2=loc[2];# y1 H7 l, e8 \" X' c" P
delay(2);
* T! g- X9 P3 e P2=loc[0];/ e1 i$ ?# U; e# l# F
delay(3);1 W0 h/ @' X! l; j8 i
}
) l7 u0 t/ Q' W1 p - l N- c8 k5 U# ^' [2 }8 [
if(n>=1000) . Z; A( y$ X' ]& U7 E
{
# D' u8 X- c5 ]& L. H4 e5 \ P0=num[q];" L" V+ @* o" Z1 b; Y
P2=loc[1];* \1 q* h Q/ M2 X6 x! b% S- O
delay(2);# {8 k8 ^; {# F, S' {
P2=loc[0];- A! C8 y; [9 r7 E! X- K
delay(3);
9 o0 c0 R S* Z* G& g" p } K2 C( B) I+ A- x
if(n>=10000) 8 ~$ D& d0 P( C4 @; q
{
% s: D) K& f8 d- p, T$ M7 I. u P0=num[a];: i6 j* w) B3 e3 n
P2=loc[5];2 q( d( z2 f8 T) R. S2 `! o. s
delay(2);
4 k( y; C; W7 x" p P2=loc[0];
, f6 X% Q* H3 E8 u3 L delay(3);
% ~$ Y" v, R. P* }! \* y }& z o6 d0 D1 Z$ t: i4 r
if(n>=100000)
; \0 f6 i, u4 }$ C" |1 N {3 t* {& T& K y- ^3 c& }
P0=num[c];+ k; F& L6 H# s! l$ ]
P2=loc[6];* k% c7 ~* p; }: p% M8 |
delay(2);2 I1 E; L+ k7 B/ {* U* b& Q
P2=loc[0];
; u! p0 G" {& h/ v" S* o+ l; } delay(3);: f5 w9 y' Z, Z5 ?9 p8 A) @
}
' \% P8 u$ J) |6 ?2 n& w- a }
& y8 U# J4 m( S+ m% c ; P* [4 N: A; t5 m
//负数
8 F* u5 n. C, v4 ]: S! v/ N if((n<0)&&(n>=-999))+ l6 \8 Y! p. v z
{
! a+ I; X7 j& _; J abs=-n;
$ b* U+ J% |) h g=abs%10;
' ^: B5 q' |, j* z) @9 L8 K' L. N s=abs/10%10;
; k4 t. a* y* a& M b=abs/100%10;! k4 ~& |1 J' ]* S9 a
q=abs/1000%10;' P: b5 c9 j% P0 B' M
P0=num[g];
5 k/ B8 u0 A, a7 f4 \% U P2=loc[4];- ~7 _, S8 W. |: J8 s- s
delay(2);
( }. k: r( `6 Y- {, n4 [. w, R P2=loc[0];
* m( \4 v7 h$ K6 }( j& \6 ]) \/ m delay(2);- x7 U+ d! g' y: X3 A1 |! F
if((abs/10%10>0)||(abs/100%10>0)) 9 g' Z, x; t, U$ ]0 A/ Y3 j
{( @ b5 w3 Q6 A0 i. }# f
P0=num;5 p& o V+ P) X( a) a
P2=loc[3];;
# J$ I4 G3 j$ S/ Z9 x6 V9 U delay(2);( O/ D9 ?" P" x4 ~2 _5 z
P2=loc[0];
' R! B, K+ J3 x! t j1 { delay(2);5 V- }( W# z; y& g
if((abs/100%10>0))
2 g. f# |& T% r {8 E; Y9 G% @" o" V
P0=num; $ W5 }4 t2 `0 P8 E$ j1 J- |# q
P2=loc[2];
4 H1 X0 i0 l- z6 n, ? delay(2);2 K" P' U2 c B+ i) a8 ?* O9 k
P2=loc[0];
_7 e( m/ w/ w4 ?" { delay(2);
" h# _( {2 ]2 l. `" M! @& ? if((abs/1000%10>0)) & _/ C2 |* R( N+ i# v
{ ! L( i+ P4 t, A0 [" U* {, Y& ~
P0=num[q];
+ Z2 }3 v7 @3 m- ]- T. [ P2=loc[1];% v4 p# }3 x2 F8 y
delay(2);& j2 f1 j. K2 T! O2 F# q1 K
P2=loc[0];% a4 R! B @/ x0 L) Z+ n1 S3 x! i
delay(2);2 s0 n, f$ r$ Z- o- e2 V
4 T U0 ]1 L: z1 @8 J' D$ b& `* w8 @: I2 k t* C
}
4 i. Y% F1 ~) m else
2 |6 M- M& ^' `( a/ O1 l {
# y. _" h% C) w# F' ]3 C% x* _1 T P0=num[11];
/ ^7 e+ Z5 P6 `* R% b( N+ J P2=loc[1];
7 L$ K- F1 E8 \ n& t4 A delay(2);" W$ Q) K3 D( U/ \ m! r a5 G
P2=loc[0];8 `4 a, c! a* J& H7 Z. ^3 B
delay(2);
3 ~0 }- U% c. E( H0 _ } ( T" N& ~) b+ }/ w" }
}
8 P' C+ V8 h! z else
; f1 A+ H3 |3 F$ N {- A( Q3 ~) ^1 ?9 H, T9 B
P0=num[11];
0 d3 N% X9 p5 ^. r, f& o P2=loc[2];) {5 g2 R& \ e$ d3 ]
delay(2);
7 s' j+ p; q4 Q6 R# }5 P$ z P2=loc[0];
3 E! F2 w/ J; T. u2 _5 H; E: u delay(2);
e+ \+ F" i4 k2 M8 n3 m5 c! S } # l6 k9 L! S; v# a$ ^
+ \1 O, m/ V! x0 c) { }
2 Q" C4 D1 u2 x! S5 o! a else
& \" g; b. R8 ~ {1 b" h5 U; @* l% B
P0=num[11];
- v3 p2 Y1 q( M6 e0 p4 J; Y6 f P2=loc[3];
0 P% s4 Z. G1 ]4 f$ Z2 { delay(2);
% V. x! C3 H9 ~( d P2=loc[0];9 v. p" a3 {% K0 v) J1 U2 h
delay(2);
" ~. V: u O" _' s/ }6 H }4 z3 b$ ]9 k( b! Y* D% A" ]
- n4 j! J4 o3 g- m/ C: I
}
# d: E! H1 A9 D
% l& W. q T- R W, M
1 g' Y0 f* q7 l _* V! R}+ A8 x/ Z7 g) s1 x% M: ]
+ I1 Y% Y9 s4 I( E
5 D% V! L) v" {0 c* I, [: l//溢出显示
) W8 Y5 P9 C; t0 a+ M4 j; o( zvoid error()0 n9 {1 u* ?) ]0 R2 C
{
# z1 o5 A9 S) ?1 t% U, E P2=loc[5];
4 y6 M# L# Z, N% @( ]& A) x) {* U P0=ero[0];/ o3 g! x3 r! I& ~
delay(2);1 I; h4 P, {( K* w+ z
P2=loc[0];
$ h/ V! w5 y% G delay(3);
" `, E9 _$ u( ] 3 C4 `' Y. B& S4 P4 b
P2=loc[1];& m+ w V! U, S( f; V
P0=ero[1];
, t$ i3 S" l7 R( |# V! W6 z delay(2);
) a' R- F$ U5 O$ Q" r P2=loc[0];
6 |* v0 s& J' o/ B6 E9 ^: x delay(3);
/ W, l" M7 { ?: g* |
8 \2 R" X t0 H
) i, L5 n/ J2 G/ o% q/ ^; Q P2=loc[2];
3 Q9 t+ p( Q: D3 E9 D% v* r8 K P0=ero[1];
7 p' e6 [ j5 N; q* R0 C delay(2);
2 a2 p; `2 y' N) W/ n b' {% j4 L& `# k P2=loc[0];
# h8 S# Y) Z4 B1 p# O0 x delay(3);
0 Z3 l _- B7 [, M9 J, C/ ], N( I! f9 K: ^ }' G
. P" E; x+ h4 W8 J8 s
P2=loc[3];
+ L1 e; V$ q. K I$ X# ~; Q P0=ero[2];' r5 ~$ w0 w; v+ ~4 ~* I
delay(2);
, V- o9 X% g, z P2=loc[0];, @: m+ r# b% S) l, }
delay(3);+ A. u' U/ s; U A1 q
9 G5 s% f" A. }& b6 o3 ?- [& J& A% t
, v/ k4 _, G2 V9 R P2=loc[4];+ Y* K' j4 L: T
P0=ero[1];
r2 L# g- ~6 t- g0 t: J5 z delay(2);
$ I8 M3 a1 X: \$ I/ @, E+ h; x P2=loc[0];& R1 t) x5 S. B& l3 e
delay(3);+ I( n5 K' y* U3 Y+ r
4 N2 F, O7 {, L5 e: p w- B
2 j' C- f- _5 T1 }1 P& H& u" Q}
2 K6 K: p1 S3 O# v% N0 @" \, k3 S' z0 I
- m+ F2 q7 V# e. y& s L
原理图:
3 ]/ k7 t( B* S3 v/ J9 Y# M
- F2 u1 s1 R( Z1 d% @8 s2 O$ J8 e. q+ Y* { M8 C9 G/ c' w
|
|