|
朋友,我和你一样,也在看这段程序,可是我发现,这个程序的给的真让人无语了,我怀疑他根本就是在增加程序的复杂度,然并卵啊,你完全可以把程序写成这样5 w0 P2 H3 X: \7 l
#include"lcd.h"
! G6 c( F! \! a# S4 _7 g& \6 R& X' r$ @! ^9 O
/*******************************************************************************% l5 n2 D3 I6 O4 O
* 函 数 名 : Lcd1602_Delay1ms" E" ?9 B& F/ \3 Q& `# F
* 函数功能 : 延时函数,延时1ms
4 k) a" p N4 a: H* 输 入 : c; P; w: ~7 A' @& Y$ K/ I- F0 h
* 输 出 : 无
* e+ n( J5 U5 t, V1 L9 o" z) \9 v* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。8 u' }) {* G) t# J
*******************************************************************************/
" o9 }8 T4 x; j# V5 r5 ?! |3 |! s$ k$ L& c9 [# k5 r
void Lcd1602_Delay1ms(uint c) //误差 0us
6 r% J; F `0 f* k{# Q) b5 v2 O8 i- w
uchar a,b;9 j5 n) C; g. {7 @9 K, ^; X
for (; c>0; c--): T: S" m9 g5 O: C0 I
{' @- I7 f7 j+ D$ `9 R5 u4 w
for (b=199;b>0;b--)
3 V( ]/ D: J% S3 f {
/ R$ ?" S O7 G5 f2 ?9 S for(a=1;a>0;a--);/ ~# u) g0 z. \$ u! K
}
) n( k H* n* E8 Z; V; {- C0 y0 g }3 G; z- P! a8 ?7 \; R
0 M) n7 t" E8 U# s
}, |. ^& r/ N. ^) t$ F5 e
% v: D' y& U, n/ c8 I/*******************************************************************************' T$ M/ `) E. i7 E) p. x! ]: N: K) W
* 函 数 名 : LcdWriteCom0 n6 a( D! X4 w
* 函数功能 : 向LCD写入一个字节的命令- q7 U4 ?6 z- B: |4 W" {* B' t: C
* 输 入 : com
$ p" _" E5 ?. q% o! y; w* 输 出 : 无, |! z! ]/ d* g2 n3 v
*******************************************************************************/" d/ |$ X# v# @2 i5 q7 T# \+ y
//#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时
7 i' r% x3 k6 V /* void LcdWriteCom(uchar com) //写入命令
& B6 P" f; Y* P8 I9 I$ [3 P) o{
s% N6 {8 w2 x2 a9 x! \& m7 u% _ LCD1602_E = 0; //使能
: f2 u$ J: i1 ]- v8 M LCD1602_RS = 0; //选择发送命令
2 r, T' `) V, E# {" K8 C* J$ ?1 S LCD1602_RW = 0; //选择写入
# ?' J: ]: R/ ?# Q. N, Z
0 M8 b2 D! j s& q2 p LCD1602_DATAPINS = com; //放入命令
# Q! @2 g% z2 H, |* W* ?3 | Lcd1602_Delay1ms(1); //等待数据稳定
) Z6 {* ~" W ~* [, V
: B5 U$ h, Q6 {5 k; l/ Y, S LCD1602_E = 1; //写入时序/ ~1 ~+ x4 {, J, I& X# }. V
Lcd1602_Delay1ms(5); //保持时间% @' T8 n' U8 w& o$ o! Z5 t
LCD1602_E = 0;
V/ w% n! m1 z3 I7 T} */2 d3 J) P6 ?+ e1 d: d& s* d
//#else 2 l3 o( p8 w4 H4 V
void LcdWriteCom(uchar com) //写入命令
2 d5 i$ M H% v) P# B# D+ n{! g t: c8 @/ D8 |1 f" v+ h) C1 h
LCD1602_E = 0; //使能清零: \! W$ a. _; Y) c' x
LCD1602_RS = 0; //选择写入命令2 [- ?7 c4 l. F0 ?9 `4 c
LCD1602_RW = 0; //选择写入
" g7 k: V% ?" c$ o
) ^6 p B3 w* N) { LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
- h, ^; C; A6 b# I" n: z5 P Lcd1602_Delay1ms(1);- E8 G& _9 {8 ]6 M/ _. ]5 b, }
! y- d1 y) q6 L/ L. k* k! ^ LCD1602_E = 1; //写入时序
; a5 N3 L" d- d6 n2 X6 N2 z0 v Lcd1602_Delay1ms(5);
4 K" m3 z( s1 @# v, \ LCD1602_E = 0;
8 {4 |! L, K, Q$ O. B8 n% e6 b
4 w6 P* L2 E( f7 ~- h; b- H" w2 g$ K4 k Lcd1602_Delay1ms(1);
0 C4 u1 e1 ~0 a, U+ D( F LCD1602_DATAPINS = com << 4; //发送低四位2 Y5 |1 U/ b" n8 U3 {5 o# Y
Lcd1602_Delay1ms(1);. G' f& m& O) U' o
* X3 s0 [6 c. ~, \6 N2 U7 ^5 B LCD1602_E = 1; //写入时序0 t* @5 p% d9 L. e" j7 P
Lcd1602_Delay1ms(5);7 R" j! v( U' m& O* s
LCD1602_E = 0;1 f0 i1 Y# L: I; X* I! Z4 x
}
4 `5 @' ?4 [: e1 T/ L+ r//#endif6 M: z1 Q- u8 L
/*******************************************************************************
. h* E( ~/ |0 Q. e: i+ @* 函 数 名 : LcdWriteData6 [" s. ^$ ^ w
* 函数功能 : 向LCD写入一个字节的数据/ u: g5 W9 N# ~2 a
* 输 入 : dat: @/ B& G, B2 G; p# |) [( u0 L
* 输 出 : 无0 v8 q- S9 v0 a k& I1 @6 G* ]
*******************************************************************************/ $ h0 i* c# ^% {8 Q5 B+ S
//#ifndef LCD1602_4PINS
3 W$ R, r; B& [3 T* @/*void LcdWriteData(uchar dat) //写入数据' V, K! j5 ^0 K( X% R
{& t; t; t' Q& S7 c
LCD1602_E = 0; //使能清零! T5 M5 j$ d1 y
LCD1602_RS = 1; //选择输入数据" S& }- t) t# {: `5 E) b
LCD1602_RW = 0; //选择写入1 W5 e: b/ l3 e$ J# k: k3 \
9 B; p0 g' O7 N0 J- |2 k1 e LCD1602_DATAPINS = dat; //写入数据& O3 q2 S' `- E- H( ?
Lcd1602_Delay1ms(1);: e. j+ B7 f' u, }# H
5 M$ p4 @7 ~; K' y8 v2 ^) k
LCD1602_E = 1; //写入时序4 u5 r' O; ^( L- z+ s t
Lcd1602_Delay1ms(5); //保持时间9 C" K& ^8 K p0 a2 ^ L6 u
LCD1602_E = 0;8 ?% D- K% o! J5 p' g
} */
: b1 N9 F) h) J1 _& n7 c3 Q: o//#else: P1 x0 ?! G3 S) m$ Y) ]# A
void LcdWriteData(uchar dat) //写入数据 n& @9 P- p5 k$ Z
{
1 m$ j7 _$ p; f7 R LCD1602_E = 0; //使能清零( Q1 C9 }% t, w& q$ I
LCD1602_RS = 1; //选择写入数据
& g+ v. `+ `) s1 u LCD1602_RW = 0; //选择写入; D& u9 C2 f; N" i. w% [, Z( [# p
$ b7 C& Q+ }, g K* k) E
LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
' ]% F/ N4 g: g. b, H5 W, s Lcd1602_Delay1ms(1);! K* j% |: k( i' s- u
3 {0 e: u% T! o0 q# [- X- N LCD1602_E = 1; //写入时序
e8 r* @4 p' ] Lcd1602_Delay1ms(5);
7 L0 C: d' |0 z# U2 u LCD1602_E = 0;
: _. Z0 _$ e; ^" ]5 P0 m* Q% J/ j% M& c! D6 y9 y
LCD1602_DATAPINS = dat << 4; //写入低四位. E5 \' G9 w n% t: h9 ^1 C
Lcd1602_Delay1ms(1);
, ^6 n, q/ ~ U6 L
% j1 ~3 H9 W9 j# p* \ LCD1602_E = 1; //写入时序8 @0 P2 h: @( l0 g# o4 T8 \+ |. r
Lcd1602_Delay1ms(5);; E. f [7 n& i! c+ G0 g# U
LCD1602_E = 0;; v0 w4 \, \2 t: [6 W
}
8 }" z$ X+ i+ D( l ~5 p3 Q: i//#endif
6 d; I( y' k( K A+ w* K5 J/*******************************************************************************
& I! }9 L4 M8 U% u% Z* D) R, O* T* 函 数 名 : LcdInit()
" K3 I) B' \& ^. D7 U; j* 函数功能 : 初始化LCD屏
5 p& K" T7 ^) Z& }- }1 Q% |9 s* 输 入 : 无6 a4 V/ @2 @$ v
* 输 出 : 无( d. M3 a6 H D0 U3 q# Y1 z5 I
*******************************************************************************/ ! ?" l4 O7 q& z
//#ifndef LCD1602_4PINS
, J' G2 w" ~# w( J/*void LcdInit() //LCD初始化子程序; g& t9 R/ o e3 h1 E/ B' i
{0 W& k& g" {1 e9 G- O8 r: Z2 ]
LcdWriteCom(0x38); //开显示
9 i& j. b3 W3 m LcdWriteCom(0x0c); //开显示不显示光标7 I% k. ~8 C# w4 t5 T
LcdWriteCom(0x06); //写一个指针加1% h% B$ ~! L! A5 ~
LcdWriteCom(0x01); //清屏3 T" B7 W; G% [/ Z u! P$ y2 }7 C7 O
LcdWriteCom(0x80); //设置数据指针起点6 a+ x0 \* O+ H* e( s' C
} */' |; V; P1 K: Q4 [3 ]- t
//#else7 b' p" v5 Y9 V) w4 ]
void LcdInit() //LCD初始化子程序4 U5 ]* ]% @3 J8 G! i6 B& |. f
{
/ _- F: W7 }5 a, x# G( c* Z4 | LcdWriteCom(0x32); //将8位总线转为4位总线. P& g% ?: ]5 H: o$ P2 P
LcdWriteCom(0x28); //在四位线下的初始化
" k! r. Q* I# c$ Y LcdWriteCom(0x0c); //开显示不显示光标& Z, M; ?( Y! W: F' o5 C
LcdWriteCom(0x06); //写一个指针加1- l! q+ {* H; T6 X
LcdWriteCom(0x01); //清屏# L8 Q- n5 o! F' J a2 ?2 e/ O/ t; z( {
LcdWriteCom(0x80); //设置数据指针起点
, H3 b& J! }. z* N/ c3 Y1 a}
W3 H+ h( w) a/ k//#endif1 \) U' a- T( u
因为我发现,他之前在main函数里面就定义了LCD1602_4PINS 也就是他还说什么 #ifndef LCD1602_4PINS(假如没有定义 LCD1602_4PINS),这不是让人无语吗?我怀疑他们只是在某个程序里面截取了一段程序过来,然后改成可以实现功能的程序即可,他们根本就没有考虑程序的简洁性,不负责任的卖家 |
|