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

使用51单片机进行iic模拟传感器显示为啥显示只有0000000,不会发生数值变化

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
大佬们,使用iic模拟xgzp传感器进行测量气压,但是改了很久还是只能显示0000000,请问哪里出现了问题吗?
9 a8 m4 ], S1 D2 L9 i- |: m1 Z' o
***it SDA = P2^0;
7 o" I2 u  F8 f2 B! y/ Q! i, j***it SCL = P2^1;
3 ]8 r9 i7 Y! f$ z  O; |3 B
# q% B9 p7 k1 h/ E% B2 U' F& f) h$ T3 \9 g- @+ _) H
xdata char i[8];
* M; m" [( ]: K7 o
* J- C' a: R& |: V1 e+ c7 l% |, S* i8 T; t7 U* U$ w  r7 w; r
void I2C_init()        / J3 I+ n1 B/ k4 t" u$ @( ]
{
8 s9 b: L2 n5 f0 i- T        SDA = 1;
& Q1 C0 Q7 y& ^/ ]        _nop_();
9 R' m' c& k  i8 ?7 z, c2 d8 y7 o        SCL = 1;
' v' v) {' D8 \3 `! d        _nop_();3 T9 }1 s- x2 y2 S7 k
}
: |& @, l( U2 M# D' l& R( l
0 n) ~* w  j) x9 L& z% {" n  ?! f9 Q& F2 Q4 a' o" T
static void Start_I2c() //Æô¶¯×ÜÏß
# x5 y& o  G0 W  f, v  W{" V. R  A9 J  g  c$ _8 y
  SDA=1;   //·¢ËÍÆðʼÌõ¼þµÄÊý¾ÝÐźÅ" _6 k8 T; X. T# p- a5 y5 K2 P( b$ z
  _Nop();
* S) H( R; K0 |6 b" J5 E6 l  SCL=1;
+ z! q; V/ {! m  _Nop();    //ÆðʼÌõ¼þ½¨Á¢Ê±¼ä´óÓÚ4.7us,ÑÓʱ
# N3 w/ t+ R4 g, H( l* B1 ~  _Nop();. c  H5 c8 c( h: b
  _Nop();
+ c, T4 w, p, ^/ r6 m+ |& }, G: ^  _Nop();
' w5 K5 M5 }/ t1 @1 g  _Nop();    ' t5 ~1 O0 ]' p* {  Y$ D
  SDA=0;     //·¢ËÍÆðʼÐźÅ
  U) n' \8 p- r/ A: A5 e  _Nop();    //ÆðʼÌõ¼þËø¶¨Ê±¼ä´óÓÚ4¦Ì) b/ }/ e4 C3 h" o1 i, T2 Y% E
  _Nop();
' {, f, ]5 S3 K8 |1 G; ^  _Nop();  ^1 q7 p8 }% z7 n! d# c8 r) \
  _Nop();- d' k5 e0 g" @+ \
  _Nop();       ( w  D6 x2 A1 Y) K9 g: Q" x
  SCL=0;    //ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý
( h6 {# a0 v: a& z7 k  _Nop();9 a1 t5 @. M2 K% j
  _Nop();1 R- N; ]/ e' a% F% ^/ v
}" X  e, l2 ], t( V- V

