找回密码
 注册
查看: 272|回复: 3
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
大佬们,使用iic模拟xgzp传感器进行测量气压,但是改了很久还是只能显示0000000,请问哪里出现了问题吗?3 c+ s  Q+ U( Z, \: ~) @

; A+ J/ ]) H+ p4 J0 q% M; P: _***it SDA = P2^0;) n1 c) ^- @; V
***it SCL = P2^1;
& B: u+ t3 z: E
& g' I  Z0 c! x: g0 D, H/ B& f# x. T- B! k
xdata char i[8];$ `2 H! q+ E6 K, E- y, g

: P% L$ K% a: ~
& A; i( R3 p; G9 Evoid I2C_init()        & \+ }) k/ J& n0 H" K
{: `- _* K# W& S) L7 C
        SDA = 1;
7 D) @8 K0 ]- H5 K) \        _nop_();7 [, V7 G* s. W
        SCL = 1;0 `4 b  V& i/ N
        _nop_();
& M& i6 O9 ?+ _8 O; u" \' p* H}
$ q$ F/ N6 A; p* e  T9 L0 o. e3 i
- e* h( C- t2 x8 d" P$ h) g, R3 Y% P: m" [5 t+ T' ?
static void Start_I2c() //Æô¶¯×ÜÏß0 L1 h! ]( c. G  U  m
{
3 X7 n( j; g. s  I+ ^) g3 `  SDA=1;   //·¢ËÍÆðʼÌõ¼þµÄÊý¾ÝÐźÅ
1 g5 m" f& r& k+ S- F  _Nop();
1 T. J+ [5 M7 Q( x' e2 T( H7 A  SCL=1;. E( f0 S5 d) v% A
  _Nop();    //ÆðʼÌõ¼þ½¨Á¢Ê±¼ä´óÓÚ4.7us,ÑÓʱ
3 \3 v7 G0 k4 }  _Nop();
9 H5 }0 V4 a% ?4 h6 ]  ]  _Nop();! i/ ]; A) x$ `) e5 f8 K! n
  _Nop();
5 s; c9 j# J, h, |. @% R  _Nop();   
+ d" ^$ \% S" c* f- ]0 q  SDA=0;     //·¢ËÍÆðʼÐźÅ
! U' W6 _7 K# \6 \. N, Y' o' h  _Nop();    //ÆðʼÌõ¼þËø¶¨Ê±¼ä´óÓÚ4¦Ì
* l- U1 J! `6 t# z, P, u  _Nop();) v+ o# v6 q# x0 s! l
  _Nop();2 |  R% Y; d/ h* @8 g, [5 w+ R' M
  _Nop();  }) Q* f# T& e8 e  E; x, _/ Z
  _Nop();      
) b5 V$ a4 B! c+ x' x! ~: S) s  SCL=0;    //ǯסI2C×ÜÏߣ¬×¼±¸·¢ËÍ»ò½ÓÊÕÊý¾Ý$ B/ O7 K: w0 X7 E
  _Nop();
