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

修改单片机程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
请问大神这个程序我怎么改成可以进行有符号的计算啊    可以计算负值
' |* C9 E& t* {: ?6 X8 V9 F2 E& u9 z% J
#include
' z% q, \5 L& O6 V( i& n2 Y: ?#define uint unsigned int
" y# W9 t8 R. T" {: V4 w* ]8 V#define uchar unsigned char
- W4 o0 V" ]( y3 X***it dula=P2^6;        //段选引脚# _2 @$ @' P8 M+ Q6 s
***it wela=P2^7;        //位选引脚# T7 l8 [' j: x$ q4 A7 k
uint flag,inputnum1,inputnum2,displaynum,mathsign,outputnum,keynum;   n% a* \5 }7 x: o! {' @
uchar address[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //6位数码管地址数组
+ A* x, [4 M3 @" h- x# p$ H+ r2 r% A* n* u
0 I6 }# s% B6 t- `( m& P* J0 ?
uchar table[]={0x3f,0x06,0x5b,0x4f,        //0-F共阴型数码管字形码2 |0 |+ R) `  i2 K2 G. t5 e, H
0x66,0x6d,0x7d,0x07,( G: c4 p! P, l9 i) K& }' H( ^8 s
0x7f,0x6f,0x77,0x7c,
5 T0 R% o6 R8 Y! r' w4 X& n( t& Q0x39,0x5e,0x79,0x71,0x40 };
  S/ S* t# |+ F1 D6 w- m( G( G8 E: O0 K/ i( H" m8 @! ?
* k* x  z* z6 ^, X. ?0 n
void delayms(uint xms) //延时函数+ B3 \/ g& l1 i' K( m
{  D+ B0 a- H( N2 g
uint x,y;# G; ^, L- D% B8 z2 X+ _" |; ^
for(x=xms;x>0;x--)
1 K3 u) }( f) K, | for(y=110;y>0;y--);
# v0 G: y, F- e3 V0 [( Z}5 ^6 K/ Q5 D6 g0 \7 V  K* q

8 e9 f$ \" _) p, C! p
' \3 a: Z) ^2 w! M1 X6 d# i/ v4 p! z  m2 E! S3 I
3 E! R8 g, c( O; y2 W) g5 ]
void keyscan()
4 b8 D6 q! G& V5 J1 ?* l3 @3 Y{* f! `3 |7 S$ Y9 K9 X4 P4 O4 z( M1 V
  uchar temp,temph,templ,k;
9 D1 O; z& F) |0 [  P3=0xf0;
* m/ R4 R" w9 q; @( F: L  temp=P3;
" t. [+ ^1 @& {6 T% D6 X  temph=temp&0xf0;; \8 A6 x, K+ g: d  U
if(temph!=0xf0)" H* \' [2 J9 S" N0 Q. }4 L
{# D( C8 U4 s# d* B2 e, k, q; T
  delayms(10);6 N" q) @$ i( V
  temp=P3;
9 g' X7 ?  `8 [( D0 g  temph=temp&0xf0;
7 Y7 X0 h8 J3 f4 rif(temph!=0xf0)1 F3 i* S0 o  j; B% q
{
$ ?2 x# R5 w$ e4 o- T  P3=0x0f;
" o7 _# @& W5 ?1 O  temp=P3;
2 L; C8 ]; x2 e. h* v- h& P2 q  templ=temp&0x0f;
* h+ g* r" L3 [  J& t  k=temph^templ;# i0 G" V3 Y8 [4 \& |1 _& ?/ ?
switch(k)
4 s! Y! h2 t( ]: ?: i& [- K{9 G$ Z) t4 t1 L" c
  case 0xee: keynum=0;break;        //数字0
% t' |" S% D+ u! E; P  case 0xde: keynum=1;break;        //数字1
, r9 x6 B2 b( g: W4 O! {; c  case 0xbe: keynum=2;break;        //数字2
" D) ^% I& ?3 c  case 0x7e: keynum=3;break;        //数字3
+ I! c4 d) a. {* C, Y
. K7 g: k, u) C2 j; X% u; f% o
* b. o- ^$ `8 H; G. ^' P  case 0xed: keynum=4;break;        //数字4, v$ Z, z2 _% Y6 t! e
  case 0xdd: keynum=5;break;        //数字5" W' B, L4 h) y& q+ ], h
  case 0xbd: keynum=6;break;        //数字6" _( n' n- J2 ]2 ^- h. Q
  case 0x7d: keynum=7;break; //数字75 t% j0 n# H6 p. ^# p

* ?+ J3 N" d: |( b" W# U
, ]/ @: j- O3 t2 r- K  case 0xeb: keynum=8;break;        //数字8
: Y+ w1 i$ e  h, }' q9 Z/ N' N  case 0xdb: keynum=9;break;        //数字9+ Z3 S' W7 s+ M  l( [) B
  case 0xbb: keynum=10;break; // =$ P8 a  B- j8 f& g6 {& m
  case 0x7b: keynum=11;break; // 清零4 g2 `3 ^. M8 q

. H. O4 S  l% S0 d6 G1 ^6 k+ z7 M* B! k8 F
  case 0xe7: keynum=12;break; // +% ^" R$ H2 T/ `
  case 0xd7: keynum=13;break; // - 3 Z7 `. u  l% [' L6 i
  case 0xb7: keynum=14;break; // *2 i( B* |7 D7 s4 |7 b6 S. l
  case 0x77: keynum=15;break; // /
  `  Y* P& B4 Q1 q0 J}
6 }( T7 R4 o8 F4 E* l8 B% B/ uwhile(temph!=0xf0)
9 b3 |5 F5 I( D3 {* g{# G0 s0 w5 a1 O6 E4 Q. k# I3 e3 M
  P3=0xf0;
: o# w# j; h& t, u- T4 C  temp=P3;" E3 f5 @* f, \
  temph=temp&0xf0;' c' F! u8 d% z% s( t3 d+ v7 _
}        
+ F" L. S0 ^  \/ k}        
% R* P1 W/ `" P# }3 V- z0 N}
, r2 Z  i( m% k0 X9 x}
1 K0 T0 n/ [$ I
7 l$ @* ^5 v, i8 `! D2 O
5 j$ ~6 r. b( U; t. `% h$ j* Mvoid display()
  o! I! t$ @; u{
! M  {4 n  Q5 G. t6 Q/ qif(displaynum<10)        //显示1位数,0~9
! u1 E6 X. E+ i. s5 _4 i{7 ]) H1 T% v. S4 @1 e, b& B3 X
  P0=0xff;1 [( f; j7 S2 m' L3 ^
  wela=1;# ^6 X+ [$ x4 k5 u+ y2 V2 l3 J
  P0=address[5];3 Q  Z, b3 m0 q* q' m9 }
  wela=0;
8 X5 Q4 y, i9 s; U
  k4 a3 \0 X( I# X, o! u. N) d, W7 a) c' P- p5 m# y$ ]
  P0=0x00;$ n, A2 Q4 [" j  W: v' X
  dula=1;) D& p# n# ?& f- P/ u: }( d
  P0=table[displaynum];6 }' ^. Y3 p6 Q- f' g
  dula=0;+ i# n, q, a2 ~; P7 H- r( p
  delayms(1);8 ~, U) _$ J8 {9 L8 Y4 L8 d6 M
}
+ S$ e, y. I. d" T9 c  Z$ @2 Melse if
& L$ n( ^3 ~  F: x7 V(displaynum<100)        //显示2位数,10~99
% s, _* g0 o0 [, i{  i7 y& q; `1 Y1 x; ~# Q3 ^* {; g
  P0=0xff;9 z% P  ]4 D$ Y
  wela=1;$ N0 r8 p" Y. S0 U5 O# _
  P0=address[5];
9 _  Q: b# ^$ U' h% P& E* [  wela=0;
% P4 k. L% H0 m& a8 h; `1 {# J1 D* A3 |2 s
8 T( p% x' x9 p6 y9 v
  P0=0x00;! ?2 @, J$ j- O3 M( W/ M* f
  dula=1;' d) J( Z/ K/ j5 n( z0 v
  P0=table[displaynum%10];. h- b6 Q! B. b/ U
  dula=0;7 H- ]0 _/ \* A) C2 z
  delayms(1);        
2 K+ B! x$ K# I2 o( V8 M
6 o& |- q9 v4 r8 J6 f) W  f: w& ]: T2 E" `' t; w
  P0=0xff;5 m5 t$ s" g. q% N. f6 p: g( Y( i
  wela=1;) _- W7 f  k- S2 D& u' I
  P0=address[4];. J1 o0 A3 {$ C% p/ ?
  wela=0;) i3 a# O) \9 n: f: y

+ _8 Y; A" J" C& W0 P4 E
2 o; U/ _( v3 ^$ h; E  P0=0x00;- ^: g3 ^2 w1 Z4 q7 E1 q' M* N  Y) J
  dula=1;" x. n& E) N9 q$ k, p
  P0=table[displaynum/10];
* Y0 a8 S( u; j1 G; N  dula=0;
3 m' h. ?4 J) \' h- Q( x/ w  delayms(1);        
' Q" D1 b, D/ y3 G8 |+ v# E}
/ \# ~. ^# N) W, a" K7 delse         //显示3位数,100~9994 n9 w! x6 @/ k- Z  x3 e
{; t& B& T4 L; T2 l: t' j$ E3 d
  P0=0xff;
( \2 r: ~4 F( A  wela=1;
) }: H6 |0 c3 \: Q$ ~  @  P0=address[5];
' r2 L0 L# `4 x- b1 p/ W9 o  wela=0;. s( H$ T  s0 t3 H* K! F4 F& m" N
1 l1 y3 _+ @( D; S/ D9 f

+ p. U& L! }, t( n$ b  P0=0x00;+ g' i( ]: K. X3 b7 ~! D* G  }
  dula=1;9 ^4 }! t$ b0 j
  P0=table[displaynum%10];
# s6 U1 `/ a" Z$ @" [  dula=0;1 ~& n5 A8 q( s. [
  delayms(1);        
, ]* k2 F8 R' }" O0 C8 l$ H( Z) n

/ t# _# a+ E; E/ {- `  P0=0xff;1 p. X& e1 u# ~* H3 n& u9 E+ |
  wela=1;
' c; Y1 P4 t" r2 d1 t  P0=address[4];8 s1 n% G# v! Z% d! t
  wela=0;7 I: P* U3 h1 L: l) q: ]
. b* s! N9 B  j& |5 D

5 r, C" U2 M0 [" e' k" k0 T  J  P0=0x00;
2 Y9 j$ O" A- I# L8 U+ E* D  dula=1;/ \8 z4 K9 z- t$ W2 }
  P0=table[displaynum%100/10];" @! e8 l0 ?% e, |& C, [2 G5 Q
  dula=0;2 ^9 a2 k2 V1 K! A, `3 y7 x
  delayms(1);2 k8 @: ?" ^% `: b8 L
' Q) O2 Y+ Y6 T* x! X

+ C! E( H/ o) M1 K! _7 Z' F  P0=0xff;7 y1 T9 @) ^; Y9 Y3 X: z
  wela=1;7 q( @4 ]" `) J# l/ T
  P0=address[3];/ `  \% R0 _( K; @
  wela=0;% H% M3 |! R# h3 m- I
4 @: @; `, P; H7 o6 U( c

2 d0 n3 m5 W6 o( ^# `0 F$ C7 k  P0=0x00;: J0 N9 }. U) i" q+ J- w
  dula=1;7 a) c- B! H$ R
  P0=table[displaynum/100];& {/ U& `% N% |% h7 s8 w% a4 m
  dula=0;8 ]6 }# F8 y' E/ o. h# o1 Z; R
5 e. C' i6 i" V! j$ D$ c

5 K# C( u- W) S9 f' u  k  wela=1;
% Z& o( e1 j( G* t7 n+ _' Y( L. k  P0=address[3];
9 m, E: V+ a5 a( Y  wela=0;
' P$ N) L' _; ]3 D0 O6 E1 k% `4 r! d3 }
5 m4 N9 z2 r* Z- H1 V; c
  P0=0x00;
3 z, R3 N& P4 ]  dula=1;% a; t  L* D8 n8 [  o% N0 C
  P0=0x40;# \$ v8 S. z" P2 F
  dula=0;1 ]) t8 Z. M( `0 A

) s9 {! z. I4 M. j, A( ?* Z( h, F0 z4 G" K
  delayms(1);        
; C1 Z7 R. `+ L+ B/ }" F}        
9 T* @7 C6 T# \- w8 \- d( h+ M0 Z! B}
4 k& y  F. U% T5 p( t0 ~
  z/ A- U& E. n6 `. ?% z% l6 Q9 s9 k3 u+ W/ F2 u. K
& k/ |: J% z0 b- i8 u* `
8 T( J+ `2 q9 B8 Y% G" G

6 x, a1 o. v' l6 {2 O* i* t" J) Y* f3 |4 M

3 Y- B; X2 _8 \; W' j# h: Z! V: |
3 f" ^: D; P6 K/ z- A7 N; H: Nvoid main()
& X+ l! l8 o6 r5 G{8 ~+ I- s! z1 p7 l1 z5 ?9 T
while(1)& N5 p" E( S4 i6 [9 b: e
{
0 r/ u8 l( x# r3 @keyscan();
" D0 T' v9 ~2 s  y# iif(keynum<10)
- d. i0 }: v- M. ^- p/ a( s' Q2 g{
7 _; Z+ h" V, `7 d* xif(flag==0)
; x2 I7 k  r* f  C* |' r{
( r$ G" o& p0 z+ ]8 K9 q  inputnum1=keynum;8 e1 Y' K" y6 x$ `" W+ c) E
  displaynum=inputnum1;* U1 C- @5 ^) m/ @
}
& L( t: f5 M7 Q3 }% t if(flag==1)
$ U# c) J. L; ?8 _% }1 Z# i& B0 ~6 ?{2 j# N- z5 [* o% @' M2 g- l
  inputnum2=keynum;
6 K! [7 r# V3 ^  displaynum=inputnum2;9 `" E# Y% W4 @! \: S
}
+ w, B/ {$ Q5 e( t, ~! l: P}
, e! s1 c; H: X8 z4 ]
: ^" O- Z- E, p( T3 V
6 m' O, X3 m# t# e9 r. z% H5 iif(keynum==10)
: R) e- j5 f( ]! V: ?+ |{( s" y8 ]0 U: d( s) \: z
switch(mathsign)* ~& B$ K( s( Y- J9 [2 r6 d
{  Z* [$ t/ H5 J& n: a$ ~
  case 12: outputnum=inputnum1+inputnum2;break;
; B9 {% L! C: k3 C- U  case 13: outputnum=inputnum1-inputnum2;break;
/ c1 L6 v- b" {) Z5 h! f  A* y  case 14: outputnum=inputnum1*inputnum2;break;$ A$ R0 B$ g7 B5 t
  case 15: outputnum=inputnum1/inputnum2;break;, q; Y9 B/ `! ~, B5 X6 H/ ^& K
}
8 _" Q, W/ p& c' R' c6 d! }! V, adisplaynum=outputnum;& P" z7 t  O9 ]( f6 g0 G
}
8 m6 G6 _$ `5 l* ?( M3 I. J3 M- P5 [1 d* }/ Y2 v6 X
9 N% |0 L1 R: ?9 M2 H
if(keynum==11)
" u( D" E% P6 V2 X6 A. j{
+ N7 S) g- a, D& e6 H5 _" o- u  displaynum=0;2 q2 E/ D$ O: Z# F4 k; C" B
  inputnum1=0;' o" ^7 n$ T! X6 {5 m  L
  inputnum2=0;
7 k- J0 @) V1 o' h" ?1 w; M  outputnum=0;
, L/ e+ n: L+ L3 o0 l  flag=0;% D- S' f% Y6 N) C: q# B
  keynum=16;4 c5 r9 e- T' |8 o
  mathsign=0;
" B7 B* C. Q' x& ~1 C; T}
3 ]/ J- @- H' w: Q! h# u
# I; T* N& V' {+ g+ f: F- W6 M4 m- o6 P3 b5 |
if((keynum>=12)&&(keynum<=15))
  I) D6 p9 O7 L* b, M$ Y( F{/ a: f' G) f7 J% d1 y; \  J
  flag=1;' I& S0 R; G  w( W$ b4 v& E
  mathsign=keynum;
& F" x3 ^' n% T, }, Z$ }* t  displaynum=0; 2 G% K1 T: [; d0 `
}0 G' I* o: G1 q+ S
display();
0 l8 {+ z, z, S* w}
( `# ~4 i& {9 ~, i& |1 ?1 r}0 g/ V8 }4 E# {1 a. d) t& |! f

该用户从未签到

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-8-2 03:12 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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