0 v7 ?4 _& ~& B0 b
1 M6 I' I3 O. e% T2 i/ istatic void Stop_I2c() //½áÊø×ÜÏß
: z5 Y9 r! p4 \8 I{
" Y  B9 M1 E3 B! B9 N9 W  SDA=0;    //·¢ËͽáÊøÌõ¼þµÄÊý¾ÝÐźÅ) j7 D: d! i# U1 A0 j0 S
  _Nop();   //·¢ËͽáÊøÌõ¼þµÄʱÖÓÐźÅ
- v5 z& `4 R; M  SCL=1;    //½áÊøÌõ¼þ½¨Á¢Ê±¼ä´óÓÚ4¦Ì
# U9 w" \8 Z; Z( x/ T  _Nop();, H& G1 A4 r$ u. O8 n
  _Nop();
6 |. O+ {* E- O# K. |# b  _Nop();9 B+ P/ C' b% D$ r- A
  _Nop();
) b: M6 G' r& c0 Z, Y8 y  _Nop();
# y# O  s  U/ N  SDA=1;    //·¢ËÍI2C×ÜÏß½áÊøÐźÅ; ~% s8 v' |$ h0 C4 I
  _Nop();( i- V2 F. b; Q! D, Y3 N
  _Nop();
( V( v0 M2 e8 h  _Nop();
; W9 f0 N  s9 ^  _Nop();
! W* w: R3 P6 E1 I0 F}
- W0 u2 O( b. z( i. ]
: d+ ~% W% ?* {! b+ G- ]6 _- h2 t  k, c5 z6 j% }
static unsigned char I2C_SendByte(unsigned char Byte)        //·¢ËÍÊý¾Ý% f, I4 t7 |$ @! d! @- c5 {
{8 R, y6 M$ |7 j* P2 ^- S/ ~
unsigned char i,I2C_ACK;        
2 [' ?; k5 i" t + U$ a* o0 N/ B( X* r
for(i=0;i<8;i++)  //Òª´«Ë͵ÄÊý¾Ý³¤¶ÈΪ8λ! b+ Q3 q1 k, U3 J& {
    {
) P. T) |' j0 I     if((Byte<, l0 R# u0 b8 ^- e: ]" S! I
       else  SDA=0;                + s$ h5 u# M2 }9 m+ f
     _Nop();
3 x. c0 G" E1 Y2 [     SCL=1;               //ÖÃʱÖÓÏßΪ¸ß£¬Í¨Öª±»¿ØÆ÷¿ªÊ¼½ÓÊÕÊý¾Ýλ) A4 i2 M& a# D1 z
      _Nop();
& E( y# ]4 l9 E, m1 u& f6 n      _Nop();             //±£Ö¤Ê±ÖÓ¸ßµçÆ½ÖÜÆÚ´óÓÚ4¦Ì
6 w, m' i2 @" n      _Nop();
1 y. U' H5 g: k. i5 n( [0 T; T      _Nop();, G2 l2 ?, e' o/ b$ q
      _Nop();         / e4 U" V* y; p1 Y$ M2 X
     SCL=0;
/ J2 r" k; U. v+ |+ e    }
* c; h. D) Y! q/ C% X    ! P6 j% b! V3 O9 x4 R  v. g9 K
    _Nop();9 k* J8 D2 v; ?# R( g$ ^0 A3 p
    _Nop();
; k& b9 n$ |* g    SDA=1;               //8λ·¢ËÍÍêºóÊÍ·ÅÊý¾ÝÏߣ¬×¼±¸½ÓÊÕÓ¦´ðλ) n$ b" p/ `" T% x
    _Nop();
/ X5 d9 w3 h' Y$ B' T    _Nop();   
* c. h/ ^/ p" A0 Y- H5 V: y$ e; R    SCL=1;
) N/ r5 \9 s" _4 Z5 o- C& W    _Nop();: W3 U, `9 i$ G+ B8 k
    _Nop();0 R1 P+ |" k" y
    _Nop();3 y5 ]1 t: Y) `$ \
    if(SDA==1)' k6 Y. @6 i" Z- P, R* F2 I& [
                        I2C_ACK=0;     # z6 o  E: t; `6 X2 \
       else 1 X0 ^. @+ {4 n9 V3 ^
                        I2C_ACK=1;        //ÅжÏÊÇ·ñ½ÓÊÕµ½Ó¦´ðÐźÅ
3 J& f0 }1 S' `' v' D% E2 H: B# b- `    SCL=0;
% j  s$ g7 ]5 c* z- L; y    _Nop();
3 \6 I: n- z: ~5 u7 _: i    _Nop();( t$ L  Y2 K/ F( t
                return I2C_ACK;
7 h9 ^5 v/ F/ _( A}) p" {% t) ]" }% s; I! J

