找回密码
 注册
查看: 402|回复: 3
打印 上一主题 下一主题

修改单片机程序

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-2-16 10:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
请问大神这个程序我怎么改成可以进行有符号的计算啊    可以计算负值
3 e( |% ]/ i2 `4 T3 ^
/ o: A- l: V# H9 R" { #include
8 U; {* h- ^, M4 y#define uint unsigned int: y( W- p# X# @  `) z; R/ m
#define uchar unsigned char
/ B, P! ~' M! D. O***it dula=P2^6;        //段选引脚
6 b* g6 T9 f! C/ O***it wela=P2^7;        //位选引脚  ]' ~8 e4 J+ W, A7 m1 o: F7 \
uint flag,inputnum1,inputnum2,displaynum,mathsign,outputnum,keynum; - A% f% N" v8 Q7 h
uchar address[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //6位数码管地址数组8 C+ G/ a3 D3 U# f6 E" }
3 i* }3 U2 r5 U& ]
8 j  b! S. [' P5 f0 m# {: E
uchar table[]={0x3f,0x06,0x5b,0x4f,        //0-F共阴型数码管字形码5 S) v  `% }* H' k5 V' j
0x66,0x6d,0x7d,0x07,' W" `' K* B) `" y
0x7f,0x6f,0x77,0x7c,
: _8 K: o: X% D* B0x39,0x5e,0x79,0x71,0x40 };; m$ l: Z4 t1 ~- B* T
0 ~2 r0 u) G$ m# h; K, u
% |6 U" K  ?" h- \! J
void delayms(uint xms) //延时函数0 ^8 @) k1 o, G) ~2 V
{
. p6 |5 M. Z+ u1 D3 buint x,y;
9 v# r% _# r  F, s; zfor(x=xms;x>0;x--)- M' T5 J+ L$ d# @4 b
for(y=110;y>0;y--);
/ S4 `% `' R* R- m9 b}, p; B) n* F8 E$ l
( N* o# v# `" K
2 B% b9 Q+ F9 [) H! t6 _
6 ^: p) B7 ^! c; ]- k8 E; K
2 s) B& o# X& N& l, n+ M) Z( ?
void keyscan()
2 L( J( V& |% v/ V9 f. i' q' p{7 ^7 L9 d7 G+ F  F% @0 l
  uchar temp,temph,templ,k;
* v+ \  P- @/ R! f/ l7 \  P3=0xf0;
' y7 [9 g3 |) A0 g6 L7 {# H  temp=P3;/ x: H: L/ g, Y* Y$ O, X  Y9 f
  temph=temp&0xf0;: O! h- X7 p8 j+ B5 W
if(temph!=0xf0)
6 G: Q  e# F. m5 a- m6 b{
7 U! D, @% [  u+ Y: [% Y& a  delayms(10);
# P) @. n3 B; ?% b  temp=P3;  n# ]5 O* `5 ]8 H8 a
  temph=temp&0xf0;: W4 N. q! v1 ~9 |6 P
if(temph!=0xf0)
( o% e6 d) C+ G! ]{
9 U9 Y6 K! g1 n  P3=0x0f;
8 }( o" }( X( A' ^  temp=P3;' d' l) X) U3 U/ i2 v& h) n& @! i
  templ=temp&0x0f;; l/ y! W9 g  B$ u! G& E7 {- f
  k=temph^templ;
  c: {. d+ z2 g6 P0 aswitch(k)2 p$ T( D# _5 e  R2 C6 w
{$ ~# u# H9 i! C2 J1 h9 ^% y1 w
  case 0xee: keynum=0;break;        //数字0) c" v% e) @3 C" ^
  case 0xde: keynum=1;break;        //数字1! A+ ]; m5 i: }( Q% _
  case 0xbe: keynum=2;break;        //数字2
% \+ [- ^# i8 ?- u, Q  case 0x7e: keynum=3;break;        //数字3
7 O) u1 r! j+ j5 r$ }0 @6 D' e9 X+ g. s
: Z0 a. |. C3 K0 X
  case 0xed: keynum=4;break;        //数字4  E. x" N6 O8 Q) W
  case 0xdd: keynum=5;break;        //数字5% n8 n2 V8 P* _- L7 t7 g  x* }
  case 0xbd: keynum=6;break;        //数字6
% v* m- Y8 j4 t% c$ i  case 0x7d: keynum=7;break; //数字7- m5 `) c. ^+ V, c# t0 c" o1 k

4 V9 T. Q  x+ c& y9 X# g7 X
7 o9 U4 M* i  [8 y: ~& r  case 0xeb: keynum=8;break;        //数字82 X! u# ?6 k7 J8 n6 A5 Q9 a6 n/ \
  case 0xdb: keynum=9;break;        //数字9! q6 ~9 x* I8 Z8 W& V8 D' l
  case 0xbb: keynum=10;break; // =
( S# P8 J0 i# y; n3 S3 {- T  case 0x7b: keynum=11;break; // 清零
8 O1 s( x! ^7 Q# S5 w
9 F" ?* C" H, J; J' q
: A, s8 T4 D3 [) T. ~6 a5 Z5 \  case 0xe7: keynum=12;break; // +; y5 ~! Z5 ~) ~$ _6 F
  case 0xd7: keynum=13;break; // - 4 Q" F' y8 }' ~' Y" K2 Y0 b
  case 0xb7: keynum=14;break; // *3 Y6 B% m: o! f- p. o5 Y
  case 0x77: keynum=15;break; // /
$ r3 ~* i5 z, X/ ^) E9 V}
2 r: }9 g, k- ]) X# s1 {( b# P- [while(temph!=0xf0)
- ^6 q( ?5 _+ K3 `+ b7 K3 `{5 ?% F/ Z3 i+ s* O0 n* S
  P3=0xf0;
) t+ [+ O( h& P$ c! ?  temp=P3;/ M, `2 O3 x* P) j% o. L5 X
  temph=temp&0xf0;3 E7 T: I+ x' w
}        
2 Z3 T1 |, I4 c: V}        
' B7 A3 M5 u4 p, [6 o/ s}* t# k2 S4 c( v5 ?3 N! T
}
" S% U1 T7 W% _9 t2 N+ ~& o1 b8 E8 l, q; H: D* W

5 R0 E5 w1 c  l+ bvoid display()9 y8 I9 A7 T" T5 p: l/ v* \' L
{( t5 {2 Y3 S8 A( M$ _
if(displaynum<10)        //显示1位数,0~9. z2 `, I% R. z7 ^# x
{6 |% r* y' n9 T0 ~
  P0=0xff;# M. N0 R3 e. h% S$ U+ c
  wela=1;
* A& V6 m& C  c( I9 ^# E8 Z& r( _  P0=address[5];
! o0 h9 f# x% v& ^! `: }/ m0 _  wela=0;" [6 S% L( S9 k: {8 u6 H- C
( S5 v; e! a; I: K8 W

% p2 L9 k( O; s  P0=0x00;, u: {' V8 r, {/ d  F
  dula=1;
& d9 F4 Y1 b9 t1 d  T; R  P0=table[displaynum];
( y; F0 o; ~6 r5 s; ~  N/ r  dula=0;0 e: v2 B9 b  `$ X) f
  delayms(1);
% Z+ G' u' ]  o1 a}
3 }  G/ a" W7 d! f0 i( `3 j3 j9 Zelse if6 e' D/ Y3 v, s- N7 m
(displaynum<100)        //显示2位数,10~99+ C- p1 A" w+ u' w6 o. m1 o0 b) \& z' M
{5 X1 L4 `! _3 e0 t
  P0=0xff;" _3 N8 Y) A& ]  \
  wela=1;
8 e, q  d( p1 e* }  P0=address[5];& a0 W0 K6 h* x" k
  wela=0;
: T$ E0 V3 E, s. c
2 ~9 G7 F+ m2 x" T1 _5 e
9 I! D$ D" n1 A; T/ s  P0=0x00;
  T2 a$ t1 ~' V5 w7 I  dula=1;4 C: q' X4 Z7 D5 v/ x  ^+ ]5 `
  P0=table[displaynum%10];& L+ j. k$ U% j
  dula=0;
$ u2 p+ y( v! `; m. [6 e  delayms(1);        
/ x& e* m4 n5 _* Z
! V) e/ D  u( Q  y) Q
4 S9 D0 @) O% |  P0=0xff;
  Q5 o, U8 E. L  wela=1;
. [" h" Y+ d7 O+ X  w. p3 Y$ n  P0=address[4];0 g6 [, L% S7 F
  wela=0;+ r' [: J2 \  K/ n% X
5 R3 r( @* A9 i2 l

5 |5 T+ @% x, d( X" [8 ?  P0=0x00;
: q; z+ a  W1 e1 B  dula=1;
7 I! d3 q+ G* ?6 y3 ~, ]  P0=table[displaynum/10];
/ Y+ {) y% [& ]7 f8 E( g% Q. z  dula=0;
- F" [2 V* h- v3 L6 C) A6 S  delayms(1);        
+ X  h. x- S  v) W}
, q4 `0 a3 Y9 D  X, E+ t/ kelse         //显示3位数,100~999$ {' v( G' U4 d1 X* ~
{
' {" j" f( d1 m, ?$ p  P0=0xff;- G# S- ~* {8 j7 n
  wela=1;% @! X5 F/ \( p: J3 @& ^  l: w. Y
  P0=address[5];  N- e& z7 [  @5 }$ N4 ]  J
  wela=0;
+ y2 O/ a) k6 I, y
4 h6 y! _3 c+ V# w" U% O& T. b- U1 C1 V6 A
  P0=0x00;3 x: C$ O  h- g
  dula=1;6 X5 K3 c3 V4 |
  P0=table[displaynum%10];/ \: ^& T+ V5 y& @  c! L6 Y/ K) R5 O
  dula=0;  ^2 ?8 U, U* h7 H" _& I, j
  delayms(1);        7 |, Q7 F6 l, @; v0 g( w  [
" G/ d% {- [: G! ~3 L) J
% _, j& I$ X3 }- M
  P0=0xff;+ K% o2 s: A2 _8 q% \
  wela=1;$ u7 J- o9 N2 s8 ?5 M/ }% o
  P0=address[4];
! T+ K5 |  O# O3 q  wela=0;
+ q% n7 P/ X( S5 b7 n6 F, [, y* @% D

7 j8 d8 v* D. Y/ V/ t5 M$ ^6 ]1 w  P0=0x00;
7 v3 a+ Y8 {1 V  dula=1;0 |% \) |3 J, _/ n. K6 X% k+ L) c
  P0=table[displaynum%100/10];
% W. T% [; h% K5 L! ]3 S  dula=0;
- m1 E: V2 ^! ?& N* W  delayms(1);
! @5 Y- {$ B8 {8 I
3 u8 M* o6 W: C- c( D9 B& n' o' L& |( r9 [
  P0=0xff;
7 w+ o: R* p) B# b  wela=1;% T  B( ]- N, X0 F
  P0=address[3];. \, J- ]1 Z' U- X
  wela=0;  q( ~# ~- f* y: ]) d( T# |  \
9 z2 x% q7 u3 {4 ?
6 E6 T* A: z3 D4 W- {: ?( d4 \: d. E
  P0=0x00;/ I0 O# c& @/ S! K8 h8 l9 w' l! J
  dula=1;
; T0 ^* L( r+ r  ^) y9 H: N7 X  P0=table[displaynum/100];1 L0 U$ z- {: u" O" C) I
  dula=0;- I. X& X# o: y2 z3 J9 ?( x
- l/ `* r- c6 v
! z2 Q5 l7 ^( g6 |
  wela=1;8 v* i# O/ p' p& h
  P0=address[3];
2 {7 G: v8 h( ]  D  wela=0;
5 P& B  x- z  I' q4 g' A7 Y, r0 D. k  i# S( b% R

  N2 f# T- z( n; `+ c0 X- r  P0=0x00;. s1 c. P+ a# Z# l* o- U. Y: A
  dula=1;
7 h+ M2 k2 U$ L! X" a1 t$ P  P0=0x40;
1 Y; X7 x" ]8 B+ H; O1 G0 A  dula=0;
: l6 h' ?! [4 o: C6 u
; ^+ k& `, S1 d" P! f6 N9 {& @* m) q: s
  delayms(1);        5 A* U3 W  [9 w5 V, U0 z3 X7 P3 o9 V+ i
}        
! k! ?0 v4 h. M3 [7 T}
. B( v) l% e( @
, X% u& @; P" _* P; Z% t$ f, Z! w1 w# X

% G/ I0 V  Z; K
) z. F$ E5 t! L9 J% f: j6 F4 B3 Y$ F

* {  D0 X8 b# x: e( }1 M2 U
0 ~6 R+ g/ e: `0 d/ O5 _7 M0 u/ R" C) X
void main()  a1 a5 d/ f1 x5 I+ L
{) X1 j% I9 Z$ W& v5 S5 r- x) D
while(1)
, [, `, O, m1 \( r1 v$ M! x{  V& q$ a8 V, }  o6 _
keyscan();4 U) C/ a: g$ Z7 k2 n9 ]% }
if(keynum<10)
/ @, q7 R, O$ E' V; Q{; s2 x6 G6 j( q' D- {( E
if(flag==0)- M2 i* m1 D( C4 t7 A; h, Z4 I7 S
{! L3 @9 a0 n" ]0 w% T3 f6 H
  inputnum1=keynum;) O: y- H3 V! G7 G
  displaynum=inputnum1;+ e* |0 H# R4 L- l6 p5 L
}
1 }7 E" M5 P) N/ k$ ~ if(flag==1)+ {7 a. ]$ W$ S- H3 {# D1 W! o
{: {! O" z3 h" G8 \3 Y
  inputnum2=keynum;6 w; \% \, V; ^3 s( X3 I' M! o
  displaynum=inputnum2;9 i3 T2 H& _8 o' J/ b* q
}
) V# J9 G+ [& R  b}
' \0 r0 @1 X- _' ~5 |6 o& D* \) O2 s1 I
7 Y+ C9 D) J, u# E5 b. P
if(keynum==10)& d8 C, v* Y! Q' f3 A
{2 r+ H. G/ C$ T3 P* N& v
switch(mathsign)4 v8 L% X. J) e9 v& v
{
' Z' b& C0 W# n- K$ ^  case 12: outputnum=inputnum1+inputnum2;break;2 q; t5 O& E0 Q% m4 k/ e
  case 13: outputnum=inputnum1-inputnum2;break;3 a8 W. P/ S2 O- ^5 K# z) t0 W
  case 14: outputnum=inputnum1*inputnum2;break;! l, e  L" k5 q4 y
  case 15: outputnum=inputnum1/inputnum2;break;
) x" ?' w+ |. K) Q}
+ [: [) x/ [" m! z2 A* ?: ndisplaynum=outputnum;0 w9 s  t3 Y6 j
}
5 L% _5 b/ G* ]" J( E  i) r! T- u! r5 o' `
- y+ u& ?- e8 f8 ?$ P
if(keynum==11), K! Q% W% A' {* T" e
{
, x( v7 X8 l- _$ _  displaynum=0;
! ]! ]2 t' g5 l/ @% ]  inputnum1=0;
3 j1 Y+ w4 `! b$ G3 G/ s+ T  inputnum2=0;& k- J& Q; f$ |. w/ X: L. W
  outputnum=0;
3 h/ I" H# c0 n  flag=0;" j2 q% h( q( F1 v+ _0 N
  keynum=16;
) T6 j! a* X2 b8 [8 j  r& M9 h* `  mathsign=0;
6 m& p, f/ X9 d: n7 [% L8 h% N}# G1 D! D2 q; @' T6 R8 }
1 h2 d5 z2 q' l1 g" ^( z% W
0 J$ Z9 _; g2 ^
if((keynum>=12)&&(keynum<=15))
2 b6 q9 k! k3 N: w  X* I7 y{/ F2 C4 _) _6 ^5 l2 T
  flag=1;: k4 [& ~8 `" U  M+ F' x
  mathsign=keynum;
9 ^1 Z( `" ]1 ~7 B, R0 b3 b  displaynum=0;
+ E, O2 F. `4 w) _3 J2 R& {}
$ p, w, S1 A  c5 ]0 ]+ ldisplay();7 M- r# c; ^6 i3 Y8 j9 E
}
. n, t6 @; g/ x, u}5 T( Q1 T* G1 m7 ^5 m

该用户从未签到

2#
发表于 2023-2-16 11:21 | 只看该作者
char int 是可以带符号的

该用户从未签到

3#
发表于 2023-2-16 13:51 | 只看该作者
把所有变量定义为int

该用户从未签到

4#
发表于 2023-2-16 17:04 | 只看该作者
有负值就是能多显示一个负号呗,数据改成有符号数,显示的时候判断小于0就先显示负号然后再显示数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-5-26 09:38 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表