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

修改单片机程序

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
请问大神这个程序我怎么改成可以进行有符号的计算啊    可以计算负值- B3 W3 N0 d) w& x* r+ ^3 J
1 t0 U0 r" g! G, D
#include
4 K. n% ?& \9 S- C- p4 L* @5 K#define uint unsigned int2 U9 n3 A' }* p! D( k
#define uchar unsigned char
' x* z. e" z9 k: r" ]+ |***it dula=P2^6;        //段选引脚5 _# D+ z" W- ]4 Z9 F5 E' e  P
***it wela=P2^7;        //位选引脚8 s, `6 u5 a! L7 ?1 }
uint flag,inputnum1,inputnum2,displaynum,mathsign,outputnum,keynum; 1 i$ Q$ z( f) ^1 P# }3 X
uchar address[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //6位数码管地址数组+ C" E$ d* u. m3 Q' J7 ?+ U7 |) R

9 E  C7 Q. j, v6 d& D5 |4 }5 F, L
  y# C2 B4 Y) c* S: u' D0 Luchar table[]={0x3f,0x06,0x5b,0x4f,        //0-F共阴型数码管字形码
% D/ Y8 ]/ e# P$ Q( q3 k) ?0x66,0x6d,0x7d,0x07,
6 f6 `1 J! ^$ G  z8 ~0x7f,0x6f,0x77,0x7c,
4 S6 T. D( ?* i! C& K$ ^0x39,0x5e,0x79,0x71,0x40 };
+ b, X/ K$ l. x2 x4 _  z
! z. r! ^' I% N3 J& M5 ]
  i5 C; M( `+ Gvoid delayms(uint xms) //延时函数5 d/ T: o/ e5 _8 Z9 E
{
% f! |9 \9 w$ g' [uint x,y;! J9 s0 i. _1 L- }& w2 [
for(x=xms;x>0;x--)
- C1 |# C) M5 o4 ~8 d& L for(y=110;y>0;y--);4 n. ~& Y% g) c) ?- Q; v
}
  v5 S- l' `% T/ v) L
3 N( a6 |9 F" L: q' q& K
% v0 F# u: D' R$ C8 R
3 O8 C$ P3 g' d. l( [% F# q9 k" T) o# u
void keyscan()
8 p8 G8 `- ?: }+ M) P{- q7 j  P0 x% F+ N) Z* \# z
  uchar temp,temph,templ,k;
0 ~$ Z' r! A: p( A1 w9 n- |  P3=0xf0;
/ D* b/ e7 r" {  x. z" a$ Y4 \  temp=P3;
* |: k: {0 n- |( l0 j1 k  temph=temp&0xf0;
- v2 H& f/ j# I6 K4 H4 x. sif(temph!=0xf0)
: b5 C3 Z$ A! _$ T' Y8 m: c5 d: t{
7 L* k1 v/ w4 j$ z( Y8 S" E% E, `  delayms(10);) z  @/ L0 \- i; O. T
  temp=P3;