7 |# ^4 ]# M# @# Z9 ]" R3 c- B
4 Z) f6 Z0 t" N2 [static unsigned char  I2C_RcvByte()                //¶ÁÈ¡Êý¾Ý/ U  @# L; P% s
{% L$ U$ i  B3 P! r. ]
  unsigned char retc;
  C, |/ }/ p% G; [- J/ \5 }* S  unsigned char i;( S) w' N) T9 r! Z; {! ^
  
( W2 D# d7 {7 N5 K- Y5 M' q% j  retc=0;
& @8 r6 X$ m' ~- _9 k  SDA=1;             //ÖÃÊý¾ÝÏßΪÊäÈ뷽ʽ1 _8 f$ W0 V( _( r
  for(i=0;i<8;i++)  \% q7 w  g3 R+ j; J' D- p3 {, A
      {& A6 w9 N. |8 ?: S9 B
        _Nop();           
% z  p9 `4 s3 x# i. O4 u        SCL=0;       //ÖÃʱÖÓÏßΪµÍ£¬×¼±¸½ÓÊÕÊý¾Ýλ
: Y" |" N; z  ~  B6 [6 }' t- I        _Nop();2 b$ K; P8 v0 s" j1 R
        _Nop();      //ʱÖÓµÍµçÆ½ÖÜÆÚ´óÓÚ4.7us& z; `$ D9 |+ ]& M  A
        _Nop();
- W0 G( w0 `; W7 |0 O; k$ {9 Z        _Nop();
+ ]8 {8 g' H/ S! l' d        _Nop();
7 U- l4 |: M( |# O9 z        SCL=1;       //ÖÃʱÖÓÏßΪ¸ßʹÊý¾ÝÏßÉÏÊý¾ÝÓÐЧ
4 ~/ \2 D7 j/ e$ E0 N+ P; {        _Nop();
4 U2 K/ Y0 w, s/ F        _Nop();
+ L% v% t& M* k2 p2 z        retc=retc<<1;3 F8 I: l+ k& p; a
        if(SDA==1)retc=retc+1; //¶ÁÊý¾Ýλ,½ÓÊÕµÄÊý¾Ýλ·ÅÈëretcÖÐ* k7 n" X' t3 c/ g7 N0 `
        _Nop();) J6 M$ y' |8 I$ R* N% M7 _5 @
        _Nop();
( \+ p" u& A1 @+ z8 b      }
5 ]# G5 r1 V* \  SCL=0;   
7 ~/ z8 r# j( M5 I/ p  _Nop();3 H' b1 w4 e, @; O) b% P# l6 l4 l
  _Nop();/ B$ x& H1 e9 j( o* s
  return(retc);
% J0 P& D3 ^+ e2 J* m( d}
) N1 D3 L# }5 h8 {% ~; ]/ @& _% R! Y0 v+ `$ ^8 t1 [. B9 ]1 h: H
+ F: f+ W  c: Q, }
static void Ack_I2c(void) //Ó¦´ð×Óº¯Êý
% k' S6 Q+ @3 h7 w{0 p' V9 e/ l2 C% y3 C8 D6 T1 n+ Q
  SCL=0;: I' N% W1 M" E
  SDA=0;     % n% F- R+ |6 N9 G9 n, N
  _Nop();9 S& \- [; c* H& |( l
  _Nop();7 L% C! S7 q+ b" x
  _Nop();      4 Q& n9 l+ s( m3 h
  SCL=1;
/ f% S$ a  v0 @1 y* a9 j  _Nop();  V! ^- |7 b/ G8 f. d# D- Y
  _Nop();              //ʱÖÓµÍµçÆ½ÖÜÆÚ´óÓÚ4¦Ì6 ^! C0 v9 [, [
  _Nop();
+ `$ }0 ]  W6 @1 C* A2 H  _Nop();0 ]7 Z4 r( Q; l* O8 J2 ?. T# w5 \
  _Nop();  & X! D' R* ?; `- K" ], D, f
  SCL=0;               //ÇåʱÖÓÏߣ¬Ç¯×¡I2C×ÜÏßÒÔ±ã¼ÌÐø½ÓÊÕ
, A" Q, a3 y- Y# C  ~( w) x2 D* X  _Nop();
" I0 v" h" m5 i+ \  _Nop();   
1 U% C8 e7 M: N2 _}3 h8 |5 r) Q6 R8 {- z8 c
% i$ A" D+ M; H" i
2 E, M. {8 c6 _6 Z* @$ G
static void NoAck_I2c(void)          //·ÇÓ¦´ð×Óº¯Êý$ B  I# _+ e) v. ^& B; X% o! H
{6 b5 g- G* ?- U7 _1 b6 b: U- I' A
  SCL=0;
/ G. O6 d2 I. C, `4 f  SDA=1;! F+ I% \# U! C
  _Nop();- D7 {1 j8 ?2 D" w! h1 g
  _Nop();2 y' A- r1 s6 r8 A. \9 Z& T( Q
  _Nop();      
7 g: `0 ]1 o2 B  {  i  SCL=1;
0 M& \* f5 m+ ]! ~' s  _Nop();/ K( W( Q9 D' ?. L" |$ l; f6 o
  _Nop();              //ʱÖÓµÍµçÆ½ÖÜÆÚ´óÓÚ4¦Ì. g: T& Z1 f# Z* T
  _Nop();
9 x6 i( T4 `+ F* `7 h+ v  _Nop();
  M8 h$ c  y/ W1 k! Z% b  _Nop();  8 g. E" r: `: o. K, Z
  SCL=0;                //ÇåʱÖÓÏߣ¬Ç¯×¡I2C×ÜÏßÒÔ±ã¼ÌÐø½ÓÊÕ* M' u/ F, }7 G5 K6 e; d
  _Nop();7 M9 W+ y& A2 `/ M* @1 ~. Z' |
  _Nop();   
* q6 ^# d" ?. }% U! K}2 \+ r/ h8 i4 F0 S! s, B8 d

  u0 t5 I2 V. z
5 `# B" ^: d% c5 P) ^static void I2C_SendByteLen(unsigned char addr, unsigned char thedata)7 M! G( P" K/ J1 j& T
{
( j/ J2 E% }) E4 D- U" G0 T% M5 a        Start_I2c();
3 F' _- d; b& N3 l  k" {        I2C_SendByte(0xda);" U  G1 c' g% Z- x# v5 c
        Ack_I2c();        7 ]2 h: t4 D2 l
        I2C_SendByte(addr);( G& S/ C' Q8 L- T' R4 f8 o6 q
        Ack_I2c();        5 P* o$ e* J1 _$ p' F6 x6 G
        I2C_SendByte(thedata);0 M0 \) A$ ]; N4 e
        Ack_I2c();        $ p7 w3 W, N& A2 v( X
        Stop_I2c();
6 r6 W( |5 {) ^; V}7 z! Y0 m8 c# {! t0 f

3 P( R+ u8 }' H5 b
( B. C6 A4 Q3 |unsigned char Read_One_Byte(unsigned char addr)
! b+ L5 U7 R4 _& z1 W, Z{
* L  t' p! G( F& y. H2 p         char mydata;  I4 ^) E5 B+ r6 N" Q% G) \" |5 ~
         Start_I2c();
1 V8 b; U. C2 t3 v% W( J9 c         I2C_SendByte(0xda);
8 L. M9 w) F8 H9 f7 a6 e         Ack_I2c();        
4 m6 [# F- B& G         I2C_SendByte(addr);
0 }" j! {' f1 l9 q0 q) S         Ack_I2c();        7 _6 L- _0 j, O" S
         Start_I2c(); 1 ~3 z- E2 }* P  H9 l  k" x
         I2C_SendByte(0xdb);
& R0 m6 `* ^' P, r3 V         Ack_I2c();        # k2 M3 u& }+ Z! D$ c" D8 `2 ?
         mydata = I2C_RcvByte();. T) R- F+ H, ?& P" n: y  W* t
         Stop_I2c();
  ]; C& |5 f1 D$ |% ~; A" \" d         return mydata;
, [4 w/ H: H  I) N+ m9 T; m$ @}0 Z% I' }% I7 {) a; U" ^3 ~
void Get_XGZPC_Value(float *XGZPC_Date)# [; ~! s1 A+ t$ r: N2 ^
{
# J. h: e8 I$ B: V9 b   char yali1, yali2, yali3;
$ e  q1 q5 z7 m$ j3 G) p/ ?         char temp_a5;2 C$ H9 G( R: W* w+ O/ G, k
         long int ad;" b/ r4 ?3 R4 K4 g  H2 o( w  t
         long float XGZPC_Value;2 W0 M! x; Y6 @/ O- ^4 t5 b
4 G; f) D. J* v  K  {1 h2 p
         temp_a5 = Read_One_Byte(0xA5);8 n5 c) G  p4 B$ r3 M
         temp_a5 = temp_a5 & 0xFD;
7 T# J: z7 J) L: ~) B% u         I2C_SendByteLen(0xA5, temp_a5); ; d0 ]2 T/ K) o# K
         I2C_SendByteLen(0x30, 0x0A);
8 L* ?8 X/ V# |% V7 R9 ?0 Q$ U         delay_ms(10);
9 p5 x+ u, e3 p0 v         while ((Read_One_Byte(0x30) & 0x08) > 0);
  Y4 u) C, Y) M3 E4 a         delay_ms(10);
) l# y4 q( s5 E9 n$ _4 _9 W8 D% v9 A         yali1 = Read_One_Byte(0x06);
+ ?5 `7 d! {* t& Y, z+ F  n. {* I         yali2 = Read_One_Byte(0x07);
6 _- y, L. B# k# H" z3 ~+ ]2 I' {         yali3 = Read_One_Byte(0x08); $ Y, G) h- |/ |+ F
         ad = yali1 * 65536 + yali2 * 256 + yali3;/ r$ P# A0 X, b! c9 h
               
2 j9 k+ G/ s6 C  V2 J- n                if(ad > 8388608)# p5 }0 C& m9 f8 ?7 B6 |
                {
0 q+ k: k3 P2 P/ o! ~                        XGZPC_Value = (ad - 16777216) / 8388608 * 8.192;
& B2 b+ ^' t6 `1 N# A1 o                }
! V8 \2 ^9 E" A3 y                else, }- ^4 k/ X% N8 Z$ M+ u& m
                {
" @' ]: s6 ^- `5 L' T( A0 I                        XGZPC_Value = ad / 8388608 * 8.192;: A* x4 e5 F  }( R) ^5 ?! Y6 j
                }
) w* V3 H, t6 Y( v& t6 m/ X" u                                i[0]=(long int)XGZPC_Value / 10000000;) c  ?5 x* L2 D1 X
                                i[1]=(long int)XGZPC_Value % 10000000 / 1000000;
5 y) M9 r1 T; ?, y: v" E7 f                                i[2]=(long int)XGZPC_Value % 1000000 / 100000;
8 n! s6 S! |/ u! L# ^. N                                i[3]=(long int)XGZPC_Value % 100000 / 10000;* g3 y9 p& p8 ^$ Q4 e8 {6 j5 z4 ]$ j
                                i[4]=(long int)XGZPC_Value % 10000 / 1000;  G5 h, ]5 g+ m- Z# d6 w
                                i[5]=(long int)XGZPC_Value % 1000 / 100;1 i/ S2 W/ e. B3 G
                                i[6]=(long int)XGZPC_Value % 100 / 10;
