|
朋友,我和你一样,也在看这段程序,可是我发现,这个程序的给的真让人无语了,我怀疑他根本就是在增加程序的复杂度,然并卵啊,你完全可以把程序写成这样
0 j6 t5 x% i9 F#include"lcd.h"( S6 K" }) f8 Y( B S( y
5 j9 F" }2 i& d$ l& {* Q4 F, ?/*******************************************************************************& p% @! w8 P( Q( t# C) }$ Q( g8 b
* 函 数 名 : Lcd1602_Delay1ms
# n7 |3 j/ e9 q8 N* 函数功能 : 延时函数,延时1ms" k# A7 F: L# j$ `' C. E- ~
* 输 入 : c
6 Y% a" N. d+ l: q+ x* 输 出 : 无) }# s* C% [- F' F
* 说 名 : 该函数是在12MHZ晶振下,12分频单片机的延时。
/ M1 c/ U4 x+ i* v/ e# q*******************************************************************************/ Z0 ?' E4 M$ e$ o8 K2 g2 w2 b
- T* W7 i$ Z0 z! W1 l9 ]1 f, n
void Lcd1602_Delay1ms(uint c) //误差 0us
2 @- B9 q6 ?+ Q{ M: Y; \1 R& Q* |& z* r; m k
uchar a,b;
" z% H; P- R& O7 o1 @ for (; c>0; c--)
% } a7 l: V. _- P: C, { {* I" K! l1 [/ B
for (b=199;b>0;b--)1 y) b$ B; b6 X6 j# L
{
, c" N6 M: e; O* B1 K for(a=1;a>0;a--);
" Q/ G5 `, j/ N% T. [* @) B }
: W5 F: j7 s. }$ w+ y }
) |8 p0 v$ z7 ^! W- x
* M: P7 R2 V9 I7 j$ b9 }}
# C) ]! A. K0 ~8 E) \
- x0 K: J7 c- ~4 Y0 ^. q/*******************************************************************************
6 s4 C) l* {) Y x* 函 数 名 : LcdWriteCom
- b, l$ O/ ~4 K: }- a- J* M" n. G* 函数功能 : 向LCD写入一个字节的命令1 M: g; t6 j7 o5 ]1 c
* 输 入 : com) j9 @3 ]8 ^* r+ {5 `5 u1 Q
* 输 出 : 无
' Z# P# o5 J* }" s6 `*******************************************************************************/" Y% k# J& _4 | K1 ]0 R
//#ifndef LCD1602_4PINS //当没有定义这个LCD1602_4PINS时$ d( \ H- K& I; [8 H* v1 M
/* void LcdWriteCom(uchar com) //写入命令
. `9 K& k$ Z( P D" x( R# B8 K, y{
& i& z2 [. y K2 e' r8 o3 S0 A2 \ LCD1602_E = 0; //使能
J5 L+ S( |' A5 F; S LCD1602_RS = 0; //选择发送命令' p' v/ f. y0 p' z
LCD1602_RW = 0; //选择写入# }5 s2 |2 l e1 \
8 |: M& y" a4 G8 M+ x& }3 F LCD1602_DATAPINS = com; //放入命令
5 G* v: d, i0 C1 g Lcd1602_Delay1ms(1); //等待数据稳定
- A) V6 F% d2 n% x8 i4 x8 O& s; i2 d. f- Z4 O% a& g" h
LCD1602_E = 1; //写入时序8 s5 e, ]: f" f1 s& L5 i
Lcd1602_Delay1ms(5); //保持时间
3 G5 E6 N- b4 F2 w8 Y7 y; E. `* Q8 i LCD1602_E = 0;
/ I1 M2 T. C' ~% D) b} */
1 v U, y6 A& O8 N5 N//#else
2 t2 z. x1 x3 U v1 j! }% u8 A" Xvoid LcdWriteCom(uchar com) //写入命令2 X% j, R6 O! S; e
{- o. z3 w! ~; y- C$ H) ^4 {$ H
LCD1602_E = 0; //使能清零1 ` q: Z4 ^: q/ I
LCD1602_RS = 0; //选择写入命令
0 h: B8 T H3 W( Y$ S5 w+ a LCD1602_RW = 0; //选择写入) \! `, S7 q( \ z: _% d
# C* }% O' ^' k. U LCD1602_DATAPINS = com; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
$ q; {5 A% L) V- M4 T" y1 t f Lcd1602_Delay1ms(1);5 |! t% q3 z: z M, U1 \
. s- ^2 w' [. Y; z! E7 r. Y3 o' s
LCD1602_E = 1; //写入时序! k0 o+ p; M, L" a
Lcd1602_Delay1ms(5);
/ T& D* H$ U8 o4 L* J. {; q LCD1602_E = 0;1 x$ }( m5 g3 \) o: R4 x
# Q& Z# u- ^& k+ Q7 R Lcd1602_Delay1ms(1);
" N' \! {; X" [: u% Y2 d LCD1602_DATAPINS = com << 4; //发送低四位
% A7 B# f4 h0 c$ m Lcd1602_Delay1ms(1);
4 h5 v+ y$ E% l' ?
- q Z6 K& c% p9 \) D& z6 Z2 e LCD1602_E = 1; //写入时序" l3 Z5 J/ G9 d% b, k: n3 q
Lcd1602_Delay1ms(5);% M* v9 K1 a8 a5 Q* j
LCD1602_E = 0;, j w: A( C5 P2 e! F
}
; ]* E& f* \7 p8 V" |" {; p& r//#endif
4 x# |. ~$ X2 p/*******************************************************************************- H e/ k/ U, ~. o+ z U
* 函 数 名 : LcdWriteData
\$ ?& i, o" U3 A* }; t* 函数功能 : 向LCD写入一个字节的数据0 K2 p ^; d, ?5 o/ d, D5 ?
* 输 入 : dat
1 F& A# c- w; H0 _; U* 输 出 : 无
: ~" ?# \+ v) z/ e! `/ l+ m*******************************************************************************/ O" A8 g+ |1 _ |
//#ifndef LCD1602_4PINS
& M. K- C( {" r8 j9 ~/*void LcdWriteData(uchar dat) //写入数据* ~ C) H$ C0 S/ `3 h( C1 f
{
6 ~; W" \$ S" S! |' f' p LCD1602_E = 0; //使能清零9 m' Q4 ?' j2 o/ C
LCD1602_RS = 1; //选择输入数据
0 {/ @1 Y# U9 c a7 ~5 } LCD1602_RW = 0; //选择写入- {9 e! |8 }- ~8 r; S
9 N( g+ [6 H4 X/ x5 A
LCD1602_DATAPINS = dat; //写入数据: T6 @- A. Y3 z% B* t# I) s
Lcd1602_Delay1ms(1);
/ C" [# I J: x/ `2 c" Y5 D* E3 c- u) U+ O* C: U1 @7 e
LCD1602_E = 1; //写入时序
" z# b% E; r k9 x5 l Lcd1602_Delay1ms(5); //保持时间7 B- Q8 h. }) r8 q8 f
LCD1602_E = 0;
; w+ A1 C6 | u. ^6 Y} */' Z3 W) a" R/ k2 X2 [
//#else
! w. M4 U; Q9 Y$ K6 ]" l& x, y' ^8 Bvoid LcdWriteData(uchar dat) //写入数据
$ w9 y: L* e8 T1 P0 c. k{
+ t K" C5 D' q; T( p1 | LCD1602_E = 0; //使能清零
2 x* z: {! X/ ?& x4 q LCD1602_RS = 1; //选择写入数据
8 e& H% I6 ~/ C2 Z& c LCD1602_RW = 0; //选择写入! t- p8 p! p# B V6 V
) z/ {) x) z& {
LCD1602_DATAPINS = dat; //由于4位的接线是接到P0口的高四位,所以传送高四位不用改
1 [3 q4 J6 O* j$ S: y1 K Lcd1602_Delay1ms(1);
5 a% t. j! O, p& T+ d# d' M6 E% |& A$ A, Z& V2 u, a0 z
LCD1602_E = 1; //写入时序/ w( j, M5 i. N: Z$ i) l
Lcd1602_Delay1ms(5);+ r. m+ ]8 j' E% ~% t
LCD1602_E = 0;, f. c( X3 _ e, l: v% G- x v/ q
; T4 a% T: ?% U+ i, m6 e# Y
LCD1602_DATAPINS = dat << 4; //写入低四位
/ I e" v& y5 Q3 t- _7 ^8 Q Lcd1602_Delay1ms(1);* ]: Y9 x; o6 N4 Z1 O+ k5 }
, L2 X3 V7 S% d: ?1 D# w; l# z& w LCD1602_E = 1; //写入时序
8 ]: w! }2 r2 R1 A+ q# u. [$ x Lcd1602_Delay1ms(5);9 k* ~# J b' x; Z$ ?
LCD1602_E = 0;
. Z5 y Y8 {/ Q9 I7 ?: A% W. R' J% R}
3 K. v# X' x7 C; ?0 n//#endif! z o' |* L/ w! y, o8 W$ Z) _: ?8 T
/*******************************************************************************
7 i i0 @( i6 S( @* 函 数 名 : LcdInit() T3 E6 U) x' F7 r: x
* 函数功能 : 初始化LCD屏
# O( @# u, S! ^! N1 q2 y6 q* 输 入 : 无
; L) r9 P# w1 j" O9 P* 输 出 : 无
" l# X* ?1 C7 }: x, b. \$ N*******************************************************************************/
$ Q% y2 @+ E: {# B//#ifndef LCD1602_4PINS! T* k0 L j! N+ `3 k9 G0 U8 g
/*void LcdInit() //LCD初始化子程序 k3 v% a0 o& L& \$ h& w
{
R7 o" A0 d K. ]3 y LcdWriteCom(0x38); //开显示8 i! w# S. D* ^. B1 [: u
LcdWriteCom(0x0c); //开显示不显示光标
7 k3 Q) @+ P( D$ L0 f: \, \ LcdWriteCom(0x06); //写一个指针加1- n& f, G; Y1 z
LcdWriteCom(0x01); //清屏
5 v2 k! R n) I4 `* P" j LcdWriteCom(0x80); //设置数据指针起点
5 Q, n$ f& T9 T6 I9 j) ^, l3 R} */
0 o+ M- t9 e6 N. f* G//#else
% m( H- B! p/ k; J3 ^4 F* E1 vvoid LcdInit() //LCD初始化子程序
6 x0 b' q4 x9 B/ d: z{
/ p6 p' k4 ?: ?* M# Z1 X9 B {# K LcdWriteCom(0x32); //将8位总线转为4位总线0 M: R7 z: D! }. j$ B8 P
LcdWriteCom(0x28); //在四位线下的初始化
" n: \9 x1 k T5 j LcdWriteCom(0x0c); //开显示不显示光标
, \ Z- l8 p) s" n& E" v) @ LcdWriteCom(0x06); //写一个指针加1) I& o G. ~) h1 V- `$ |
LcdWriteCom(0x01); //清屏4 g3 T6 f9 f, i2 B& `- l" u9 q
LcdWriteCom(0x80); //设置数据指针起点
8 U( \3 Y2 N) ?; I" @' Q}
( v( z2 r2 O; k8 Q//#endif# |( s$ d E6 T7 T
因为我发现,他之前在main函数里面就定义了LCD1602_4PINS 也就是他还说什么 #ifndef LCD1602_4PINS(假如没有定义 LCD1602_4PINS),这不是让人无语吗?我怀疑他们只是在某个程序里面截取了一段程序过来,然后改成可以实现功能的程序即可,他们根本就没有考虑程序的简洁性,不负责任的卖家 |
|