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

修改单片机程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
请问大神这个程序我怎么改成可以进行有符号的计算啊    可以计算负值
' d; Y, ]- l3 \. S: b4 Y7 k* p1 Z5 \4 ?0 b  i/ h8 i
#include7 k' Z8 E/ ?0 }" g  C) _
#define uint unsigned int. T- u/ i9 s! X( Z( L
#define uchar unsigned char  c; C' g3 G+ J
***it dula=P2^6;        //段选引脚2 e6 V6 T( a1 p$ h# M( O4 [5 B) F
***it wela=P2^7;        //位选引脚) S2 h& x) P% s
uint flag,inputnum1,inputnum2,displaynum,mathsign,outputnum,keynum; 8 u. ?# g' W+ l1 N; u% Y( Y
uchar address[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //6位数码管地址数组$ {. ^0 b6 Q) k# ^
, D$ d4 U, |, X* I

& z0 {; z/ G. ?! b5 ^- b, Wuchar table[]={0x3f,0x06,0x5b,0x4f,        //0-F共阴型数码管字形码
* X. t- d7 W4 h7 D* d# i0x66,0x6d,0x7d,0x07,; @3 B" x7 H2 f0 I
0x7f,0x6f,0x77,0x7c,8 b9 Z# W- F, U
0x39,0x5e,0x79,0x71,0x40 };
. q9 O2 b% x1 ?9 |) U6 Z- D; z- q! f& O! \8 E% W  n4 e
+ e# M7 N: t  n/ I' s2 z( D+ p
void delayms(uint xms) //延时函数
6 K5 Q! R6 N* K/ r- D( [{& n! S0 P  Y  a9 o  c0 x1 ?8 c
uint x,y;
9 X6 K) g8 K' d$ k: l$ Cfor(x=xms;x>0;x--)1 }3 Y1 L: w5 k2 s) s/ g7 |
for(y=110;y>0;y--);' d$ W3 x0 h! |  E
}
" ?! t* A% ~+ V# \5 z9 _5 ?" K6 Y2 U2 \1 R( b
& ~% [* f( }0 X7 B/ O
; _0 u7 c. n  M' Y( h! E4 F
' ^3 O4 p) Y' E' H( S3 p
void keyscan()' H& i. B, j- Y( s7 L6 Q
{+ L8 P, P7 E* z7 P; V
  uchar temp,temph,templ,k;4 y2 B' {6 y1 M2 o- @& b; v: c
  P3=0xf0;* R7 L* z" U2 [5 t& e+ A
  temp=P3;! s8 P9 J) S5 r, H
  temph=temp&0xf0;
4 h6 T2 t  ^0 g" h3 p: m' [if(temph!=0xf0)
0 o, d  P. C" R1 \4 T  n{
. a5 d  r! r! _5 v: P  delayms(10);
" i' O3 z- D7 X# ]  temp=P3;2 n9 b. f; X0 N/ I  g
  temph=temp&0xf0;
8 c6 Q" N" ?% h; f( r3 S" _2 qif(temph!=0xf0): ~- h  k( T/ p' r9 x9 u
{
# k: K8 y8 @: c% U8 O; W  P3=0x0f;
4 \1 b) ?* O7 m  temp=P3;
4 N; x; q0 P( j2 D, k4 Q) Z( {& o  templ=temp&0x0f;) v# m/ W$ r8 L
  k=temph^templ;  ]/ \; E2 `' j- I; u8 U9 r
switch(k)% D8 ]  Q, ]( J7 Y# d& o
{
6 t0 g3 F' M! Q* [' M! b  case 0xee: keynum=0;break;        //数字0; e: o$ ~! y2 b/ N" N
  case 0xde: keynum=1;break;        //数字1
) L4 d, d, N; J# |6 u, r: H  case 0xbe: keynum=2;break;        //数字2! B0 G# q' Q$ `5 R; ]  k$ H
  case 0x7e: keynum=3;break;        //数字3+ B! N+ q! {- {; w7 ^

6 F/ {8 \3 N8 d% r3 @5 {) B" G8 O+ g8 p
  case 0xed: keynum=4;break;        //数字4
" J" k9 q) }9 a* N% v* W  case 0xdd: keynum=5;break;        //数字5- w, z6 V( B/ d7 }- g; Y9 o7 p, Y# y
  case 0xbd: keynum=6;break;        //数字6
$ X7 v) l" `& h/ F8 t5 S0 X5 S  case 0x7d: keynum=7;break; //数字75 K. k0 M' p. j* V7 i
1 ~$ k( _9 h7 c0 H, n  O" X$ @
/ P; G$ x2 a* P# L
  case 0xeb: keynum=8;break;        //数字8! c$ p/ |5 @& }+ M# k6 R
  case 0xdb: keynum=9;break;        //数字99 j) y7 y: B6 w; d
  case 0xbb: keynum=10;break; // =. q* {# o) b& r' C1 S  x; U* E7 p
  case 0x7b: keynum=11;break; // 清零
3 d, s8 z# u" J. E8 B9 x/ V
) `' M' W( _6 s" |7 f* r: X* D6 v# l5 j& k% {3 Y
  case 0xe7: keynum=12;break; // +
8 e: _6 S4 a5 H5 e2 c  case 0xd7: keynum=13;break; // -
% m) ]' T% Y4 j" [! P# O  case 0xb7: keynum=14;break; // *
" v4 A; q0 c% }' B  case 0x77: keynum=15;break; // /
! y0 U- Q/ B- C4 L}/ b) Y. @/ F, x8 M0 \, d
while(temph!=0xf0)
: O5 E1 o: M- r; A{
. C% L4 d2 K2 `4 i5 Q, H: I  P3=0xf0;
" `! s5 C5 P. z9 v  temp=P3;9 P$ _/ g, M5 [, I8 A, N
  temph=temp&0xf0;9 [) n0 v/ e, T* M8 g* Q
}        
$ v1 M% h6 k) [; n}        
; t- u5 r1 f, J7 V# V3 y/ l}
3 k* w) z4 k% M) R}0 C% ^) l3 Z5 U6 W2 O5 i" n, _