; k) n3 u* u5 r                                i[7]=(long int)XGZPC_Value % 10;
+ L/ G3 ?* B! F; ~7 W
4 e0 {- }" Q3 Y% N                                Lcd1602_WriteCom(0x80+0x40);
8 d7 Z5 x% J$ x5 X& U* J                                Lcd1602_WriteData(i[0]+0x30);
) ]! h2 Q. j& B7 k" @2 M+ l& s
" Q' C2 o2 t/ K                                Lcd1602_WriteCom(0x80+0x41);5 K0 m0 c' j1 D2 x1 W/ B
                                Lcd1602_WriteData(i[1]+0x30);# ?9 X$ O4 a7 J' ~% ^, k

; Q6 _" B: Z) T                                Lcd1602_WriteCom(0x80+0x42);
# k5 X+ E. o; v. z1 [  y- ?                                Lcd1602_WriteData(i[2]+0x30);
, `6 P1 l3 Y# m  w6 h  D1 E( X, d/ ~: S
                                Lcd1602_WriteCom(0x80+0x43);
% A! o7 s8 c  N! }* q                                Lcd1602_WriteData(i[3]+0x30);2 t, G1 @# b6 Y. w
' e' h: S* Z) p7 n) [- F) K7 @
                                Lcd1602_WriteCom(0x80+0x44);. e6 r$ H* D* g
                                Lcd1602_WriteData(i[4]+0x30);) m8 D7 M2 ^5 G' d) M
6 g% f( P" I( N5 \5 |; ]
                                Lcd1602_WriteCom(0x80+0x45);
5 ]& J! A9 F! O- c% N                                Lcd1602_WriteData(i[5]+0x30);
  n8 x/ k6 t" H3 s6 `+ H  L1 z# b3 Q7 n; V# [7 x- z
                                Lcd1602_WriteCom(0x80+0x46);4 u) O5 Q4 Y/ o3 o
                                Lcd1602_WriteData(i[6]+0x30);