1 |6 V# R  C/ V; g  L3 b1 s* R  _Nop();
: }  x3 N( L' `5 F4 h}/ r7 }8 C. l+ w9 b( y6 f( B+ X
: T0 ~( ^9 N$ M3 z

5 u2 O7 r, h" rstatic void Stop_I2c() //½áÊø×ÜÏß- [1 |7 x/ a& f. c. c1 k
{: q' Z- i( B" d: K) u
  SDA=0;    //·¢ËͽáÊøÌõ¼þµÄÊý¾ÝÐźÅ
' s0 P1 V- J; K. g  _Nop();   //·¢ËͽáÊøÌõ¼þµÄʱÖÓÐźÅ
- e( s  z6 Q- b$ o" y  SCL=1;    //½áÊøÌõ¼þ½¨Á¢Ê±¼ä´óÓÚ4¦Ì' B% }" J7 O+ m$ S+ A2 o# k0 ~
  _Nop();
0 m; A8 z  h- r2 d( t$ U  _Nop();& E" w7 ?: a5 d2 [
  _Nop();
# \  d: D# A9 `2 p  y1 U+ g( T. R  _Nop();# G7 w% b0 {, `' u' p2 m' n( @
  _Nop();
$ i. M, O+ H$ ~4 `$ y( D& K( m5 a  SDA=1;    //·¢ËÍI2C×ÜÏß½áÊøÐźÅ! r, W0 s9 b9 {
  _Nop();! m) W) A+ P; a* Z4 o/ A
  _Nop();
0 _( i! j1 ?& Z. M; K  _Nop();/ ?) u; D- j" q4 \0 R
  _Nop();7 W& v/ `( J. j& h
}
4 r- v( u2 N6 S6 C' i$ e* N& f, a2 H% G( ~0 r9 Y
6 p/ A( F. k( ]9 q
static unsigned char I2C_SendByte(unsigned char Byte)        //·¢ËÍÊý¾Ý2 O0 B1 x/ X4 r; o+ t/ A
{4 x+ f, a% Z% j5 g( G- ^8 v
unsigned char i,I2C_ACK;        ; S1 I$ b8 U5 b( ]: P$ o
1 \  ~7 l1 y8 w0 U; o3 {
for(i=0;i<8;i++)  //Òª´«Ë͵ÄÊý¾Ý³¤¶ÈΪ8λ+ N. @3 I/ \5 ]  a. U' F! e3 J. K
    {
% [3 Q3 O) T% ]8 Z% M2 |     if((Byte<9 o4 k' r4 D, S! ^1 j6 M
       else  SDA=0;               
# V7 v5 r# k/ E" T; ^, Q5 m     _Nop();
* \8 j5 L; e  ?8 C. U+ _* ?& ]     SCL=1;               //ÖÃʱÖÓÏßΪ¸ß£¬Í¨Öª±»¿ØÆ÷¿ªÊ¼½ÓÊÕÊý¾Ýλ
1 Y+ z2 \. r' c      _Nop();
- {, b$ t% W1 o1 u# I) }- m' j      _Nop();             //±£Ö¤Ê±ÖÓ¸ßµçÆ½ÖÜÆÚ´óÓÚ4¦Ì+ j) n! ]1 \2 G6 [
      _Nop();7 R& j/ g4 H1 K. Q* Z7 D2 P
      _Nop();, S% {$ _( M* ~4 k4 F4 I& X! f
      _Nop();         
2 y& h6 q; Z7 {1 s     SCL=0;
9 `/ s' X5 v1 ?    }. Q6 L& m, R! _- ]+ h
   
" o( q/ K3 ^# \0 g6 V6 Z" J    _Nop();
6 m! k; ^; y/ R0 K4 ^    _Nop();
, G8 T+ l$ w. H    SDA=1;               //8λ·¢ËÍÍêºóÊÍ·ÅÊý¾ÝÏߣ¬×¼±¸½ÓÊÕÓ¦´ðλ
0 l) Q2 c+ f, U5 q9 q4 j6 Z1 x# A; X    _Nop();
( {5 K% e+ H' S6 }( E    _Nop();   & d7 s0 S# e# _/ x& i
    SCL=1;
; v$ c  q& {2 C  B    _Nop();
* A" v1 v! x% o& q, v7 _2 M0 a3 T    _Nop();/ g: E# a" c+ q. x3 d4 f3 N
    _Nop();
& i) x0 A8 P1 A' c    if(SDA==1)
9 o9 y: G% Z$ j5 J; a                        I2C_ACK=0;     
5 }( n8 z" x+ j! a: _/ z3 S+ b: k5 Q       else   h7 g/ i* \3 e. S5 g; J0 [
                        I2C_ACK=1;        //ÅжÏÊÇ·ñ½ÓÊÕµ½Ó¦´ðÐźŠ M% w8 M# v( I! ?6 K
    SCL=0;
) h/ P2 [; n9 |0 N9 t9 R! o    _Nop();
+ \$ Q! {: X1 _2 x0 D    _Nop();0 C, I& d5 z3 W8 w. ?9 C
                return I2C_ACK;, E9 J& ?9 ^, V
}
7 a) `7 y) @- _3 z1 Z' K" D- M  r' H( M. M* H/ Y+ T; M0 h
4 m# |5 b% N' g, y7 p2 W
static unsigned char  I2C_RcvByte()                //¶ÁÈ¡Êý¾Ý
" b# N7 [4 O& G! I" @! R: W{( b6 X. X1 @) H' A
  unsigned char retc;9 g& E# C. I6 {; ?* p
  unsigned char i;* t9 I1 O) I+ _! S( C4 {
  
$ H' H4 C- w8 L, B3 _+ }0 X* Y  retc=0;
2 K& f! D4 U: h& ^  SDA=1;             //ÖÃÊý¾ÝÏßΪÊäÈ뷽ʽ, M  l* @5 L- \# o+ k' a
  for(i=0;i<8;i++)* R! ^4 s! f+ [; e+ z
      {
; M+ H& c$ `+ ]& c# \4 ^. F9 d        _Nop();           - ]+ o7 M2 L' B5 |# V" U
        SCL=0;       //ÖÃʱÖÓÏßΪµÍ£¬×¼±¸½ÓÊÕÊý¾Ýλ( a3 |. U8 A) T' ]! H
        _Nop();
/ z( x" I3 C  s9 i9 o        _Nop();      //ʱÖÓµÍµçÆ½ÖÜÆÚ´óÓÚ4.7us
& q1 z" ~* _& |+ K, b, B* e        _Nop();
; h* V8 R! {! H! A  n" b        _Nop();4 V0 h/ K* Y) {
        _Nop();7 d/ }2 x  o9 r: g
        SCL=1;       //ÖÃʱÖÓÏßΪ¸ßʹÊý¾ÝÏßÉÏÊý¾ÝÓÐЧ% |) T* \. e7 g$ s2 n; r
        _Nop();9 C( b$ I+ R1 T1 I# r" s/ W
        _Nop();
1 v" l0 j- H. T+ t' {1 }& v" K        retc=retc<<1;! K' r9 l+ R3 ]8 ~( L+ M* E& h  r( X
        if(SDA==1)retc=retc+1; //¶ÁÊý¾Ýλ,½ÓÊÕµÄÊý¾Ýλ·ÅÈëretcÖÐ5 }% S7 D, C% Y0 p7 y( ~
        _Nop();
* H1 d! F  Q6 C' l* m        _Nop();
- e' Q& U4 D2 w3 d2 u5 D      }/ h% N2 p0 G8 Z9 k/ Q( L( Q
  SCL=0;   
$ s7 O# r, ?, e  _Nop();
, A" B% I6 m- x! q2 F  _Nop();) c- x$ z7 d) H2 a* Q
  return(retc);& ~  \( r1 W" n  j
}
) H$ e/ Z" R  C. s% H8 w" R
8 \& }; R( i" z; t3 [, c  k  U* c+ o- L" T! n8 g
static void Ack_I2c(void) //Ó¦´ð×Óº¯Êý# }/ j5 E, v3 y/ U
{
8 q! p/ E: U- S0 O1 F  SCL=0;
6 J8 C: a: ~8 ^) I6 k) V3 O: U2 A  SDA=0;     1 ^0 C3 ^- k+ b- k/ o
  _Nop();) @( p5 R2 \" K" w
  _Nop();# L+ u- k' w4 B& h7 |  G
  _Nop();      
0 |# }& n0 }+ F  SCL=1;/ {+ C! s3 q/ G) ]
  _Nop();( p& E7 b( R8 ]% ]6 l7 D) O
  _Nop();              //ʱÖÓµÍµçÆ½ÖÜÆÚ´óÓÚ4¦Ì* X$ x! d8 w! E+ `! ^
  _Nop();
: w+ t+ M% H5 X# R6 n9 w  _Nop();9 A$ b' o7 H) H% H* r; @) z% H' h- B
  _Nop();  3 S6 @( _) Y7 _3 j
  SCL=0;               //ÇåʱÖÓÏߣ¬Ç¯×¡I2C×ÜÏßÒÔ±ã¼ÌÐø½ÓÊÕ0 J9 ^# I9 X1 Y' J5 Z. A$ M6 g
  _Nop();! \7 |) m; s  n; {2 \
  _Nop();    % N3 H+ M$ _! f) z7 K& g( a  V7 {8 N
}- [& P4 S3 g2 s
8 d8 |" f# n# }

; ?% T' j9 H- t6 R* K2 F5 Wstatic void NoAck_I2c(void)          //·ÇÓ¦´ð×Óº¯Êý
/ m8 z9 ?: N; l5 S{
3 q/ g1 w8 J5 ~9 L0 V: W  SCL=0;" R8 u/ B+ g0 D7 k# u
  SDA=1;
* }/ w, X$ {7 H' V  _Nop();
# \7 R. O6 o* }/ X) `  ^8 D6 J  _Nop();
/ F/ e/ F* {" }0 o: L& i  _Nop();      0 R# Y4 w+ i; f  B4 A' m# y# f
  SCL=1;
- a* L& o+ o1 p1 }  _Nop();- a* V4 l! S3 p) f; q: f+ L, i
  _Nop();              //ʱÖÓµÍµçÆ½ÖÜÆÚ´óÓÚ4¦Ì
( P3 t% u; g3 S& d/ E0 f  _Nop();
. s+ y- K# [: R. L  _Nop();" K( _$ |; O) a6 v$ c
  _Nop();  
0 E5 m3 M8 l( j4 ~- V  SCL=0;                //ÇåʱÖÓÏߣ¬Ç¯×¡I2C×ÜÏßÒÔ±ã¼ÌÐø½ÓÊÕ0 }) g& K6 Y& v7 L0 l1 p
  _Nop();& C3 K4 t* o7 E( R
  _Nop();   
1 o# M1 L/ S; A" s4 C}
+ |- Z/ G% v  R+ h: s! o( u3 f
" m8 i) \2 Q/ C& s1 e: A: V, Q" j% M4 o6 q
static void I2C_SendByteLen(unsigned char addr, unsigned char thedata)
- Z) Q' x5 M4 t! W{
) ]1 T* p2 P2 G        Start_I2c(); 7 l/ o! j7 S* r2 r! ]2 U' N( G
        I2C_SendByte(0xda);& b, `7 X4 r6 G+ A* y" Z' w
        Ack_I2c();        
8 g. ~) X0 _( I# A" t, C        I2C_SendByte(addr);7 P/ L# j6 O! V, ]" n. m
        Ack_I2c();        
0 \0 s- p1 u/ d! i" U% `        I2C_SendByte(thedata);
% w0 m+ I+ B6 i        Ack_I2c();        
& \6 [- Z! X6 `; E. J        Stop_I2c();
+ W# G- h8 v3 C* p# h}
( l0 P: a* p6 e  C5 C8 [. [) l1 D$ L( y5 K
* u# P9 H$ F, M! {
unsigned char Read_One_Byte(unsigned char addr)
) f/ n7 x3 U0 [: u$ E& m{
" i, \' Z8 p- o- m+ r         char mydata;( y, d1 b$ X- m8 L  A( m! Y! G
         Start_I2c();
  i, Y0 M* b$ {0 {- f5 Z         I2C_SendByte(0xda); 8 k: q, Y* A! e8 a, [5 f, t& `; b
         Ack_I2c();        / ~- f+ o8 q4 _% _
         I2C_SendByte(addr); / p% N5 N+ \9 X2 D
         Ack_I2c();        6 P% ?# V2 P8 @" |
         Start_I2c();
) J! p0 ?/ I3 ?3 \: T* Q7 D3 ~/ z         I2C_SendByte(0xdb); ) e# d8 S4 V3 v+ B9 D1 P
         Ack_I2c();        
' k8 H" Z0 p0 B$ K, q         mydata = I2C_RcvByte();
! A$ n% H6 B. F# _7 S         Stop_I2c();: _/ o) u, o: \& P  k2 _
         return mydata;
. }5 K$ o* j$ [3 v, _- T: T. X}' {& D- S+ g  X* f5 E$ |
void Get_XGZPC_Value(float *XGZPC_Date)7 s# {* V  r8 a, ?
{
9 |, G+ I+ Y1 \- M5 H2 z- ?   char yali1, yali2, yali3;
" i# `" S0 `; m+ E8 J, R         char temp_a5;
' |' z2 `  |; f( P% `9 X' i- R! W, S8 c         long int ad;1 f. F5 c  ~: e- F5 {6 ~
         long float XGZPC_Value;
+ n/ U7 @* k' V! _7 o8 d* o
6 K9 K+ w' B. Z( ~3 U; ?         temp_a5 = Read_One_Byte(0xA5);' j3 g- o& |* t# q2 ^6 f' m5 W
         temp_a5 = temp_a5 & 0xFD;
3 ~: [- y2 g7 m& ~         I2C_SendByteLen(0xA5, temp_a5); ! L3 O- B) C: Z# O/ _
         I2C_SendByteLen(0x30, 0x0A);6 W" ~3 n, U! L4 E! ~" }/ e& ?
         delay_ms(10);
( S% S+ s, B9 H8 Z) a         while ((Read_One_Byte(0x30) & 0x08) > 0);
3 T. _4 ]3 [9 L# I/ v         delay_ms(10);
7 p0 z- {0 T8 J2 d' L  n         yali1 = Read_One_Byte(0x06);
! R& C. a  y. X+ h1 d% d& C* U         yali2 = Read_One_Byte(0x07);
/ O, d3 {- I, Y& P9 f         yali3 = Read_One_Byte(0x08);
& O. E) {3 `  N8 l         ad = yali1 * 65536 + yali2 * 256 + yali3;- ~; Y2 z; X, ?$ v# i
                * S( ~6 S% _4 f* {5 B, x) I
                if(ad > 8388608)/ q: f5 n" r  Y' a* @$ b! f0 m5 k' q( c
                {" h2 O. F/ R1 O) R" u+ ~
                        XGZPC_Value = (ad - 16777216) / 8388608 * 8.192;
" |- u! D" e- M1 k; [! O                }/ m8 t& s2 z) |; S0 s% D! @+ D  e
                else
8 b( Z  y0 x: P, @; L% R7 _                {
. t5 n/ `2 g/ j& F                        XGZPC_Value = ad / 8388608 * 8.192;
1 b  U* R* k+ [/ O. {                }1 o5 e4 t" n$ g2 S& \% h
                                i[0]=(long int)XGZPC_Value / 10000000;0 w8 J$ R! o6 i) v* m& |; u. u
                                i[1]=(long int)XGZPC_Value % 10000000 / 1000000;! }; M2 \/ ^# [7 h- T6 Y, p
                                i[2]=(long int)XGZPC_Value % 1000000 / 100000;
8 H3 Y9 b* W$ _. S2 |                                i[3]=(long int)XGZPC_Value % 100000 / 10000;  X7 p9 `$ d% _/ u" v. B# C7 d% R
                                i[4]=(long int)XGZPC_Value % 10000 / 1000;
% w! f) B- w: s# j. s! G2 m0 j/ X                                i[5]=(long int)XGZPC_Value % 1000 / 100;
3 M/ i) z+ t" f4 X) d4 s# E                                i[6]=(long int)XGZPC_Value % 100 / 10;) m% ?, S) D; M/ D% ^' o' _' w( @3 r6 w" i
                                i[7]=(long int)XGZPC_Value % 10;
3 }  Z4 n. K7 J: \$ l. }7 U: p2 e/ P7 ]
                                Lcd1602_WriteCom(0x80+0x40);
0 j+ z. ?  B6 H! g7 n7 O  a/ I                                Lcd1602_WriteData(i[0]+0x30);& _& P1 M, U" Z3 j3 r# ^* i

, C6 O( D! d  \* V4 }0 O0 ]                                Lcd1602_WriteCom(0x80+0x41);/ A- O# U# K/ {  y1 a  s  b
                                Lcd1602_WriteData(i[1]+0x30);% v, O1 n$ }7 C( H, Z4 a
) s8 s& M9 B# m7 }$ Y$ i4 r9 U
                                Lcd1602_WriteCom(0x80+0x42);  \4 J4 t1 z# i& V  Y
                                Lcd1602_WriteData(i[2]+0x30);
  x% c. A/ o1 p, c$ r/ S  s$ ]5 r7 K3 J, x
                                Lcd1602_WriteCom(0x80+0x43);
6 a. M9 u$ k; u& l                                Lcd1602_WriteData(i[3]+0x30);
0 }% e1 w7 t2 D! Q) h9 z# g  [3 x: ]" U5 \% \" i  ?4 z
                                Lcd1602_WriteCom(0x80+0x44);: d( N. p8 W% g2 Y! U6 K7 l! N! b0 }
                                Lcd1602_WriteData(i[4]+0x30);) N( F; j2 C  f0 D: `2 f2 X2 p2 Z/ p, ?

- x$ F; w( @; h- @1 P: K& z                                Lcd1602_WriteCom(0x80+0x45);2 ], K6 k  }5 A& B0 o
                                Lcd1602_WriteData(i[5]+0x30);
7 d9 x6 L" j+ c5 J$ o
0 A3 X' L2 H+ R! a                                Lcd1602_WriteCom(0x80+0x46);
$ u! p! ^6 X8 J8 j                                Lcd1602_WriteData(i[6]+0x30);
6 O0 e: U7 u# d( }  q# X# p$ S7 [" g. h. U$ ^5 d) U
                                Lcd1602_WriteCom(0x80+0x47);
! |6 T' K7 l$ q                                Lcd1602_WriteData(i[7]+0x30);& G& c! P. E5 I& R" ?5 t( ]* J) l& u
                                *XGZPC_Date = XGZPC_Value;
3 A  N. E5 l2 ^2 e0 ]% t* e: ~  P4 T' g( e5 [6 n. N7 v& E" I$ [
}
( f3 u6 A+ v) h% j9 J; K0 Qvoid main()
+ I8 o6 B) Z! R! ]. W/ i{! Y. L8 [/ I! o8 I
        unsigned char DisplayBuff[20];
6 {9 X7 Q+ }$ e0 E6 v        float XGZPC_Date= 0;
+ F2 t; i; C/ W3 G# @  v" G( O5 k

( }+ m9 o' E, g7 H# Q) W' ?* m0 M        Lcd1602_init();
. e0 x: B* W  ~$ M! L        I2C_init();; {1 I5 _: p8 ?5 Z. J5 z, u
  K& t# v0 P) J6 d/ L- T" K
2 ^. _6 a2 y: g- w' {0 B5 G( I+ E. Q
1 P' i. ~1 s/ M! E
' ^: @/ S3 _% |, `* @+ X
        LCD_Write_String(0,0,"ZPC:         KPa");* T' N2 h7 h/ f& _: a. _

4 ~& e/ l1 |5 Z! t, ]4 L# c# s* u+ \' N. z6 c, P+ \  o; u$ f
        while(1)
; C+ U8 o* x. e3 P  o4 T        {
, l/ f9 z& ]/ |* ^* i' j2 G5 b                 Get_XGZPC_Value(&XGZPC_Date);
9 Q: D( [! ?  @# |                  sprintf(DisplayBuff,"%6.2f",XGZPC_Date);) R( g2 m0 z  G# w8 i
                  LCD_Write_String(5,0,DisplayBuff);
* s/ T) U. y5 I$ W$ A/ c        }# _8 {' X/ O/ z3 m

* r& m  N; B5 I* `6 M" M/ L0 h% N0 O
}9 z7 t4 ]7 H6 f+ L3 X" D

; o; L6 X; R1 r  j  }* x' [1 Q9 q4 d8 E3 w: T/ X. ^; e; ]
***it RS=P2^6;  
7 g2 H7 E/ I, M3 m***it RW=P2^5;  
& w. A1 H  T9 g0 i1 P# z***it E=P2^7;. B7 d- ?; y' M. _
/ F6 V( }. v  e. a

* O8 G1 f! S7 k3 U% m  tunsigned char text1[]="0";   //µÚÒ»ÐÐÒªÏÔʾµÄ×Ö·û, p: P  G" y# G
unsigned char text2[]="0";   //µÚ¶þÐÐÒªÏÔʾµÄ×Ö·û6 f  N' q+ U. M* C3 x( Z% G! ?0 V
$ J1 ~/ P8 |6 Z
) }+ e6 o/ ]( t
void delay_ms(unsigned int z)  //ºÁÃë¼¶ÑÓʱº¯Êý: }) h9 N6 f- J- V4 J4 w7 j4 {$ P# l
{/ K; J# Z0 e, S
        unsigned int i,j;/ ^1 Y8 J4 h* R+ z# h
        for(i=z;i>0;i--)
1 T$ w+ m% z7 k! q9 q: [. \: e                for(j=110;j>0;j--);" F! j* }: B7 \: a: |7 J7 E7 ~
}
& J1 z! d& G. ~, v" l0 ^2 w1 _- p0 J' t) B' v7 O3 l
0 j# j( @; [7 }( o( z' F' X+ h6 b
unsigned char Lcd1602_ReadBusy()   //ÅжÏlcd1602ÊÇ·ñ´¦ÓÚæµÄ״̬£¬¼´¶Áæ0 A( g: x5 F& f
{. K: w1 J+ ?9 a9 E# j8 [  [% i) \
        unsigned char temp;3 g( A7 K1 [, g  `
        RS=0;
4 F" f; e6 K2 ?6 |. x# @; K        RW=1;: a& M0 J7 `0 b4 g$ O
        _nop_();
, W5 T( R9 {2 T; f  _6 k; s        P0=0xff;             $ ~0 x8 A% ^* u+ ^, Y3 Q4 k; z2 F5 C3 ~
        " `1 r. l* c$ g, K! I4 Q
        _nop_();; Z1 ~7 x0 @& Z7 A8 _0 q: x
        E=1;
* z+ V+ h8 u9 Y- g( k) ?9 r: b        _nop_();# l; q, _9 ^3 c' I! e5 B
        temp=P0;   
- I% T" z- ^! S0 @* J1 m! K        _nop_();
& U* h' q  [; d9 L( R        E=0;- E% v; `3 u1 Q5 C
        return (temp&0x80);  ' J( ^$ A! L. O- e$ X

: q5 [/ W8 X2 I0 _
* K1 N8 k( ~% b, S( N3 V0 F}
9 w0 ~0 Z+ X* K8 R+ p9 s
. b7 r/ I& y$ M' K7 |
7 l# B$ B0 \5 f' L0 D/ Xvoid Lcd1602_WriteCom(unsigned char com)  //дÃüÁî, X( p" @: x% Y) r& f) Q8 u* m
{" q+ A- {$ ~3 y$ w$ B) [
        while(Lcd1602_ReadBusy());  //ÅÐæ
" [- s. Q; o7 j& c        RS=0;  
* D/ |7 F. W4 T+ V2 ?        RW=0;  
- t$ P- J4 a* C4 ?# {$ `% \& E: m        _nop_();$ p$ O' R/ Z/ Q$ x' m5 \
         P0=com;   //×¼±¸·¢ËÍÃüÁî( v7 T) V( q+ ^- C! w. H
        _nop_();
# j; _3 _3 \1 L1 j        E=1;     
" I5 t  I6 p" v& u        _nop_();+ |0 o  R& ]: b/ K7 c
        _nop_();
( E- Y* q( C  d) {: n/ p1 I        E=0;     
  B  }& t+ G2 u  c        _nop_();6 \+ Z, Y9 }3 F+ Y
        _nop_();   
5 j- l. q5 e4 A9 z}% x1 a6 }7 I4 H  C# B# t1 y$ y- o

2 w8 c1 i8 j3 q. B1 ]4 T( h/ M3 D/ W. T& g" E3 D
void Lcd1602_WriteData(unsigned char dat)  //дÊý¾Ý
9 v0 I& G0 y& C/ U{3 W. D( j! E2 w, `1 c
        while(Lcd1602_ReadBusy());   //ÅÐæ8 u( ]1 B; {, t
        RS=1;   //Êý¾Ý
+ Y* H, ?3 U' a0 n        RW=0;   //д
% Q; n% q7 V2 O8 Z. B5 P        _nop_();
6 N( ~- ~" {5 F1 t        P0=dat;/ J' q5 ~  Z# I6 j( U6 H. W
        _nop_();
* q+ T7 q" R1 l1 x        E=1;3 D2 m  v3 q$ `( `. T& ^( p
        _nop_();
1 L! Z* a2 k6 ~        _nop_();; b7 d0 q; d' s* M6 W8 F$ \
        E=0;
% c- K& w/ I6 P! g1 v# C1 r2 w        _nop_();# N8 U: r" v. U1 J
        _nop_();   4 d8 `3 r4 l# C+ W# ^) u, S0 l" ]
}  C; ~7 w' C* n5 }! R5 I

1 Z" }+ D7 v5 u8 _4 y- e1 L) B* S* L; u; z$ W! S4 I, h
void Lcd1602_init()   //³õʼ»¯º¯Êý' r, l& J! J# x. X2 ^
{
! m6 N6 z9 C7 S  [# o6 i        delay_ms(15);2 J- I$ t+ B, A! y& I0 D8 R
        Lcd1602_WriteCom(0x38);   //ÏÔʾģʽÉèÖÃ' W1 s$ K& F. x) r# U; i
        delay_ms(5);
% @8 E. o$ g  Z  o4 |2 p8 Q& G        Lcd1602_WriteCom(0x38);
" e& i4 [/ p/ V; {2 A% y, D        delay_ms(5);+ ^& A( D( i# q9 d- c7 p
        Lcd1602_WriteCom(0x38);
1 h& v2 C  Y5 A, Z) U! n' v        Lcd1602_WriteCom(0x0c);  //ÏÔʾ¿ª
2 k( ?8 y% o% n6 w        Lcd1602_WriteCom(0x01);  //ÏÔʾÇåÆÁ
) r1 W" Y4 ^$ @5 K7 q0 N" k        Lcd1602_WriteCom(0x06);  //ÏÔʾ¹â±ê7 Q7 C2 y2 k+ g3 w$ k# r
}. ~$ g) ~7 R& q5 t
8 R( t- h; k- U  K
4 G8 |6 N1 [2 ?% Y
void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)
$ k; U+ C& r2 Z# K7 O{    7 m8 `2 a) }: B# l
         if (y == 0) # k9 Q# \0 x7 {1 r. m# _
                 {     
0 F" m+ @! n6 `3 \3 h; d9 A+ c. m                 Lcd1602_WriteCom(0x80 + x);     //±íʾµÚÒ»ÐÐ
% Q8 f8 _5 g$ k7 o                 }* t7 I; K+ C, E1 r
         else # }; }% z! Z& i# v
                 {      
" s6 Z6 ^" `  A- ^* M( x( e                 Lcd1602_WriteCom(0xC0 + x);      //±íʾµÚ¶þÐÐ8 |* T( t$ F- |  Q
                 }        6 l0 n) i* d- D' V
         while (*s!= '\0')
5 T$ U1 H; k. A                 {     
8 I* P$ O* P( d, G' i; C$ l                 Lcd1602_WriteData( *s++);            e+ p) h5 s2 E& B% E# ~
                 }
! s$ Z- p% B) r: X7 Z& N: g}
* q* I# r; \. R/ D% y2 W

该用户从未签到

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-5-28 01:24 , Processed in 0.093750 second(s), 23 queries , Gzip On.

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

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

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