6 F+ I) G# ]% ?6 _
9 B, i  q0 ?; W* Xvoid display()
, d/ L2 ~4 }& N4 ?. J{* H; _" X5 ]7 C5 J% T8 z# I
if(displaynum<10)        //显示1位数,0~94 W+ S+ O3 K& o$ n2 {2 Q, e
{
2 z% z- Z' R, H1 B  P0=0xff;  \" W& ?( x; l% t) H
  wela=1;
% z7 x5 Z9 d. t3 t. w6 C& Q  P0=address[5];: Z* y' J' S) L% k+ O" s
  wela=0;
7 B3 W4 Z) P( P, m' Y! o
/ v! f! \+ E5 \+ C( C* V# r5 E  Y, z' C! T; F2 W" @% Z3 L% ]
  P0=0x00;6 w: q  B8 P6 k5 j# M7 q) x
  dula=1;
& N, T* ]2 G  z2 Q! J  P0=table[displaynum];
" u6 E7 a1 t8 R# p6 X  dula=0;" [8 j& o% v( k$ Q" A: z
  delayms(1);+ M5 B; w) @+ H4 x
}
/ c+ l( y) H5 n4 a- Zelse if/ S' G* ^) y2 M1 V5 C3 z
(displaynum<100)        //显示2位数,10~99
8 Q& p0 A5 X' q: D1 Z  Z+ v& W{
# {* y, s3 f, i  `  P0=0xff;
- y7 A" |1 P6 b! z  wela=1;
% A4 E- h& ]' k; z9 @# a  P0=address[5];
/ ^* r- p6 o# L$ U: K9 T$ G  wela=0;
9 X# N6 r  }( F: J
- {3 V+ T% s4 J8 Z9 k
1 Q5 F* X- |( ?/ ?  P0=0x00;0 g9 S4 g6 x$ n5 c. d# r
  dula=1;  E5 ~5 o& A3 M" ]
  P0=table[displaynum%10];
7 i! @# G( u. r' M# T  dula=0;
. Q  [  N" Z, \0 W  delayms(1);        9 g% P8 x' o6 Y8 R5 \; {

/ A% j1 o/ A; B0 h
  T; w+ Y' y5 `/ h4 C! z  P0=0xff;
$ i5 `  P& O$ l8 ~6 j" Y  wela=1;7 ?* z/ W8 P$ \, }; w
  P0=address[4];
  W+ E- W. s% u, f  wela=0;/ n+ E# s# a& ]2 \. H. B
( j* q& }  W% f. B2 ~: j
- U- V1 o1 I0 T
  P0=0x00;5 r- @% H1 Y# d) }. ^
  dula=1;6 S. J9 z! u/ {  ], d+ [
  P0=table[displaynum/10];
4 A9 ~: y; }: b+ Z* s4 ~$ {  dula=0;  [) K1 T; c2 u0 |) B9 M
  delayms(1);        
( t) l) N) ^  J6 T+ \% D}- J$ X* H9 z8 g
else         //显示3位数,100~999
  u$ ^2 i' G% M( H- l2 X7 n{' O* J& E% E3 Y) y1 e
  P0=0xff;
' i# `  z2 t3 t- R1 {! R  wela=1;
1 }+ S: G( T( D% v5 K8 d6 Y) ?# g  P0=address[5];# _9 N) Y6 \' B+ E9 _
  wela=0;
) D$ E/ }8 S3 }" Q, y  O0 y) f- M, Q% t; I

# c# J& J4 E- M2 A+ S- n  P0=0x00;2 x! I& d  R8 ^
  dula=1;% \3 i) }* Q- Y0 J8 t" X) o0 p- R5 O
  P0=table[displaynum%10];
