|
这是lcd1602的程序,时序有问题吗?
4 A& s( Z2 _& O1 R* y
0 D* [2 M8 ]$ b# K/ }3 e#include "LCD1602.h"0 S. w5 X% [$ o' o& a
! e0 b8 c2 q/ C# V
//****************************************************9 t7 P* H& ]& n! @% R" I7 f, `# \" b
//MS延时函数(12M晶振下测试)
* t# t8 ~# e2 M/ {2 x Z) Z//****************************************************
+ w# g# j% x9 n! W, jvoid LCD1602_delay_ms(unsigned int n)
+ B* x( \3 S# P4 |{8 `5 y k* | k- S1 @2 i
unsigned int i,j;# }) f' W$ X7 u: h
for(i=0;i<n;i++)
* r* q k; o; m: G" R& K for(j=0;j<123;j++);
) j( Y, P& ]. c, k9 X}. ~8 b1 W+ L* l% g# e
% Q" ]# u( E& @//****************************************************$ T2 a/ E4 m3 S: j! @. ~$ X
//写指令
$ u( p; U3 z, ]7 V! N//****************************************************/ R- a, G" Z6 s! [
void LCD1602_write_com(unsigned char com)% t a g" ?3 E1 X6 @
{
( N: d( @5 ?# m+ | LCD1602_RS = 0;
) u% J1 S( V1 _4 d7 m/ P" ` LCD1602_delay_ms(1);2 N$ [1 S, T5 h
LCD1602_EN = 1;. [- ~4 ^0 ]! r5 j5 K( p2 U! i
LCD1602_PORT = com;
: ~% V- l/ M! E! t LCD1602_delay_ms(1);+ _" x/ K2 K0 C
LCD1602_EN = 0;: m& `1 W8 R- b
}( S W8 R2 G+ n3 O" r
0 \2 S: T+ f8 Z" b8 \//****************************************************
1 m8 A9 C4 E( n) M) j2 `//写数据; h& F% p; i) m
//****************************************************4 z3 Y2 f: M" M' H
void LCD1602_write_data(unsigned char dat)
0 j% ]7 ^0 {9 E' {7 X4 y# B{6 {* ?. [+ }" n8 t& ?9 E' \- }
LCD1602_RS = 1;) |3 u$ o' n3 N0 a6 O% H/ i
LCD1602_delay_ms(1);
/ h Z M8 N7 Z" K. Y" D LCD1602_PORT = dat;8 a8 i$ g& C" r: Z
LCD1602_EN = 1;) T4 {7 G. r6 b% z
LCD1602_delay_ms(1);+ ]! Z! a, W! K* Q' v; y
LCD1602_EN = 0;5 q" j# c( ?9 [4 H" h/ y+ T
}
+ y2 e8 m# X; u
! [, W, z0 S# }/ [# |//****************************************************4 ]6 h1 ~4 c# _; b# S
//连续写字符9 Y7 z3 U9 K) c" d+ \
//****************************************************& o# l9 A, L/ O6 F" B3 _
void LCD1602_write_word(unsigned char *s) E5 ?) O ` Z5 q% y
{6 R$ d( u# o% R/ l3 x2 b
while(*s>0)5 J. ^; _/ h m% U% {
{8 I# z% r C. F5 c9 @4 O" `
LCD1602_write_data(*s);
' l2 c' S: F: ]2 B/ z6 b' B) A3 \3 D s++;
4 `7 W+ F$ _9 N- U) N7 n }: ^1 j+ Z4 B, g5 H, \% f
}, Q3 M& i H8 g" l1 R
4 ?9 {# K" z8 J: ?3 @
void Init_LCD1602()4 ^* c% F1 O9 U$ D* m0 O }
{9 u3 w# k% `8 d# w6 r) L b
LCD1602_EN = 0; //设置为写状态$ C6 h. c# c$ w+ L0 q
LCD1602_write_com(0x38); //显示模式设定
5 R% H( v: b9 u LCD1602_write_com(0x0c); //开关显示、光标有无设置、光标闪烁设置
/ W7 q/ {9 W4 N7 V- C3 [ LCD1602_write_com(0x06); //写一个字符后指针加一
9 s! O L) C& ~% a$ @$ A2 r LCD1602_write_com(0x01); //清屏指令
! F5 X1 ^. b7 @6 t$ U, U}% M+ m3 x6 M% Z: i+ ?5 n
|
|