|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
1602字符显示keil+protues详细讲解及说明
1 ` x" L; b* B% b! B* m: `) h
+ g& F% z. z/ Q! w! N+ e
1602字符显示keil+protues详细讲解及说明
* }6 v( ~" K; a7 ^9 h ( Z, H. O1 i9 X+ u9 h
源程序:
7 R+ \- M0 f% I4 z, w# d& ^ ~4 G#include<reg52.h> P* {, l7 M" B! L% ~* Y
typedef unsigned int u16;. ^! G* p; w( y
typedef unsigned char u8;
+ T9 u4 i7 g8 v! p( {# F7 B; U
2 f0 \1 D% J3 ]#define DATA P0 //宏定义,相当于 define π 3.14,这里没有等号。
6 u, @* q8 n9 K0 R: Q7 s2 x' r; f0 G$ j4 j: s
sbit rs = P2^1; //rs,sw,en;可以理解成液晶的几个功能开关,无非就只有两种状态
+ _& C5 k8 C; Y* ]0 Dsbit rw = P1^5; //为0或1,对应的功能详细看使用手册。这里是把液晶的
; Z$ k" Q) ^4 g" D9 g) j& usbit en = P1^6; //这三个开关与单片机引脚定义为链接状态,以便单片机控制液晶。
' m. A" g) X9 @9 Y/ C. F% J0 n( t: v% k2 s
void delay(u16 num)* ?, f; s0 `. | r; Q
{
# V+ `8 ?' N3 J' D6 w4 s4 N. i u16 x,y;
% n* N0 E2 u2 |) D for (x=num;x>0;x--)" {2 U" \# B2 k2 J; G; F
for(y=110;y>0;y--);
4 v4 g3 T/ X- S" O+ N7 c7 J+ q
9 w% q- J0 k5 ]& G# A Q. V}( g1 ?' G( R, |5 Z8 b; ]. K, U
void write_cmd(u8 cmd) //写指令
6 q' ]4 G0 B/ L4 x( \{4 E' K4 B% F( Q- j
rs=0; //选择指令寄存器
; |& T4 i4 V* \% Q. K4 H- Y4 Y rw=0; //进行写操作. D2 k* T$ r1 L p7 M0 L
DATA = cmd; //把指令传给单片机8 S+ ?& K! i7 B$ D6 L+ l; ?
delay(5);
2 Z2 Z5 X" L/ L: s a( u7 H en=1;
4 U2 G$ ?9 O* X% z6 ? delay(5);3 o& k z p3 h4 x& G
en=0; //en为使能端,当en由高电平跳到底电平时,液晶模块执行命令。
1 B5 t; E+ y6 `! E6 w7 U}
4 L. E$ j/ H' v( @2 @7 m7 ^void write_data(u8 dat)4 c0 W1 |! ^5 i# y5 i4 Y. n
{
1 j, [& ~3 k; `* _, q7 H4 t8 G7 d* o( B5 K rs=1; //选择数据寄存器
) U8 m2 ~) b+ Y# z rw=0; //进行写操作
4 c' k4 K! q8 u DATA = dat; // 把数据传给单片机
! l. z& q3 s5 o delay(5);
2 \) S( X( E/ @, d8 |7 i en=1;* Z. j# x6 U) i3 c+ ~3 R
delay(5); @3 y& _% x- J0 K
en=0;0 y8 z1 C3 g2 s# h
}
3 W$ T' h) V3 r9 E7 G! I( Wvoid lcd_init() //初始化" s5 K5 O' ^) v2 |( G5 o9 `
{
1 v6 A2 i! P' f) P$ L$ \ write_cmd(0x02); //归为
: w y) y7 M" ?8 h+ u& a8 ` write_cmd(0x06); //设置输入方式
" _6 R. q+ G- E1 ~ u write_cmd(0x0e); //控制显示开关* u4 Q" E: L: `4 Z% C
write_cmd(0x38); //功能设置
7 |' {; ^) s! I: Z/ Q$ m) |. C4 v write_cmd(0x01); //清屏2 u1 k5 W7 Y( E
}
% a& s( `5 Z' [# P' p- R& Avoid main()/ K3 ]- R9 c* ]3 ~2 q( o6 C
{! Y" D; U, W3 {8 J$ V
rw=0;
# [9 I! b- [* r8 A: @9 Q2 S rs=0;
; J8 R* B2 F7 r3 w- s1 N en=0;
" H2 Y& a$ K, p6 a' Q4 R lcd_init();
0 T# @+ F# n3 Z: g write_cmd(0x80); //0x80,(0xc0)为在液晶上显示的地址;80为第一排显示,c0为第二排显示。5 f4 f: ]1 I5 m! N1 A
write_data('x'); //显示的数据" e- n% V: w% \- l$ Q& m$ }
write_data('i');
+ s: w9 y6 |8 Z3 c% Z% [ write_data('a');
& D, |& @. g7 k8 F" x write_data('o');
6 e- \" Z7 O" O write_data(' ');
- w3 ~3 e& ~; {- v: R7 R write_data('p');$ H/ k" j: ~8 v
write_data('e');
9 d t- Q$ o- h. {5 b0 k write_data('n');0 `# \3 r" f! P6 u5 d
write_data('g');" F. |* _" f- G' ~
write_data(' ');; D+ z- ?3 C+ \( e; _/ N7 L
write_data('y');2 m$ j- ]4 j5 m9 |9 A+ y$ J/ `
write_data('o');, i' Q+ L. @$ x; q6 s9 n
write_data('u');' S1 `1 m4 E$ T
write_cmd(0xc0); //第二排显示
) ]' Y) p: b5 @' n3 z' o/ X write_data('t'); //显示的数据+ t( d5 z4 K3 c: |
while(1);
/ X# v2 Y) A; J, ?% g}
# ^9 Z6 n* r0 L3 \. f. J3 |. }' @$ o5 X6 x) R6 G; D* `
下载:. @9 n- \ w$ x1 o
# k P0 `8 `( `+ D. Y( b+ y
! g. I R4 i# e0 {6 d3 ], {
|
|