7 n* j' o1 o& \6 @- W, e# E  dula=0;
: |$ M4 U' R% T2 m  K  delayms(1);        , v/ S  T- D' d2 T  R# c
+ l. U! ?% D9 I/ k. |
( `2 v& }2 J$ z+ G1 R
  P0=0xff;
  T; l2 z# q  ~$ h  wela=1;
1 U& j% V$ i" ^. x3 d- o  P0=address[4];
. H  @5 g; A$ E9 `0 k/ b  wela=0;
3 m* Y" I9 Z+ m5 _  B" r, E* Z6 m4 b. h
# u' \9 y# x+ O* Q# V
  P0=0x00;/ ~- a% ~' V& W; f' ]5 ]- z
  dula=1;" z* z. L+ D$ Z" G" |
  P0=table[displaynum%100/10];3 ~+ ~6 D4 g( |
  dula=0;
  [+ o( T2 w1 a+ V4 \5 ~2 }: C  delayms(1);  @8 s" A' N  Z5 o" i% M: B
$ h7 g+ W3 _* {: ^' l; q: M

5 j" \/ w5 ?: @# \6 X- _  P0=0xff;
" B- A% S# e$ M4 M1 D( c8 Q9 e3 b9 S& _  wela=1;
* c$ R/ L9 Z  Q  P0=address[3];8 C) s0 C' C: f( V4 k
  wela=0;
# ^* Q9 M. \8 j: }' m1 C) \( W4 I8 Y$ m& w" O3 @
: g$ ~% a3 N% J; |
  P0=0x00;
: k  Q' q- p6 Z! R  dula=1;0 l; O0 N0 Q& q2 U/ b
  P0=table[displaynum/100];  ]' X' r9 A5 L$ Z
  dula=0;. ]2 l+ N+ \0 ?/ ?! b) `
" e9 ]5 H* F# F: D- D8 c3 ]7 H+ g

& N' J2 e9 _1 k  wela=1;& W8 L4 T4 f" C5 j: m3 c$ H
  P0=address[3];0 a+ D' [: S7 m4 M1 D5 l
  wela=0;2 ?. t) |( m  [0 m: y

- V% V# g% l; Q1 b3 P6 s9 Q: C! S% e3 M8 G4 w% v( g, y. _- Y% h
  P0=0x00;
; A% z0 T, t5 j9 J! @  dula=1;
& u2 u3 @( C0 I% b. l  P0=0x40;& F7 b6 j: N/ L. P3 P
  dula=0;
+ n; J- T5 u5 j; Q& V4 a' Z
+ _: y6 ]+ n5 q, ^
1 I' G) F0 e, P' q) @8 k, Y+ V  delayms(1);        
0 O# J8 P; w6 C) r$ R$ J; y}        
9 n4 y1 U; ^" F+ W& L& B% h}! c0 D: T$ D+ s

& h0 Y% r+ G  @- ^
  c7 |3 `8 |- s: g% v6 w; v5 W
  x6 {2 K# L5 F8 d1 W6 c( V6 i3 n0 ?  A

( [' Z% D0 A* I: S4 S5 f5 m1 K& o! `  p! h6 e

+ P$ K# H- j5 }7 u& g& [4 i  r0 N
void main()8 p# p" @" W+ _* a) j' U: I: n
{
# v8 d+ R* R5 G* Bwhile(1)
( G* Z7 _& o' M4 A6 D" y{
7 k* t* O, m: W( e, Q- u/ nkeyscan();
1 \/ Y/ t4 Q! cif(keynum<10)
& l  V7 V$ S4 ~$ a{4 `9 ]$ G& J; j# _( [8 T
if(flag==0)
4 D* n0 s8 E. g  D! [0 w0 o' `2 \# f{4 f/ [$ o8 V1 A- B: |
  inputnum1=keynum;
+ B9 v9 d8 ~* m: C1 B$ d7 [  displaynum=inputnum1;" F  _4 W0 A& |4 \2 H8 j
}
/ l7 d. Z( w& V  W* @ if(flag==1)$ y  }3 M: |3 [0 d
{
7 Q2 j7 |7 y; P+ I. }3 ?' n  inputnum2=keynum;
2 C- W% V3 N+ @: I! P: A  displaynum=inputnum2;( @1 N9 r: M* H% O$ J0 W. b; J
}6 c4 m* u7 D( s+ [$ M. T
}) v9 `+ D; \; p% H
; l" z+ W( a, d" Z

: k) a5 I& U+ Y& Y, f% R: uif(keynum==10)
. A9 u% ~4 B" t% M{
9 T" ]6 W6 _7 d4 H2 A8 }* kswitch(mathsign); X$ t9 H6 U5 U0 G+ J; x
{
3 X# e% E+ o- k& ]' \, o  case 12: outputnum=inputnum1+inputnum2;break;
- j- S! [3 U% P  case 13: outputnum=inputnum1-inputnum2;break;1 h) O0 p% S1 e
  case 14: outputnum=inputnum1*inputnum2;break;
7 B" C0 K; m/ E  H6 I+ `  case 15: outputnum=inputnum1/inputnum2;break;
, z# ^" d/ `0 J4 _- x1 m5 [}
1 F, M" o4 Q% A$ kdisplaynum=outputnum;
# b: B; g3 b  ~! @3 R2 N}1 _6 P/ A5 d: j! X' O. V" D

7 |% P8 y; ~+ o) u, ?% V; K/ r
4 n) a! o3 ]2 m6 y% d7 }if(keynum==11)
6 e( G! n; j9 v{5 x) F& E2 |, h/ i- [% j& A2 H
  displaynum=0;
$ Q5 Q, y( b! J' h9 c  R5 A; U  inputnum1=0;7 t! i5 @4 Q( G4 T' E$ D, D
  inputnum2=0;
/ X1 }: g$ G5 u5 i, S% R' y% X  outputnum=0;
5 u3 x6 _( s% d7 B5 z  flag=0;
* O- ^. _. }# W5 ]0 }4 X  keynum=16;' @. ~4 b2 u1 q) B
  mathsign=0;9 p( h+ S% c: d1 _; O' d( q6 f  s
}/ c4 j9 a# o" U7 L, a

( S* g3 I8 V* i5 W9 U, u1 N/ V
( r% X0 b) x/ [, U: Qif((keynum>=12)&&(keynum<=15))
- f/ ?. Q' T; Q" M+ p2 F! \! ?{
9 i# `/ b  [7 {  g1 d) N1 Q  flag=1;6 D  K, g; v% a3 k9 Y$ P
  mathsign=keynum;. k* [$ o$ ^# l3 A
  displaynum=0;
& a. }& `5 }& p2 N7 z1 I4 e) h}
5 j/ A- c, F6 K+ U- y8 xdisplay();; A% R- G% {4 ]# N4 ]3 u' N* W
}
$ V8 w) d0 a1 N( }- R}+ j2 X+ n9 d* Y# E9 o" I

该用户从未签到

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-6 07:29 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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