|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于51单片机的计算器源码和原理图8 i$ j# `9 d. G' H% l0 Y
; y. a8 R- a G+ k% u5 T! v/ w7 J. l% Z$ q
源程序:
: k# p" C7 f) [6 o2 l9 Z3 b#include<reg52.h>& t# U& K) M. \
#define uchar unsigned char
- z' i" W* R8 @ o& z#define ulong unsigned long3 m5 Z4 Z7 L; A& ?. E' {, H
$ L& m: M; e3 w( N( o//uchar code num[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40}; //共阴极8 {" Q8 j0 S7 i6 D! m& S% {
// 0 1 2 3 4 5 6 7 8 9 熄灭 -
* _) U B) X5 t//uchar code loc[]={0xff,0xfe,0xfd,0xfb,0xf7}; * d4 s3 r% W/ r# Z: p! n S' a- s
//uchar code ero[]={0x79,0x50,0x5c};- U! M+ A* X* \. l4 t
# r- f& @: [1 l5 i! y& c* B
* X7 m m9 G9 f0 S5 n0 O3 j6 Quchar code num[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x40}; //共阳极* ?6 f$ G5 z' k9 Y# {1 {
uchar code loc[]={~0x00,~0x10,~0x20,~0x40,~0x80,~0x08,~0x04,~0x02,~0x01}; 6 G, F! d: U: a& o5 ^4 A9 z
uchar code ero[]={~0x79,~0x77,~0x3f};- T2 b( G. c: @) c
. \& b) L4 O& t: I" f
ulong n=0,n1=0,n2=0; //赋初值
5 `/ Z; e1 X# l9 O" k; i& v, M
) s" ]# p0 A# d# B8 U( ^- euchar flag=0; //计算类型选择关键字- Z$ z0 i$ m6 f3 G) n
: X8 E* c/ N. l; ^# A
# D6 c) ^9 R) Y8 {void delay(int t);
0 D, m* A0 Y: \ Fvoid display(int n);- E) c/ B3 s0 |2 l2 i7 l
void error();
9 q- D0 o/ c1 A) @$ J" i
( G4 c q6 z; Y" d. `3 S: Q
' a0 ]. y. I" W8 O5 gmain()
5 _, v6 c& [% X. a; |: E{/ H+ Q& W% p0 c1 Q
# v z2 l6 j& j3 ^ while(1)
5 U* }3 l X: C5 f% v' Q2 P {
( I% G4 y& Y" D1 s uchar temp;, [; }* s- `! {. E; Z% B( u+ b
//第一行检测1 @2 p) M8 Y6 F$ k' i7 G- k
P1=0xfe;& @, L! {% r j* L
temp=P1;
# [: i7 z4 C3 j; _2 G3 B temp=temp&0xf0;/ _ f1 n0 G7 Y1 { c' [
if(temp!=0xf0)
6 @3 L2 }5 `1 R- n {7 M$ g/ p) }( _; G- U/ b& r
delay(10);; t. i1 o. a; _/ b9 }
temp=P1;
6 s4 f( h! q/ S! F' }, N. R temp=temp&0xfe;( J3 y1 [. `% ^7 r3 d% p. B. K6 ?
if(temp!=0xfe)9 N$ ~5 |" a- ~1 r0 ?/ s- e% h
{$ B3 q$ m- f$ J- j( H; h9 x
temp=P1;
8 M7 y2 W- B; x6 K switch(temp)
2 P) d, T! v# |( |* X/ P {. ^: S h) A+ j$ I! ?
case 0xee:n1=0;n2=0;n=0;flag=0;break; //清零
) x0 y& H& n) ]8 Y7 b1 V case 0xde:n1=10*n1+0;n=n1;break; //0
4 N! Z4 y9 B( e3 _ case 0xbe: if(flag==1)n=n2+n1; //=
9 G+ j& E. p- x+ [4 _7 c7 \# J if(flag==2)n=n2-n1;
9 I" R* X) g' v6 m4 n( \( }& J if(flag==3)n=n2*n1;
0 ?$ }) c. G! y if(flag==4)n=n2/n1;5 g6 E9 I% F+ Y y, K$ }! H/ R' v
n1=0;
# X% K, G2 c v/ V, K! O) f break;# F# D; g/ o& T) l5 J- u+ U& k
case 0x7e: // +, W8 p$ g# V _3 a2 B6 k
n2=n1;n1=0;! Z. I2 h+ n1 a
flag=1;break;
2 X- I- } L9 ~- D: I o }3 b) W0 ~' D+ r& v5 ~
while(temp!=0xf0)
! k$ s: o! D7 ^ M3 B/ s3 H {
/ ~& R* ~, ^+ u" ?; h) ^* N temp=P1; M" ?# g! r% Z2 m' E& y- L
temp=temp&0xf0;% B' f( W7 r; b$ p! z. N' b7 C( Y
& i, e6 t7 i: M0 [& J( z# \: u }
4 a' A* F" Q/ F( n" N5 R
% B# ^$ m0 L5 f9 Z0 R$ D }
. n o- @: o1 M- v/ C! I
8 q) _; _8 N7 y% b- h9 a/ x( |3 \ 3 X: b1 w) Z$ c0 q2 z3 A" ~9 P
}; A- j7 w) w7 x$ X& [1 u
//扫描第二行; B. r) x2 e; w2 k. `+ T! p6 `* l
P1=0xfd;& Q* Q* x- F/ ~! j$ }( Q
temp=P1;7 {& }/ C- d, K* F: ^3 }* p: R
temp=temp&0xf0;+ o" t3 M8 w4 d0 O
if(temp!=0xf0)
1 D$ ~, d' c5 J$ s4 [. y$ K {" z1 r p. W8 v# M3 A" \
delay(10);8 f2 {1 @ d* H5 E G6 e9 }; d
temp=P1;
( Y/ l/ K( E2 g @0 S temp=temp&0xf0;6 A) }* s z# o7 ]# Z) m5 T9 ^
if(temp!=0xf0)0 F2 e; w! e- j5 g; K; K V; M
{3 [) R; q: F. H8 @/ c* W; }
temp=P1;7 K! C9 V1 e! S8 O) o `* ?
switch(temp)3 Q+ s& U* L6 _. |" k- x* r
{
" B' `+ A- ^; k* r case 0xed:n1=10*n1+1;n=n1;break; //4
$ |# T+ X5 X6 n. u) v7 K& a case 0xdd:n1=10*n1+2;n=n1;break; //5; }; m) y# @5 u# I
case 0xbd:n1=10*n1+3;n=n1;break; //6
* j' P' _7 H, } case 0x7d: // - . q. G3 ]7 y9 O$ P, Y
n2=n1;n1=0;" d4 N3 L( ~8 D" b
flag=2;break;
: p! L0 J" n8 A$ l 5 p: K% [8 k+ R- o" ~
}5 _2 u2 ?6 J3 e/ U
while(temp!=0xf0)
# W: H X# i V {
3 O) l( J* v% z# E. I1 x; ? temp=P1;- z) X: _" f& @0 r( r' m3 Q+ S9 P
temp=temp&0xf0;
* Z& E' j$ [ L } " m1 B* l+ |! O& M& E8 y1 {
# b; a5 W' \$ S) G( p; d; } }
% g& F/ c/ T. E0 f p0 {( @ d
% A% y: O4 }- C6 `3 f* K4 M( H* R
7 N5 m% I5 d/ Q; i }& A/ t* B7 K+ o1 D* o9 z3 ~
//扫描第三行
) [! D. o: w# c; ~; [2 W P1=0xfb;
4 h% }# I* p4 D) | temp=P1;
$ j) b( \2 s8 H7 |% V- ] temp=temp&0xf0;, ?, C+ J2 C7 b' i3 @
if(temp!=0xf0)
, V. v; f6 I9 U o* R {# Y5 ~2 m8 A& U' I. E7 ~
delay(10);
4 N, x( D8 ~4 m temp=P1;
5 K2 ~ ?& ]7 W8 n2 y: P temp=temp&0xf0;- _7 U# {+ _0 t B C1 e
if(temp!=0xf0)
: p: g& D8 d9 \+ f- G {
. ^& @9 C# q9 I) u0 N temp=P1;
. V; S [0 D; R2 o: D( A/ z switch(temp)& {' |8 Q- K( U( m
{1 ]" b7 T+ @: x& C
case 0xeb:n1=10*n1+4;n=n1;break;2 X/ z% T' O* y9 a3 F
case 0xdb:n1=10*n1+5;n=n1;break;
0 V4 @" C1 z" F9 F& p9 s5 O case 0xbb:n1=10*n1+6;n=n1;break;' U' _, p+ s3 S; |, w- V8 s
case 0x7b: // * 1 f: G+ v; m9 t: K% [
n2=n1;n1=0;6 e. A# J0 S5 I6 Q
flag=3;break;& }5 L0 Q& l( U8 ?- p% z
}
( H* P Z: l4 e1 ^ while(temp!=0xf0)
6 ~% P' w; _: ]) f5 Y {9 `4 _0 a7 O4 A4 ]
temp=P1;
. Z8 c8 k4 F) n. H. D temp=temp&0xf0;5 q/ v% W5 R8 K" E7 S% r% a* Z; m
}
& p) r$ S" ~ c' J6 c: r- K }* w% h i3 R4 J& Z) k
}- t0 N# z5 ~* x
//扫描第四行 9 L$ a6 v9 Y# m! C
P1=0xf7;/ s9 A3 b) |/ s0 z
temp=P1;9 Z# \/ R: V" A& N* D |
temp=temp&0xf0;( U3 h3 N1 `) P, y* j ]
if(temp!=0xf0)6 x) f1 u7 q% J
{7 a' Q( H- f4 x* a% |/ H* T
delay(10);* V- c* O" b/ B% t0 C8 a {7 _& e
temp=P1;
. d2 U) d0 a* c4 M temp=temp&0xf0;
0 e( c; O/ o5 Q0 | if(temp!=0xf0)8 B6 E) O# e `+ a5 @/ {! P
{
5 @7 A* i# r4 j- I temp=P1;
5 u$ s2 B+ m* o switch(temp)
8 E7 }7 g2 J/ h3 b/ r; p3 N& K8 d2 s {
! R, O# @: t5 @" Z case 0xe7:n1=10*n1+7;n=n1;break; //7 z5 N R2 Z, P5 `$ q9 A
case 0xd7:n1=10*n1+8;n=n1;break; //8& t; s( y* y' Z4 D
case 0xb7:n1=10*n1+9;n=n1;break; //9
( q: P, m: h/ v 8 P/ w/ D' N* }1 _/ s$ B; z
case 0x77: // /
! ~7 m7 C1 F" C4 A n2=n1;n1=0;
- L5 Q0 t' Y8 P# r flag=4;break;
" P# C1 F, e" G 1 b5 J7 u: ?0 Z3 V+ R7 z4 A
}$ s5 G; x% [; j. d
while(temp!=0xf0)& |. I* V3 |: E ^3 l5 u
{
. W- F; U# V: ]8 t& ` temp=P1;
: j; B" v. q* H8 t; E3 M# \# V temp=temp&0xf0;, C2 j* h, [3 S G* Y z1 K
} 9 _9 H8 h- I( r* ]% Q) F# D" M/ K
}9 K7 H$ C" h* D" D
}$ f* j: N9 Z- Q. y; x+ k
display(n);
6 Z% ~ y! q: e& J' B0 b7 F8 n( \ } 4 S* J9 `8 m1 \: a! r5 U J- @1 L
}1 [5 u3 v7 W5 w: R2 k
( I% S- W) l4 W# g
8 x0 ^6 ^# o* n9 g. F1 Z5 k
; L9 d* }9 A q/ I( z1 g
' |0 V- v8 b6 C1 @2 M//延时函数5 e: {" i4 d* C7 m3 m. a7 e
void delay(int t)
3 F" K/ w& Q4 ?* D8 S- } P2 L{2 D' R2 a; V3 y" D; _
int x,y;9 K: u5 ^0 T$ {3 d: g. R d' y. Q
for(x=0;x<t;x++)2 @4 q- p5 [* a- ~8 o5 J
for(y=0;y<t;y++);
? l9 ]2 { L5 N; v}) Z d' A q) A3 C9 m0 v
, o8 ]0 |$ N: S- X1 y0 H8 W2 H# {2 R4 N) m0 ~
; h- Q @4 X" N# L. ?
/ f) @, E" W+ T1 Y( P) g3 [
1 j. o9 S5 b- ]+ a9 z1 }2 \9 ^7 V! U( Q# S- k+ [
//数码管显示* F/ m: T# E' S; g. v/ ?% O0 b( M! V6 \
void display(int n)7 [) Z s. M3 c
{7 @' [( T+ Y, H# V
//溢出处理
! y" G- O$ {. ~* |/ p; p1 A. Q uchar g,s,b,q,a,c;$ O& K( l5 L# m" n' l
int abs;
6 O3 Q) G1 o9 T2 e4 V if((n>999999)||(n<-99999))
* G! s9 P4 c" w) q! r$ _ error();
' h! \" c9 i* k8 a A4 c# l + ^, ]7 u/ D* Q9 p( o9 O
//正数6 Q) F% O" { y" G5 U$ O3 E
if((n>=0)&&(n<=999999)) 4 i* B K! ^$ ?9 \% o$ x! J3 V( P- ^3 f; f
{
7 S6 W" H* p) x g=n%10;
4 n( R/ q6 U5 n W* m% `: ~ R$ P s=n/10%10;
m3 e6 a6 i4 C6 t& z8 u b=n/100%10;
$ b+ h& h( V, t q=n/1000%10;& k/ K4 b% b. T9 R2 |5 A0 p' U/ d
a=n/10000%10;' W3 x, h' }' {' V
c=n/100000%10;
) W- M% I2 S2 h; Z( j) V P0=num[g];
& f% o- h- J* J$ x" A' K, m delay(5);
/ c5 ?8 a5 |6 S P2=loc[4];
+ x) q6 T: B) O delay(2);
9 K" [1 b4 d" ~" K; ]* p P2=loc[0]; f% _+ C4 X3 @+ g+ i H* W
delay(3);8 A" G9 V2 A4 ]* W- c0 N
if(n>=10)
# ?4 F5 o; x5 Z {# S, Y, p' G* t6 h% w# n# p
P0=num;: ^% V8 U1 R- H/ X# N
P2=loc[3];
# x0 l7 P) W5 g1 R# @- X( v9 T7 i9 j delay(2);1 m9 n- [. Z& ^* o; w
P2=loc[0];
2 [5 b( B/ X0 ~5 D( m, l delay(3);5 [7 G$ J9 {: A! y% R) }
} n. U' y* i- {% r
$ b8 ^4 C2 ]6 j1 k( p, _
if(n>=100) 1 E! a# V" M4 J( j& d. O n
{ e! [8 n9 M4 m
P0=num;
4 B( U0 F8 l+ a7 w+ {- i P2=loc[2];
/ P9 i: t9 F4 T; y: T. d7 j delay(2);6 ? Z6 A0 Y; R4 \& E, s
P2=loc[0];
9 A6 C1 {+ `1 t7 t; L8 \2 [ delay(3);
! Y( _% l& E; A4 y7 ] }) u* }, ?7 w$ G# p
( P* B. q! w& V; \: ^ if(n>=1000) u# n5 x1 g# j$ J
{
7 v8 P5 o0 v; ]8 v- z) |( ~( f# y- f P0=num[q];
$ m7 R' P% {' P: _3 \/ t P2=loc[1];
- M$ T* i) ~- p) |- P, | delay(2); d X6 R. i. s
P2=loc[0];: V* g6 I, x \8 L+ x Q n( Y- o
delay(3);- {& z ^+ P! O8 P5 B4 F% w
}6 t1 _0 b. D& h0 F: {; s6 A! l8 c t: k& T
if(n>=10000)
; {9 ~9 S; w) E {
( Y, t+ |( M0 K" e) N" V( y P0=num[a];# s. ]* ?+ c3 f# y4 m
P2=loc[5];/ v: X5 ^! K" y6 X7 U
delay(2);
9 K5 b: k9 m/ W4 K8 r( A P2=loc[0];* E2 N: {5 W, T, C' [
delay(3);
6 x/ m+ K! T: M }
4 r2 _: H9 J3 K9 o3 Y& u' a9 q if(n>=100000)
. d2 d% J3 n0 j1 a$ E5 | {
, w) O, y, ~* Q; R8 L P0=num[c];6 f; g3 K0 h, H# D. X" \6 v- U
P2=loc[6];9 M9 M" A+ ]% o; ?! ?) A, R$ w: \
delay(2);
) W) U5 n3 C: S1 ]4 P+ ^! N8 K P2=loc[0];
& ^' l y1 y1 ^* x delay(3);
+ d3 l% d" i: y% S+ R }* [5 s, m2 _4 @, Z; B
}
7 i7 s2 m" C$ N0 B4 Y. l
2 R! e+ C/ u/ X2 ]7 E- [! C //负数: y2 n7 X* v' |) L; d0 k! l& Y
if((n<0)&&(n>=-999))
' A; h2 U3 p7 H- a6 a" e, [ {
; I2 R* h: u" L4 `( z' \6 U# y abs=-n;: \$ [4 ?# E; u% X# e- [
g=abs%10;8 j: }( g- a6 |2 U& M! N$ @
s=abs/10%10;+ w8 w" p0 U+ _# J
b=abs/100%10;
F4 T0 o' F' h! G/ h- A8 U q=abs/1000%10;0 [) C3 q/ i5 {1 r9 L3 c
P0=num[g];
* ?0 w/ N1 w( X: x P2=loc[4];
& z A/ _6 z/ h( ^. J0 C1 Y delay(2);
4 l1 C9 Y9 N+ D P2=loc[0];" @! U2 C, n, j- p
delay(2);7 q* n! u) p" L P; _" ?* U) i
if((abs/10%10>0)||(abs/100%10>0)) 8 @3 ~0 [9 `9 s; y: f1 H
{
+ j3 R! K- M, v) o* j" Z- ` P0=num;
) t3 [6 _- Z* ^5 Q; |6 o3 T$ D; y8 r P2=loc[3];;
) j8 ]8 g' `; V! I delay(2);
( o& H* R4 ?. U P2=loc[0];
5 B! ?* N. H6 ]- ~, R2 a1 V delay(2);
9 n8 V2 N8 J/ P' R3 Y; T if((abs/100%10>0)) 8 }. e9 Y; U9 z% `* s3 a: E
{8 F1 e. K0 y1 Z" k5 K* |
P0=num;
' |: V9 v3 R8 E P2=loc[2];
/ ]! C( g/ b2 G& G3 h2 C$ h delay(2);
6 W9 u* C3 J# Y3 R* |% e; x3 J P2=loc[0];
$ k$ o2 W& T% {1 y/ w delay(2);
( H; x& V y# U5 R if((abs/1000%10>0)) 2 r3 c/ c8 r$ A& W; F4 g# ?$ [) M2 x7 |
{
" l2 X# s& F% h, S- p P0=num[q];
# i5 I- v- N' E4 k P2=loc[1];2 b; m( o0 q, n2 ?; k
delay(2);
! f, E* S' o+ F- x! [( ? P2=loc[0];: |( [" P! K1 Z5 n
delay(2);$ o' z% j7 @' D& X5 B
6 i0 _9 @) R# `+ e. G9 L# N" y4 Z
m$ f) H+ m: v- s# E }7 F2 x3 @/ P* H9 w, d* L0 l! J
else # \' s0 N& K* ]* k3 \9 d- u
{4 V: M* N) Q- ?6 g1 t/ _- a+ P
P0=num[11];/ O( i" [7 }+ B; f; E
P2=loc[1];9 G( i- }3 c: o5 h
delay(2);
6 G; C I* f) Y8 s- w, c' I. D! A P2=loc[0];
1 E* s6 t7 q/ g; Z) |" j delay(2);# ~( V7 a b& c e% a/ n
}
" ?9 ^% s0 l; x( Q/ N5 t }- P5 u2 ]# b7 p u) G) h3 d
else
0 Y- F+ Y# c" K {
- I+ l; D- U) f P0=num[11];4 l" {6 m/ p7 G4 @9 O9 @! R
P2=loc[2];: e$ \5 b$ i& x8 m7 K+ e
delay(2);
/ S8 c1 R; h% V: w- ] P2=loc[0];
* ?. a; ~# f- h6 Q9 c delay(2);
! D5 e4 B6 m, X }
* x! {) h, K# h2 A" X' ?7 _5 r 6 o! E2 \- Z5 @9 f/ w. q
}
9 \/ T! k4 ?! O: C" r- w( Q else 5 }! I% h- A% F) {8 f/ s$ D7 r0 n" ^
{
: D. J7 D2 f. K2 R P0=num[11];
. Z! g" a% m( d7 @7 Q P2=loc[3];3 [+ }. E6 M6 f/ b, t! l
delay(2);' A5 x* b1 m# {* Q' N
P2=loc[0];
1 i& `+ h8 k% U" T, r delay(2);
5 O# Z6 J, F" h+ Y# S6 s }
7 Y C5 G# j3 ]& m+ K6 T5 g
5 X8 H# E) T4 H- j6 z( N }
1 S. W, b5 i, `& Y8 V) l; B; y- z; E. i
0 N# C2 s2 J0 y5 n0 @ g
}- ~0 y' i+ @' p* }8 t
6 |; q8 O( x& d8 o' Q5 b4 m
2 W' h5 B9 m+ l
//溢出显示' N- ~" `+ A. Z% ^! D: I p- r' w
void error()) c% Z9 m, g f; l8 ]- ?
{
9 ^' r: A6 Q4 p+ m P2=loc[5];
# {( C" ]/ C7 q4 x P0=ero[0];
$ O; [8 G) k+ c2 ~. l delay(2);3 X) A$ M5 t) n* ~& w* L) d, `# v
P2=loc[0];
" y+ x- [7 c5 Y, [" d delay(3);* D! w/ V7 m5 ~3 o4 y: X; g
k1 d1 E" @5 u6 k3 g P2=loc[1];
: Q* B3 l5 A ?) v Z P0=ero[1];) Y( O0 G. n0 p2 h& b
delay(2);( L- n$ F# y5 Y% i" X# n
P2=loc[0];
4 n4 n- J& z+ R7 z- \5 p% C delay(3);
4 g' N5 J/ ~. {
9 d5 x# V0 d( g( z& d0 ?% t$ h) x9 e# G- }! I5 B* i% ]
P2=loc[2];5 |1 F d3 Z) \$ p& C, H0 R m6 A
P0=ero[1];
8 a7 a, Z5 D0 P, E delay(2);8 Y! E" p, y# D' ?9 ?
P2=loc[0];
3 M5 E- f2 v% j9 z( L delay(3);7 F' V+ u$ y$ s" O
* W$ M- J2 Y, U1 l8 r' x) ^# h
' a0 r; m: C5 j9 L8 A7 D0 ~ P2=loc[3];
0 Y7 k$ [( p; d+ v P0=ero[2];
7 E* `/ a2 M! e4 c delay(2);
, |3 h! y3 K7 i; ]3 J) f- f1 L" E1 b P2=loc[0];
# J C( a! I4 {2 J* U! O6 s3 b delay(3);
! B8 |$ U+ R) T" j) a, G/ W) e( f' n' P3 u1 Z
9 _; }' A$ N; |( u1 \( p! b
P2=loc[4];$ r' m* u, _/ V4 j4 j
P0=ero[1];! t4 w/ @* ?" }! h2 ^: t ^' G+ Y
delay(2);
1 C$ S( M* b# O9 t* k P2=loc[0];' v2 N8 H/ o2 |! r. B% \
delay(3);
2 G# d; T" S q2 `3 ^ q
$ M9 U) l' }7 y- j5 o: N1 F1 O% g9 L% F, |& k h% P9 [) |) k- t
}' X" A1 F) ]' u) ^0 N
' h8 M4 r8 F7 H
' C3 J2 R9 C B4 @) o4 `原理图:
7 C5 h }! X" v* @
2 ~% m7 C* Z6 ]* h8 r8 I# O
- s9 E+ r) R) n/ e8 M4 e, W4 S8 h |
|