找回密码
 注册
关于网站域名变更的通知
查看: 418|回复: 3
打印 上一主题 下一主题

修改单片机程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
请问大神这个程序我怎么改成可以进行有符号的计算啊    可以计算负值, _0 k6 d1 l; S4 m) s
/ K8 B( N0 |0 c
#include
; K4 P7 d' L2 L8 J#define uint unsigned int4 l6 U% r1 t0 \1 a% M0 @5 n
#define uchar unsigned char' C/ Q$ E; E3 `4 h9 V3 \- U  b
***it dula=P2^6;        //段选引脚/ D1 Y$ n3 i7 r5 Q$ k5 Y
***it wela=P2^7;        //位选引脚8 x4 G% b4 O% H- e* i
uint flag,inputnum1,inputnum2,displaynum,mathsign,outputnum,keynum;
& I: e; P# w- y2 j% p" N0 A! \uchar address[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //6位数码管地址数组
* `" N1 S' s6 G+ f) K0 {# L* f& z" X2 t8 R- r
8 @- W9 _: E, `( E& D
uchar table[]={0x3f,0x06,0x5b,0x4f,        //0-F共阴型数码管字形码
% B* G  ~0 w( O+ V/ w" _, e- \  H0x66,0x6d,0x7d,0x07,* e8 j1 r$ |$ \  {. x) C
0x7f,0x6f,0x77,0x7c,
2 Y! g" A9 L$ _0x39,0x5e,0x79,0x71,0x40 };
, C& t6 Q" g& @8 c% M3 V
: I7 u& s" u# P7 L2 m+ a' R7 l& {; g1 G1 N' Q/ G3 r' `8 w
void delayms(uint xms) //延时函数' Q; A8 ]) H1 B) X6 ]" E
{/ L$ |1 _% q5 n
uint x,y;' }8 y: r! Y6 q( s
for(x=xms;x>0;x--)9 v9 Y3 H. F2 J% u
for(y=110;y>0;y--);
  Z+ j( n* m' m/ i) o/ u}4 c2 v) |4 }% r

  K3 t0 C3 |! Q7 Q' t$ z0 \8 f8 R9 y% o4 ~4 x
- y7 L1 D/ H8 `! k1 s: U: S7 ~) X! L
4 u5 ~2 l( v3 v9 a9 Z8 a6 W. C# A6 X
void keyscan(), @1 e* O$ z2 B! M4 e+ r7 Y( h
{+ n- F; Z" K: J, n) n
  uchar temp,temph,templ,k;5 v! T- {, K) H5 V9 p
  P3=0xf0;
  s9 V- F6 F$ S! F0 P  temp=P3;
9 S. Y$ l3 r' ~& u- J, y  temph=temp&0xf0;
7 L7 L7 p: R2 U. R' [if(temph!=0xf0)
, L. Y6 j5 T7 l' A2 }{
9 g* @: A1 z* V9 ^$ J  delayms(10);
. C0 V( O1 f- r  temp=P3;/ A+ A. [! A9 x5 Z8 K
  temph=temp&0xf0;
- X* a& e8 r. R$ pif(temph!=0xf0)
* q, A% m8 W' m8 i* I{( w6 U' M8 }4 D& _% a1 E
  P3=0x0f;
- T. [. U6 y/ s% }+ ]7 Z6 G  temp=P3;
0 Y$ q- O# Z% I- H4 `# d+ @# X  templ=temp&0x0f;- w% Y. E- y3 O( J. i
  k=temph^templ;
$ u8 W' G3 h8 b2 `. Wswitch(k)2 Q$ K* U! R; r) x8 _
{- \& Z" [9 e$ P" m9 v- t6 k; s6 v
  case 0xee: keynum=0;break;        //数字03 G9 ?, V1 ~1 B' b' R0 Z
  case 0xde: keynum=1;break;        //数字1
! m5 H) I2 s& F- f  case 0xbe: keynum=2;break;        //数字2
6 b% v$ [2 r/ \/ t7 u  case 0x7e: keynum=3;break;        //数字3
0 h# {1 P) ?7 I. s+ j! [# z7 i. G9 v
$ w8 Y7 m# J+ M; z
  case 0xed: keynum=4;break;        //数字4
$ F7 p% m7 O8 i5 A  case 0xdd: keynum=5;break;        //数字5" B( U/ q4 ~$ Y3 H
  case 0xbd: keynum=6;break;        //数字6) P2 f' b- E- j, T# p  `: n
  case 0x7d: keynum=7;break; //数字70 Y: k3 ?% b8 H9 e

; c2 M5 z: k3 f! a* i) N: Q, i5 O, s# }/ a- a
  case 0xeb: keynum=8;break;        //数字8) ?; j3 D- a9 k) ]6 P& K) p2 v# m
  case 0xdb: keynum=9;break;        //数字9
  m$ c/ o; Y, N( K" N8 p  case 0xbb: keynum=10;break; // =
5 N2 f! U( V$ }  case 0x7b: keynum=11;break; // 清零$ s. L0 }% E$ h, T2 Y. I

+ N- S" @9 q8 n
& |- v1 `1 @/ t  case 0xe7: keynum=12;break; // +
" u) j9 j0 u. x5 M0 {' ]( N  case 0xd7: keynum=13;break; // - # z: `+ O3 ~2 w4 x6 }* F
  case 0xb7: keynum=14;break; // *
& k6 C- @" ?& z  case 0x77: keynum=15;break; // /
* b( ?: I7 {* T: c5 N7 L* O}
" C# {; V5 `( ?: j) @while(temph!=0xf0)7 |. b$ b  H, t- [( ^! S8 h
{
! O8 \% b: J9 w( D7 u, t/ C  P3=0xf0;) _+ D8 D  z" e2 C
  temp=P3;3 A, V, y' h. b2 A) p
  temph=temp&0xf0;
2 f# k0 ?: o, u2 q}        1 m1 a/ Y$ `. v  p- v
}        
$ i/ w0 C9 f" l}
  Y6 R) K6 ~" p}5 r0 J+ v/ }$ h( Z% T! S  L

8 ^* L+ ?" H: r) C; m! }! s+ l$ H4 L
void display()
& v" ~/ t1 d5 _; f{  F( t/ J4 X: h% t& I
if(displaynum<10)        //显示1位数,0~91 U% b8 g8 e2 N: |, z, Q' Q
{
3 R' F4 r5 o% T. p3 Z2 {% F  P0=0xff;% C# y$ o' s) m3 i" ~$ l
  wela=1;2 R& b  ^% `1 h4 e1 m9 V" T) r4 i
  P0=address[5];9 `% Y5 K  M1 H' b
  wela=0;9 k' b5 |- Q- X. O/ c5 o7 K
& P: }, e8 E5 W) Q  ]5 Y: O) m

1 G  I% a; p3 R5 {" U  P0=0x00;9 }8 j; {3 |3 `+ {5 C
  dula=1;
+ b* v9 D" t$ ^( N5 @  P0=table[displaynum];
( ^* e; _4 i; T, |1 y2 S! t  dula=0;
' K% M% c) Z. R) m  delayms(1);
6 Z5 A9 o( k1 V8 Y$ C4 Q. i" ?}: b' i, h; a8 m0 R$ ~& ]
else if
7 u; u, n* W$ I( g8 M0 f(displaynum<100)        //显示2位数,10~99( K; T  _; A. L5 i8 \! q8 Y
{
+ U* s/ D: t# \9 \0 {  P0=0xff;9 M1 x, ?, l) K' ]
  wela=1;! \) T6 \4 E; t7 V* b4 I
  P0=address[5];
0 z6 R" I, P: h5 c7 [3 T  wela=0;0 A2 \% n* r; r( E. m7 D
6 V' ~2 n. F& O# s

+ H- i2 I2 ]3 t3 \* O4 M  P0=0x00;
$ ~: D, Q! G, V! I* u  dula=1;
& ]8 i3 h4 A/ u+ R) f3 l  P0=table[displaynum%10];
* n4 J9 L* Q* D0 ~  r, U$ a  dula=0;
0 i7 w8 b$ F- A5 D  delayms(1);        
; C3 T. E9 G6 ?8 r, M
; L: }3 t/ }, G0 F8 i; P2 ^3 s
6 V" i6 f$ Y3 B1 ^  P0=0xff;$ X5 G  f( \, x
  wela=1;8 O. r$ |3 h0 M3 f
  P0=address[4];
7 p, Z" d7 i# p5 k5 `  wela=0;4 _$ S, B! s  h0 @! A4 i- d

3 @+ ^3 c1 V% V* Z
) W+ y6 Q: J/ H! v) l3 m  P0=0x00;
& y( A( f* e; O0 H0 O  dula=1;
, k5 w. S5 O; T0 a& q! V. {  P0=table[displaynum/10];
5 ?" {2 c7 ]% @2 d4 Z& ~- Z  dula=0;
# J2 O% g% E, K% L: m1 y; ?5 b  delayms(1);        ) Z% t6 E* z/ I2 W4 y
}
; J7 I& q  C7 J  U/ zelse         //显示3位数,100~999; P$ k2 L8 {; i: t* k, g5 k! h
{! a% u. Z, B' `$ [& I# A
  P0=0xff;
- l2 W4 R, ^/ F, M1 k# S7 A6 M  wela=1;
& M0 ^' ?0 [( ]  v  P0=address[5];
3 d# ]8 G. ^, `/ h' V  wela=0;' Q6 k1 D' l+ p/ v
) I& V1 h, G! N/ `8 q3 {

, _4 s  R6 ^) N2 j  P0=0x00;
5 A  m; P% G8 `5 F  dula=1;3 q( f' n; r+ P# t% ]
  P0=table[displaynum%10];
: T3 o( L) ^" Q  dula=0;3 A. h3 B: t/ m( ]: W9 i) V
  delayms(1);        ; K0 X, V; y9 b; B/ g8 O

! P0 q4 M) ?" r" f6 `% t# |  E! ~9 V$ z* Z
  P0=0xff;
8 U' i$ Z8 z4 M& c1 @  wela=1;6 h3 Y: T1 N8 E4 N; M" b" q% q9 m
  P0=address[4];: r$ N7 P8 R3 G+ G  v# \9 f
  wela=0;
0 t6 ?. q0 V' [. t; C! e+ x2 ^9 ~, M, ^+ K% P
8 _0 _, K5 M* |2 A8 h
  P0=0x00;% F' d- S3 {& B/ N: H& B7 S5 f
  dula=1;
- Q8 u) w  x7 n. ]  P0=table[displaynum%100/10];
& h/ S# O# W/ k& d" m, G  dula=0;1 J6 }6 w$ O  u3 n7 c7 Z% y
  delayms(1);4 c6 p( x: ?) @
+ F7 l" z# [) x9 Q& Y' z
6 f( p& N( e+ p* I+ s
  P0=0xff;+ l' g; j' L1 O9 e4 O; @
  wela=1;5 z8 c( F) v% ~1 g  Z
  P0=address[3];' V$ t2 q; T1 ^3 i
  wela=0;& P3 e0 f+ x- J8 b1 d/ N

+ v0 G& f) F- c; D3 E( f/ d& A) W
+ H1 v: g- D8 L! e; v  P0=0x00;# y2 {$ e' q% ^8 d" O( x. F" v' @
  dula=1;6 c+ U+ |) E7 g& L4 u5 C
  P0=table[displaynum/100];5 g4 @( {8 F- K, B, V$ [4 l/ ^
  dula=0;8 f0 Z1 Y. W) D6 b# P1 H
, K1 e* r6 C5 U# q

: P% c5 Q! d& N5 ?/ S) d" U; p  wela=1;& B7 S- A! u" M4 m+ h9 A+ y
  P0=address[3];+ e- _- n8 L' Q' O  B
  wela=0;
7 i1 w' a3 E/ k3 D; C9 U; }/ Z& H% N% b2 |2 o3 D& U
4 f- _8 B% C6 I" ~9 d
  P0=0x00;
. U8 }' D. |5 M$ }0 R8 E2 z7 w  dula=1;. F) Y1 ?+ M5 E7 f+ c+ N( A
  P0=0x40;
! I0 N* W& s* j( [3 H% C  dula=0;
& Q7 X0 l' D! I7 V- a+ ]3 n( D  _
3 s, e# c# U. G
  delayms(1);        
! Q1 l1 |" u  p}        
6 Y8 l1 r% K3 n* H8 P}
$ @( g4 X2 `! I( _1 Z+ C6 \# f
1 s4 Y4 U) l9 y/ k0 v  b7 U9 P- J
0 R( i& j/ R& ]$ x3 ]0 {& @9 i
% N) }  U# ^8 f8 I8 P
0 ]2 B. b' i! Z9 ^3 k" _3 C! R- Q, [9 m2 o) f9 e
% Q; f9 Q9 Y1 _* n, }% L3 I