4 P- S0 O% Y7 ~+ U+ Y  {) ]8 m, q! e+ M" v
                                Lcd1602_WriteCom(0x80+0x47);% X! ?. ^# j6 H2 N9 U
                                Lcd1602_WriteData(i[7]+0x30);: C2 v+ x% C8 A9 i
                                *XGZPC_Date = XGZPC_Value;6 @8 M5 |( n; T) k5 p

; ]1 z- F, p( E. j}% F" I6 W% f6 e  w' D# H
void main()
; u. @& y# m/ S7 g{
9 {1 S; A8 ?, ~+ m" ~        unsigned char DisplayBuff[20];
7 s  e( A$ Z+ e& S7 _% O" I4 b        float XGZPC_Date= 0;
' ^* z2 W. H/ e4 A, G; f3 `' X( ]7 R& k$ O" F
+ r3 x" i8 |9 S/ |! R
        Lcd1602_init();
# `6 `9 h$ r4 Y9 S! ]        I2C_init();
/ [" u* U: T1 c) n3 o: x& ~
) g" C* I) o0 |
( {7 b) P' @( d. R0 _: x
, X( S9 }$ u" P" O* Y1 S; w# b: \) d4 f1 R( Q1 C  \- Q7 [& B( d
        LCD_Write_String(0,0,"ZPC:         KPa");8 t% g$ h% |3 @2 P

2 |4 ~* U2 \3 }4 E( H3 |- ?
0 u* P* [4 P1 t& i: z" z7 S# o        while(1)9 X! g1 [' _% V
        {' Q  o0 v* ~' e0 ^4 c2 F
                 Get_XGZPC_Value(&XGZPC_Date);
$ ~* i, `1 z" q3 ]3 U" f                  sprintf(DisplayBuff,"%6.2f",XGZPC_Date);
* t+ x8 L5 q6 r7 @$ p7 Q! ]                  LCD_Write_String(5,0,DisplayBuff);
, Q' p$ L# @0 Y+ l, \        }" I6 _4 u5 E7 U0 V$ @; i/ V$ z1 {

- _% f1 t. J; |' E2 N2 P5 P
" S' x6 P% b% {}3 l  E5 F1 c* e1 {$ R, G

$ ]% f! f8 r; A; Z, [( r' |
( o: w" l, ^$ E: ?9 ^6 Y# z: q2 m" q***it RS=P2^6;  
% A) g' r; t( i4 q  J5 O# V***it RW=P2^5;  ) T2 S. V& p, P/ l3 `6 P; j+ H7 h; o
***it E=P2^7;7 a) h  a* x- D: [

" {9 G; P. U6 a& I6 f' c0 V7 ~; l) F9 G/ z8 j1 d
unsigned char text1[]="0";   //µÚÒ»ÐÐÒªÏÔʾµÄ×Ö·û
  G  E: l% Y; A( a" iunsigned char text2[]="0";   //µÚ¶þÐÐÒªÏÔʾµÄ×Ö·û
% g( p' Y7 U  N' i/ P# i. ^* Y( B
+ d5 o3 v/ N9 H% o- M
- ?* X/ p+ s) F' }0 Lvoid delay_ms(unsigned int z)  //ºÁÃë¼¶ÑÓʱº¯Êý
) n! }; w0 q% Y* d; ~{
7 \7 e! f/ J/ t5 g0 i9 Z3 u2 B, i        unsigned int i,j;
( d9 C$ E! Y$ f$ z* c/ X        for(i=z;i>0;i--)
2 V- g9 u' Q2 w9 r                for(j=110;j>0;j--);
; f: l$ w3 t. W* t8 P2 O}* X* ^# f# O# H
2 q! k% m, Q2 t
# V$ [/ B/ i9 w" x- j4 h$ t
unsigned char Lcd1602_ReadBusy()   //ÅжÏlcd1602ÊÇ·ñ´¦ÓÚæµÄ״̬£¬¼´¶Áæ
6 ^+ N7 X- q! W% q8 M7 N  X$ }{  L8 `- u: f' I; g5 O+ T
        unsigned char temp;0 O& Z1 f* A$ i- O
        RS=0;" w' c' I% m% f% ~, h" G0 S
        RW=1;
7 M6 h' x/ W% }: i+ c% i        _nop_();$ n& I3 V; t+ {" \
        P0=0xff;            
8 Q0 u" H+ Y, y; e# G        
; Z. S( h2 q: ]; l: P5 V        _nop_();
; S5 }* ?+ V0 ]# k+ k        E=1;1 `: x7 W2 f0 i2 V. T& V+ P
        _nop_();: \3 S6 i* ?7 B
        temp=P0;   
/ p, e7 T4 i" j0 y. E9 Z9 G        _nop_();3 b7 T$ b9 v# Y( S
        E=0;
( R1 d, u7 o; p9 A8 i        return (temp&0x80);  
' K) C6 n" Z  i$ A
7 ^2 \/ O/ A$ u2 `/ J8 a! L) Y9 b1 ]# ~+ n# Q4 e4 m" K
}0 T  ~5 k0 ], m- i- e

* p4 s" j9 k0 F1 R, j1 B9 @  ?/ M# Q1 e( N
void Lcd1602_WriteCom(unsigned char com)  //дÃüÁî  y& @! n1 S3 R0 v& ]; f
{2 K/ n( S8 }% o
        while(Lcd1602_ReadBusy());  //ÅÐæ
5 }. @; J2 k3 o0 J  t2 {        RS=0;  
) T6 `( }: ?- R2 \6 P        RW=0;  * Z  V+ j1 i# [) w) m3 V+ ]$ ^
        _nop_();
$ q7 f4 F+ v* }- A0 U9 D# }         P0=com;   //×¼±¸·¢ËÍÃüÁî
: b, Z" \0 F/ H' E8 d6 X5 X        _nop_();% k) {; F$ Q$ f  I. O( j
        E=1;     ; W+ N5 g2 K% k( c% l. l
        _nop_();; T) t& s8 E/ d4 D" U/ m6 j
        _nop_();/ U$ z# f5 j% I& s
        E=0;     $ Y6 C" e; d6 b' Q* t
        _nop_();
6 b. ?$ ~  B( _* G" i4 W* B% q        _nop_();   
3 N' O6 L) o1 d}
( d" u7 C7 b6 }" Y/ R" |' W2 E% U6 h8 z4 T
8 |/ \$ ]$ l2 e0 b: N
void Lcd1602_WriteData(unsigned char dat)  //дÊý¾Ý
# \6 }: C/ F3 e4 ?4 c7 K; c$ Q2 m$ X{% D. t- |4 x+ t- H) _+ b
        while(Lcd1602_ReadBusy());   //ÅÐæ
) v: x/ Z6 }9 C. Y- Z        RS=1;   //Êý¾Ý; Q6 M  {' @) p: T$ z
        RW=0;   //д
/ i, G0 e- |! a        _nop_();& k! G$ a# ~4 q- m0 e
        P0=dat;& x8 e9 c& \5 D4 [% H& J3 p+ P) `
        _nop_();# |' k6 }5 R4 D; M
        E=1;( y& U$ _4 [' O9 \) [! b
        _nop_();
% }; L2 I* `9 r        _nop_();
' B! V: v! e# K4 B        E=0;
$ F# u: ?1 a# G4 w1 J# Z# U; Z        _nop_();
. _: O3 B( I1 `  v; ^        _nop_();   / _/ j" y( t" G9 B  F, p7 N
}" j( R/ c( Z# ~/ |& R1 [/ W, y9 s
! Y: K+ G/ g0 p# t8 D
: t' k& p8 V0 o/ ]# a. L4 u; }
void Lcd1602_init()   //³õʼ»¯º¯Êý1 P0 k; ]3 V+ k3 t
{6 B4 a+ i" J- p* W7 A5 B: K2 B
        delay_ms(15);
: z0 b$ B- X5 t        Lcd1602_WriteCom(0x38);   //ÏÔʾģʽÉèÖÃ4 C7 G- @4 L& K3 X4 V% O) M1 K5 r
        delay_ms(5);) [' x3 t  {- Y( K! U" [6 J- E
        Lcd1602_WriteCom(0x38);
, @+ ?& _. A, t# a        delay_ms(5);
' J: x8 r3 I3 p" ]" l" o" ~0 e/ q        Lcd1602_WriteCom(0x38);
2 ^+ ]2 _0 v4 G8 e3 W2 j        Lcd1602_WriteCom(0x0c);  //ÏÔʾ¿ª
, U  L- p* y" P2 D( ~# m) h9 U        Lcd1602_WriteCom(0x01);  //ÏÔʾÇåÆÁ
) J( b' r% ~/ s1 A4 G. g% ]- Y        Lcd1602_WriteCom(0x06);  //ÏÔʾ¹â±ê
0 d6 w* J9 s2 E- F- @& z6 s}; q- ~' Y' n) w1 V4 `7 p, t
' w$ x1 S& V. u; c8 E: I! K; f

5 h; N) j) L- A+ cvoid LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
  V6 J9 }' J5 `3 `! {; \{    3 I* x: |2 F, Q1 b
         if (y == 0)
. B) b6 d* g: C3 D6 i" D/ ?5 a                 {     
/ O4 N5 W, r6 U                 Lcd1602_WriteCom(0x80 + x);     //±íʾµÚÒ»ÐÐ4 N% q# @9 A6 x% ~4 I9 b# Q- r; W& U
                 }7 b* Q. n' H5 {
         else ' R/ \! F+ s% C6 Y0 E
                 {        [/ `/ V4 D" p. j! d9 |
                 Lcd1602_WriteCom(0xC0 + x);      //±íʾµÚ¶þÐÐ
- R2 L1 h8 @- b9 P: \. L$ P1 T! ]                 }        
4 _, m" n3 Y7 c" B         while (*s!= '\0') ! o) s$ V! s8 c3 U) k) D8 j( `
                 {     & h$ @6 ~* R2 M! P: C. i  n
                 Lcd1602_WriteData( *s++);         
6 J; d$ l+ W/ M                 }
  Z- [; a: i" q6 }}1 s0 F9 m3 d; L& y

该用户从未签到

2#
发表于 2022-12-15 11:13 | 只看该作者
调试方法,先保证液晶显示正常,后调试IIC是否正常

该用户从未签到

3#
发表于 2022-12-15 13:15 | 只看该作者
液晶显示在Get_XGZPC_Value中调试过,一个操作下来显示一个字符,应该没啥问题。

该用户从未签到

4#
发表于 2022-12-15 13:54 | 只看该作者
地面上气压不可能为0的。修改一下iic地址,读取出系统配置值。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-20 15:45 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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