|
这是lcd1602的程序,时序有问题吗?" @9 }) i( G u
% k3 |+ M" t. I7 I
#include "LCD1602.h"- g# o3 l" N5 x
% ?' ^2 n" c+ y$ r, l//****************************************************
! F. z9 t8 |) X j//MS延时函数(12M晶振下测试)
0 z' _+ [: w B( [' Y* n//****************************************************0 G3 A5 x3 k5 A. _8 J! K
void LCD1602_delay_ms(unsigned int n)( @# \7 M5 I: q M. c I
{4 T# u/ a- n! j2 |* {4 E& p
unsigned int i,j;9 F/ z0 Y; h% M( y
for(i=0;i<n;i++)$ i1 z; ?. P; [0 ?$ P' j0 w( n
for(j=0;j<123;j++);* l, T7 b7 q D3 \
}& v4 Z E0 p6 ^( j' H% V
9 v e- m; C" Z1 K5 T4 A
//****************************************************
$ J8 `& A) I( E. `$ a C//写指令
( \" L4 o- d: Q" O8 V( S//****************************************************
, h# p Y# q5 P* v! svoid LCD1602_write_com(unsigned char com)
6 c! r8 d. K! g/ I" ?{7 \. O! `4 g. P$ H3 J# y
LCD1602_RS = 0;6 F1 D' n. I! z0 U F9 l6 X3 r9 D
LCD1602_delay_ms(1);6 M1 a! u, Y* r6 ]
LCD1602_EN = 1;
/ N# [) k% r# e6 ]- K, j LCD1602_PORT = com;/ @, N9 }7 ?& ~5 ~: s; \; e
LCD1602_delay_ms(1);% U) F/ S. L& f6 f( R
LCD1602_EN = 0;
8 F. W! Y$ K A* H}
( Y" [7 r! `" K' @5 c- @
; K0 v* D+ M2 a8 [. r) q! {/ r8 J//****************************************************+ Y0 s( _5 ~/ c& f6 I5 R
//写数据
8 C5 I3 c# N. w* E. c5 V6 F//****************************************************# k2 m$ O+ V# S) g" }- e
void LCD1602_write_data(unsigned char dat)
$ }$ n, ?5 R8 Y4 J( b6 Q/ G: U- K; p. e{ M( A+ I" v. @1 Q
LCD1602_RS = 1;
3 _% D) Q" x q+ U3 Z* |" A% k LCD1602_delay_ms(1); * O6 O* D- g! W% [2 R( o
LCD1602_PORT = dat;* ~% Q8 c* I. g/ U
LCD1602_EN = 1;
$ r4 r. w1 q( C7 Y7 I, s LCD1602_delay_ms(1);
W( i5 p( z; H) z1 y LCD1602_EN = 0;$ Z+ a7 V. n- a9 e2 ^/ y
}
- I z" Q; Q- y& z: C, ^! \' R
' G8 |- K E7 u//****************************************************
% P3 h- G0 Q. |& q+ H: U+ @3 g! z2 Z( J//连续写字符
- A5 p* D$ W$ n//****************************************************
! L) x) f, ^& x! ^0 X& M$ K, svoid LCD1602_write_word(unsigned char *s)
9 g _, H7 g/ R5 n6 Z{5 g/ q# \. \0 k; ~$ S* W
while(*s>0)+ p; w0 N1 Y& x3 J% V
{
' J6 o% ^- r1 | LCD1602_write_data(*s);
+ H+ x' a# `; J/ W s++;
( r l% {$ x5 v }, ~# i0 Y: C8 R) p2 k; n# C
}
/ S, b |, A+ l. u" ?( y8 x. e% y
% N$ z6 }$ ], W" H# k6 o! bvoid Init_LCD1602()
Z' d8 t4 h% Y8 V7 O% N- y% }( C{
7 B" T) ]2 l+ t2 Z& D; G LCD1602_EN = 0; //设置为写状态
/ F( b6 g$ b& U% p" Q LCD1602_write_com(0x38); //显示模式设定* t3 R m% X! J. n- f3 X
LCD1602_write_com(0x0c); //开关显示、光标有无设置、光标闪烁设置
) `0 _9 A7 K& V* i LCD1602_write_com(0x06); //写一个字符后指针加一" B5 K( \ I1 [
LCD1602_write_com(0x01); //清屏指令/ a' w% }& n( l. ?1 b
}
! _0 R' {# K/ A: O |
|