2 v$ Z4 k+ S# K0 I  t6 L: V$ I  l6 F, N- L0 b5 V/ o# n' h2 I" k
void main()
* e$ P: K' q& K6 R{
" v% f: s: e) u( F0 {while(1)1 }% A) _/ u8 M( T! O; n/ r
{7 f0 j2 v+ {# E* R) e
keyscan();
8 w: C) V+ U4 D( p% Tif(keynum<10)6 t: @# I7 B' _9 B
{
6 ]+ W# k) A* i4 `+ gif(flag==0)
; P; \9 C: b# w8 v{! Z1 v" c+ J! b0 X' g
  inputnum1=keynum;. O" ?- R* h6 Y5 l6 t8 O1 h
  displaynum=inputnum1;. U% T# r% _+ {5 q+ z+ U$ Q
}  c$ `( u% l% |8 t2 H6 G9 ^) G
if(flag==1)# r8 L9 v( {! U' F0 n( ]# y
{5 T+ U. F( N( ~1 ^4 \3 T7 N
  inputnum2=keynum;+ m2 F7 W# v+ s1 e/ v& T# K
  displaynum=inputnum2;
( d; C' f/ _, I5 l% j}
& l) t# y4 N. T$ s4 _# [8 w4 _2 i8 S}
6 V) l/ A- a- G$ |
- ~3 @+ `. B5 H4 K( J& \0 B, U- F& E, i6 G; M
if(keynum==10)
9 {/ R1 y9 c/ C8 u  n6 q( w3 m9 K{
6 U' x  T" V- `1 z' V0 nswitch(mathsign)1 {, F# G  Y! ]0 k, F. t5 U
{
. Z5 o3 @: _! p8 g/ u  case 12: outputnum=inputnum1+inputnum2;break;" R; Q+ ^: ^6 B" J7 B7 V& s* q
  case 13: outputnum=inputnum1-inputnum2;break;- m2 `4 R6 Y2 J* G3 F( t
  case 14: outputnum=inputnum1*inputnum2;break;
( O5 k  s1 c* w; V4 ~/ x% ~  case 15: outputnum=inputnum1/inputnum2;break;
2 {+ i( |. R  L1 Q% a, J* g}
9 q/ y8 N- h& e; o9 ~* _( U7 B- Odisplaynum=outputnum;. x& m; T/ Q1 b+ Y- D
}
# y  R& j6 p; |
$ d; w: S1 Y8 Q$ c0 E" f5 p
9 b4 m& \4 r/ u3 E- W4 sif(keynum==11)
: I. y' a& U& B8 z7 j{
' o3 u7 s9 W+ Z0 Y  displaynum=0;8 m6 s$ L, u$ B. @0 y4 ]
  inputnum1=0;7 D: k7 p# b& D- s
  inputnum2=0;
5 Q' W" r/ s4 l" ?+ l  outputnum=0;( i% W0 Y# g/ s) t) L* A
  flag=0;' H# V" |; L& g0 ^) L# c
  keynum=16;
! |8 J2 h( Q8 i- b+ y  mathsign=0;4 S4 E. y: w; f4 c5 N: [0 B6 h4 A- f
}2 k8 f% N7 Z3 E' X
% z- P* d4 ~# E3 a/ n/ t3 M
) B/ S5 A+ E, _8 J
if((keynum>=12)&&(keynum<=15))/ y0 \- M6 j& l5 z8 b
{+ r7 K2 P8 z  y+ `
  flag=1;6 W# g' A1 }. r# s4 ^/ O
  mathsign=keynum;
; W& `6 @% P( Y! J/ L  displaynum=0; ; S% q& t3 w" i% \* q, g3 ?- ~: L
}
( m! |( y: T# x. Wdisplay();3 o, d2 s( i+ `3 J
}3 y; z. J7 N3 u: O& l7 G2 d2 J
}7 {# G) a- _7 \- [9 k! z: o

该用户从未签到

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-6-27 10:34 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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