|
朋友,我和你一样,也在看这段程序,可是我发现,这个程序的给的真让人无语了,我怀疑他根本就是在增加程序的复杂度,然并卵啊,你完全可以把程序写成这样9 n1 B; y3 }' B# _+ ?# S( ~& X
#include"lcd.h"
8 s' |( `$ S/ S1 T5 d0 X; ~; [- G. H, Z* G
/*******************************************************************************0 B$ _9 l0 `: k+ V4 s' [5 U
* 函 数 名 : Lcd1602_Delay1ms
3 _" T y2 o. E* 函数功能 : 延时函数,延时1ms
- U/ r5 _" s# X: `* 输 入 : c
- N4 L: a2 I1 |; z* 输 出 : 无
- m! m$ ?5 }/ w% t* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。
8 R3 e9 N$ L) k6 h*******************************************************************************/% N. N) a5 J5 Y* U$ F0 o; s
) p z4 ~2 }1 o7 F+ _$ O4 {8 }
void Lcd1602_Delay1ms(uint c) //误差 0us. [( c) n- t6 m+ N$ q; G. e. y
{
6 [ M' F$ W! d4 M& P* D7 y uchar a,b;
- X" v- J0 H- e5 H4 z for (; c>0; c--)$ c' d) W% W: i$ T: p
{
8 o6 N: a0 M! } k for (b=199;b>0;b--)1 `1 E4 `% N8 u' c9 e5 J
{2 @$ W' y3 k3 U/ z
for(a=1;a>0;a--);
6 E* ~1 Q+ A- H* y: r0 f8 w) Y } ; Q& r, n5 u/ G+ C
}" e; {1 C, G! I* a2 H
# [; L4 j& j! k, `- u, y
}
3 o" G3 T. _2 }0 z( }5 \' W. c7 j- K e. s0 i) b! d
/*******************************************************************************
}+ A/ H# n. A$ l* d* 函 数 名 : LcdWriteCom: ^3 r: V, g( r
* 函数功能 : 向LCD写入一个字节的命令 N, C7 t8 M: _! O! u
* 输 入 : com
4 K- T6 S* P5 D* w* 输 出 : 无8 s* |3 O$ m- K+ T! S0 d
*******************************************************************************/$ O2 C3 i! I. N- C
//#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时9 N9 \% d \# z& v/ |+ y- t
/* void LcdWriteCom(uchar com) //写入命令9 V, h3 v4 _# ]7 Z& p' j
{
8 a t t3 T$ W3 q* z0 `: F. S LCD1602_E = 0; //使能
3 `. Y) \% ~% a4 p, ? LCD1602_RS = 0; //选择发送命令
; |9 ^5 \; r5 n1 x- L LCD1602_RW = 0; //选择写入- r. M/ i. s5 `) w+ i4 _: ^1 M
6 x1 o5 U7 K1 j0 G- \; M0 G+ ^$ T7 U
LCD1602_DATAPINS = com; //放入命令0 E# b2 r1 E$ I# E3 {* C
Lcd1602_Delay1ms(1); //等待数据稳定
r; n% K9 s5 h. l9 c J2 h
. \3 B1 g; ?. u) p" I! b LCD1602_E = 1; //写入时序) F8 j% I7 F' V9 ]: J V5 S# ~
Lcd1602_Delay1ms(5); //保持时间
4 H, e3 ~. v7 s% G LCD1602_E = 0;
* y# {" T: ~1 y1 e} */
0 U: i: Z' O& W+ `, Q$ s2 d2 ]//#else & n, t% E6 C+ n, N
void LcdWriteCom(uchar com) //写入命令
/ [$ C' x3 u0 z: q% E- J' d{4 O) y5 K) z7 B& g5 K6 \! j
LCD1602_E = 0; //使能清零- O L6 p `7 |
LCD1602_RS = 0; //选择写入命令1 y4 M; d- l. I. b
LCD1602_RW = 0; //选择写入
8 F$ |, C+ z1 }* q5 x6 B1 V
# T% n$ g$ D+ s# o. ? LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改, H2 P+ {1 S* f M; f
Lcd1602_Delay1ms(1);
! a; k+ ~# q8 S4 i
4 S0 |1 v- H7 A5 l. z" w LCD1602_E = 1; //写入时序
4 w# b- l$ i8 v, K7 G. q) Z L4 ` _ Lcd1602_Delay1ms(5);6 q6 ~! o: X0 e7 D0 E! Y
LCD1602_E = 0;6 Z- L% G5 N) ]0 n
! e; U4 T0 d8 k7 O
Lcd1602_Delay1ms(1);) C/ f) Z& j7 ]" {: M
LCD1602_DATAPINS = com << 4; //发送低四位
. S' X" W; A4 x: P Lcd1602_Delay1ms(1);) o* Q' V5 m( m, S- P+ R7 P
* h A4 j1 E/ a8 k6 m8 w LCD1602_E = 1; //写入时序! v3 h# G' m/ q
Lcd1602_Delay1ms(5);# q( T# {' h' O- J2 a# V# W
LCD1602_E = 0;. k! b, ~+ T. m D8 `0 ^; f2 p" `; ~
}) _4 g0 _5 C6 c9 v* g' y% T
//#endif
3 t, }, T/ O% E/*******************************************************************************: _* i1 }; X# g# I' e1 l0 l
* 函 数 名 : LcdWriteData
: v) a: j" ?; O; }7 ]( D* 函数功能 : 向LCD写入一个字节的数据
) w3 O- B9 k# h# f6 z* 输 入 : dat$ P" q7 J2 e8 H- L8 J8 n. E
* 输 出 : 无3 P4 a1 N5 y- C( ^, C( n4 l4 I* s
*******************************************************************************/ 6 P' ?- {7 S8 l- i8 V7 h. K
//#ifndef LCD1602_4PINS
% L0 P+ l" S. U* p/*void LcdWriteData(uchar dat) //写入数据
0 _& y% E# t: c! I{& T4 G# A! k6 _0 g" i
LCD1602_E = 0; //使能清零% z4 K" f" | ^% \0 P5 e# x/ y
LCD1602_RS = 1; //选择输入数据
9 b9 G# s5 B# Y5 k LCD1602_RW = 0; //选择写入
5 V* W7 }4 e* V& T' ~
& i/ M, f+ N3 L- F( d LCD1602_DATAPINS = dat; //写入数据
9 @2 v F, ?8 z$ @' f( W Lcd1602_Delay1ms(1); [: k, I. A# L2 H) \
& L' `0 J" z- c2 d- x LCD1602_E = 1; //写入时序) [$ z, N) a# w: q- \
Lcd1602_Delay1ms(5); //保持时间
3 d4 ~8 e0 d9 I: M" g6 O LCD1602_E = 0;
+ P7 n' o8 Z* S5 `1 m* q( n} */0 ^& R0 X+ M$ M. k( v. I K9 z9 o
//#else
" [8 B$ d9 h0 y/ L' u$ cvoid LcdWriteData(uchar dat) //写入数据) n" J3 n: `7 ]+ K% I
{
2 c- a* g8 _9 C( J LCD1602_E = 0; //使能清零
: R& D2 v* L: f% `7 b. t LCD1602_RS = 1; //选择写入数据* d; W6 v! |0 F- D. J# S+ w8 n( e' R( D
LCD1602_RW = 0; //选择写入
3 f2 h# P' D: f' S3 t8 g9 d% _
. q l5 [& w1 E- N" G% r4 K3 M LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改& [( r7 q$ y t
Lcd1602_Delay1ms(1);8 X9 d' m& `6 p1 d% G2 I
" W |4 F4 l& r, ]& M
LCD1602_E = 1; //写入时序
! R! B/ J$ V- k- Y$ Z- I# z Lcd1602_Delay1ms(5);
1 d3 T* {9 |* M LCD1602_E = 0;
0 G; Z, n" Z1 ^
% Y, s! X4 B+ G- Q LCD1602_DATAPINS = dat << 4; //写入低四位* ^+ F1 `: T+ {$ l% |
Lcd1602_Delay1ms(1); O: |1 g" M' ?' {4 d
; \$ U& S! T0 p! x3 ~7 a9 Q
LCD1602_E = 1; //写入时序
: E. I, |" G: ?6 N Lcd1602_Delay1ms(5);
5 i4 }5 s+ H' @, Q7 x LCD1602_E = 0;
) P- h/ V9 p/ F$ A" V}0 U/ b# y- \1 n$ Q0 t
//#endif
: o% D3 B- N) c) u/*******************************************************************************
7 X5 D! x, N, [* 函 数 名 : LcdInit()
, E' e6 T! m: G8 w; r* J( J# ]* 函数功能 : 初始化LCD屏
/ x- t; F- `* @ ?# G* ]* q* 输 入 : 无
, ~4 x' y. r Y9 s* 输 出 : 无5 K# A! j% ~3 Y1 }
*******************************************************************************/ ( u" T: E& S5 N
//#ifndef LCD1602_4PINS
/ `8 g! ^4 O5 D6 x* ^# o3 M# D5 \2 _) u/*void LcdInit() //LCD初始化子程序
( ^3 ]. K6 _+ c A{- o2 b- h9 E8 F
LcdWriteCom(0x38); //开显示
( [8 O9 B0 P( R3 W! d( H6 C$ T- D0 k2 k LcdWriteCom(0x0c); //开显示不显示光标
1 ? Y' t! x9 o6 @ z) [, P LcdWriteCom(0x06); //写一个指针加1
& w% |' p4 ?! s( Q% X" t6 _ LcdWriteCom(0x01); //清屏
. m. U, \# B; D3 H0 p0 h LcdWriteCom(0x80); //设置数据指针起点
9 N( L. q6 Y/ t9 `: P8 M} */
8 s1 s2 g5 L4 L3 x* F//#else
+ _ k7 I1 z# r. H( x) O, I5 nvoid LcdInit() //LCD初始化子程序( }7 I* V5 B: \) a
{
/ v% C2 f9 B8 {3 r( G' K9 Q. e5 i LcdWriteCom(0x32); //将8位总线转为4位总线( j9 m8 R. t, y( h9 s4 M
LcdWriteCom(0x28); //在四位线下的初始化5 } l! Q3 e; `' f1 S
LcdWriteCom(0x0c); //开显示不显示光标5 G! E, ~( L7 a9 ^+ p1 v/ S
LcdWriteCom(0x06); //写一个指针加1* q$ D4 T3 f l S. R
LcdWriteCom(0x01); //清屏
( s! h4 j, j% I LcdWriteCom(0x80); //设置数据指针起点. A7 D5 B* Y0 Y7 b4 n0 b
}' j* ?0 q0 Q/ R* J* [) V% f
//#endif
9 ]- i( f0 D6 v V' }因为我发现,他之前在main函数里面就定义了LCD1602_4PINS 也就是他还说什么 #ifndef LCD1602_4PINS(假如没有定义 LCD1602_4PINS),这不是让人无语吗?我怀疑他们只是在某个程序里面截取了一段程序过来,然后改成可以实现功能的程序即可,他们根本就没有考虑程序的简洁性,不负责任的卖家 |
|