( Q% I4 [' C& C$ L" d* F5 I  temph=temp&0xf0;$ Z0 H: e' v: ~/ ?5 W
if(temph!=0xf0)
0 T1 W. w2 X. X  w* b! _6 J( q{- j: m  D9 k; f0 \; u
  P3=0x0f;
. K, J+ B1 U; q0 A8 P" |% q  temp=P3;0 ~9 c7 t6 W2 {4 U# v5 `
  templ=temp&0x0f;6 C& g' V$ i& q0 q& W
  k=temph^templ;5 B* Z' B8 H2 d% u' s" [$ G9 D: v
switch(k)- y8 `' C) R. D5 i2 m. I: d. k
{
( l* m+ |, S1 X2 ]  case 0xee: keynum=0;break;        //数字0
& _' X2 m& w& K$ m  case 0xde: keynum=1;break;        //数字17 \' M& _, q( x; Y# t
  case 0xbe: keynum=2;break;        //数字2: [$ k! o& E* Z( i$ H2 e. z) c
  case 0x7e: keynum=3;break;        //数字3! h" n5 ]; q) |! J( N. ^5 n2 f% x

, i" t1 N. b, G8 l2 `
. M% d3 T/ g. I* G+ }4 X' ?  case 0xed: keynum=4;break;        //数字4
( T9 n/ _. l4 Z* \- M  case 0xdd: keynum=5;break;        //数字5: t, s$ g: U( F3 l- y: `
  case 0xbd: keynum=6;break;        //数字6
' b. Y$ y  O7 @  case 0x7d: keynum=7;break; //数字7
( R+ i6 B# I# V) W
6 z* \& _6 Z6 [
+ c) e* V" i/ b& k  case 0xeb: keynum=8;break;        //数字87 @7 G5 X8 I! I0 G
  case 0xdb: keynum=9;break;        //数字9
* m! d4 D& R) j6 F9 z4 O* G  case 0xbb: keynum=10;break; // =
' t5 c$ y& H3 z) a( V- w  case 0x7b: keynum=11;break; // 清零
* I) ^/ ]! |& P6 L+ U. Y7 q
/ q) `" q1 |& S3 J9 R5 s. c9 E: [7 I8 Y; Y8 X$ M8 y
  case 0xe7: keynum=12;break; // +
4 P) Y4 {2 Y8 e: u  case 0xd7: keynum=13;break; // -
0 }& H7 o  J1 P3 w$ c% `  case 0xb7: keynum=14;break; // *. a0 b  d! g6 _  m' C; l3 ~8 ~2 Z
  case 0x77: keynum=15;break; // /0 V& J2 c" m: i7 ]( T
}% F) ^4 N/ ^% G! s7 [; Q  u
while(temph!=0xf0)
! @$ l2 o  t8 `) f) \+ v8 o{
  X; R* o* w* h' w  {& j  P3=0xf0;; U* F2 E8 o  l& H
  temp=P3;
2 e0 ^. n$ a9 b. x1 X* W  temph=temp&0xf0;
& j7 g. m3 b% }! J$ i}        
8 K6 e# t9 V& y) i. Y+ o. z/ x}        
$ V4 k- Z/ B4 r- e1 C: J5 e}
( C0 }7 |$ A" L2 j7 p/ z6 G}
3 r" @* k0 U7 X9 g8 t4 t* a8 B8 T/ h
! r' Q: }' ^+ |9 U2 b* Q7 e3 Q* S' Z" x& s$ b2 [
void display()
9 ]; N  R+ I0 i- Y& H( N$ G{3 N9 Q% p) a9 `/ p9 p" H: M; R
if(displaynum<10)        //显示1位数,0~9; }# N2 |- m8 g) u. A
{1 v. @1 q' @5 |! T3 ?9 c
  P0=0xff;
3 g" Q2 q) c1 N6 x' v% M; m0 U  wela=1;
2 k, }, O/ V* ?. a  P0=address[5];* {0 I2 `! N8 U6 S% w' T1 }4 u' G
  wela=0;" K$ s0 W( e: C) F- ]6 o
$ z3 c/ i3 U+ t5 K

- S$ F$ m# Q3 b  e. o' ^  P0=0x00;
. J$ ]2 m3 _3 \; v6 m/ L' `. ?% {  dula=1;% l, ]' f+ Y* w6 ^8 m
  P0=table[displaynum];
* X$ A! e: \8 u  @: Y* S  dula=0;
3 }+ j5 ?1 z! d. C0 |  delayms(1);
5 ?. O6 z! I0 s, y& I# f' I" }}
9 E" ?" X$ \6 telse if& o5 `4 W+ |, z& t* m
(displaynum<100)        //显示2位数,10~99+ V6 a/ E- y* K
{/ c  c) s0 Y- [! k) g" z
  P0=0xff;
: c9 R4 K& l/ W2 z! D" T% R  wela=1;6 m( w0 Q' k) ^8 e, Z# ?) P# Q) B
  P0=address[5];; D) D  b; Z5 w+ k6 y& ^& a
  wela=0;, h1 A2 l* @4 a

/ w" m7 e1 C; W9 I: C& N& K' V, T$ d5 j# e  b
  P0=0x00;& B6 d1 Z& Q7 F- j6 D
  dula=1;
8 w" }3 L- `; k' W; w; G4 L  P0=table[displaynum%10];
7 g8 r4 P& Q' M' `: O  dula=0;
, d$ T( L8 j. |  delayms(1);        
$ G7 T" U- W; t8 M) R# J9 B2 k/ V  z: ~3 x
& w* y3 K$ `: C& h
  P0=0xff;
0 z# E6 q7 T  n+ U; f  wela=1;
: S' J* P3 w. }  P0=address[4];) Z7 R2 k# L! l2 V
  wela=0;
' d  U1 [- m0 s' n; b
% C! O# e. x: e9 i1 \7 T1 `) l5 a9 H5 g+ r; ~9 C) l3 t; u: j
  P0=0x00;- f) A, w: p: a6 J6 {
  dula=1;1 E3 d. y/ M7 t4 p6 I
  P0=table[displaynum/10];
& i1 P/ ~" }. @. K' N6 H9 [  dula=0;
: t+ G# G0 V* H' o  delayms(1);        
( j3 \# n' q- X* b) U}
$ {; G( g; `. A; K% T5 {0 ~else         //显示3位数,100~999
4 K$ t' K) b/ e; d3 a3 L, x, z$ U3 N7 i{% B# K# ?+ }4 D1 @
  P0=0xff;4 l) y4 b$ M- [+ E  t
  wela=1;
% q4 \# {  r% |9 N( {+ @  P0=address[5];: P0 g" V8 I# {# W" U4 }( @( K
  wela=0;: z% z' m4 J, A# A
1 f* _0 k# O8 k/ Q+ M0 S
( ?4 P: w8 p" l: j6 C
  P0=0x00;
  u7 Q" l% t2 m. J  U) r  dula=1;
7 @# P4 W2 {! U' ~7 Y- \* R8 |  P0=table[displaynum%10];0 H. z* K: A4 X4 e' _& d5 k
  dula=0;1 C* O8 L8 ^% w" M2 Q
  delayms(1);        
& E- g5 L2 b$ l- m( V8 t
! C, |3 Y, x4 D& [% e$ o/ F9 Y
( t! I, ^& N$ e+ m+ N& t7 H% d6 L  P0=0xff;( \) R4 L9 O7 ]" {2 |/ J
  wela=1;
8 g  Z+ s* @' V0 [0 H) t4 m$ p; U$ s  P0=address[4];  N" K" m, w7 J- [9 f
  wela=0;
; L& M" C# ]. q; f' m+ D# J+ ^2 |! a1 T$ l3 e' _% _9 Y* r

8 X2 `6 N, f2 Z. t, t6 ?  P0=0x00;" t) l5 z! z$ W3 y
  dula=1;
4 _3 {8 X4 ^8 B- g  P0=table[displaynum%100/10];
3 {1 @4 o( m* }  dula=0;
4 g1 P: {" R6 l( i  delayms(1);
% y, l5 P; M, m1 ]1 V3 n1 L) @  b5 P8 t

7 S& i& P% r7 a  q6 T& }5 M  P0=0xff;0 J& f- J( S& `
  wela=1;* f3 K( ], d- w1 |4 Z; J
  P0=address[3];  }0 D, M; i, W: X& Z6 J# e
  wela=0;
1 P; Y; Q4 J# s/ m  Z- W9 o8 i8 y2 C
* y( d$ {) M: p
  P0=0x00;0 y  q7 F- Q& ~1 d( m
  dula=1;
( r  Q+ @4 L. b& y  P0=table[displaynum/100];6 m# E' m" o8 q
  dula=0;
* s/ N* _% E; t. P: Q# `
/ v( b+ _" T, h6 H; o( s
! e$ n6 N2 j( r( v* T  wela=1;
: A+ b& k" k* D# B  P0=address[3];: g" W; E% N( @, k1 I9 X
  wela=0;* T% m* d! P' {% K5 S

4 r9 F; p4 {' W
  d/ [9 _/ H" i9 R# D* g4 i  P0=0x00;
4 c# x6 l4 ?2 G! h  dula=1;. {8 S- Y/ h7 c2 y% S7 ?/ x8 ?
  P0=0x40;" i; ~9 s4 Q1 L6 [
  dula=0;
+ W; B- c5 M0 k# t: g$ L% o8 L
! O) N8 @" W2 D4 i4 Y2 \5 |* g, X3 P
3 z0 t! c8 ?; [% u+ E8 q8 {7 U4 w  delayms(1);        7 U/ b/ p8 {1 n6 x. {
}        
4 v4 @* r; E2 E1 k}
, l+ T- v2 t9 E5 m1 Z
/ m/ }  j8 J1 C. A5 y# L
7 a# x. o2 n) Q( l+ p( ~
/ d" e; C+ S7 i8 B4 W$ f# O# C1 j3 F; `& U. F4 d
- o4 w7 n/ |; e  j. f
! j( w7 j0 A) c. L

2 _' e+ P! y" F$ j8 {
& _% |. |" l1 t3 @void main()
, n: x/ T4 D# b- \# k{: u9 ~3 I' O4 l9 X) C5 {9 ^
while(1)
5 K/ G8 r, t- U5 k9 e* Z- ?2 Y& Q, _{" ]0 [. u- S# P
keyscan();9 ~' z+ d" \1 }: w& x% G1 ^
if(keynum<10)
0 J- v- M6 V! n( q- T{( h6 v9 L7 f2 y: Y2 J( k# q; F
if(flag==0)& m" j+ S/ V& ?
{" x- s! x' M( T7 _
  inputnum1=keynum;' h9 r" D0 Y5 U5 y0 V
  displaynum=inputnum1;
; s; g/ |- K- O& |& o0 K}
- @# T( }' u; R* {: z if(flag==1)' P+ n1 r1 E9 }! N9 @; \
{5 o! G. W5 [6 K7 ~/ U, R, k
  inputnum2=keynum;
& {% U/ `0 C" `( l/ Z  displaynum=inputnum2;7 R0 }" q# ]* A- E
}: P. j+ e' S, n! p
}7 L8 A! w9 K; w- i- W, q

, h& a; V8 B4 t1 o3 {2 R; T: g1 D3 M" q
if(keynum==10)
9 v: W; Q( @; G* p{
# w# a# b* L2 e% ^. u% g2 r/ fswitch(mathsign)
* b7 I& d! ~& h7 c{  P3 b6 b( f. ~( a3 s2 V4 S" h7 t
  case 12: outputnum=inputnum1+inputnum2;break;) ]7 U1 |3 r* g
  case 13: outputnum=inputnum1-inputnum2;break;
  @1 T, H" K- n; c" I" n* q  case 14: outputnum=inputnum1*inputnum2;break;7 ?; O& A- Q4 f& Z2 A; ^* Z
  case 15: outputnum=inputnum1/inputnum2;break;
: ^1 M7 q2 f* c& D+ }7 N5 c2 s}
2 S6 c/ b, t1 F4 C" _5 P6 pdisplaynum=outputnum;
3 Z/ u* x' i" g4 R}
; X; _' _% r4 _$ e/ R' u, E/ r: o& ?4 `  M1 h) r
$ n6 k0 ~; {  @% R
if(keynum==11)5 ^/ Z; G) d& Q, N; H
{3 K2 L/ x/ e+ k& O
  displaynum=0;4 n- H$ r" Q8 Z
  inputnum1=0;
' k2 T! G* P% w! H' {  inputnum2=0;
6 p& b2 d0 S, _  outputnum=0;& w* W! R1 D  h, s
  flag=0;
$ e  {5 G: T4 ~4 v4 A! K5 T  keynum=16;
9 R- X& W1 b- g  mathsign=0;
8 K' d/ }- a- ^}
8 F/ Q+ t, y( d! Y' d1 Q. x/ e: t; L8 C9 a6 J- Q

% P+ R; Z7 t; f4 w$ K' p' x. x. Gif((keynum>=12)&&(keynum<=15))& R9 v7 X& D# Z# n
{
8 |/ ~4 |9 P+ `8 q7 O. B' ]  flag=1;+ e2 f& }& J, I+ e" K
  mathsign=keynum;
, @5 \) n8 c! Y  displaynum=0; % K! U+ m/ Z4 a1 Y/ q$ J+ k, {" v# }
}6 P/ ~3 x, q! H% t2 r5 F
display();2 ~5 S* A# K( z& j- Y$ \" o
}
9 _3 t0 _! N, M( C}
& y! H, `3 s* R. u6 N1 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-10-8 15:52 , Processed in 0.171875 second(s), 23 queries , Gzip On.

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

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

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