|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于51单片机的ST7920芯片lcd12864液晶显示程序
3 a5 }6 r% t" e4 M5 ^5 w1 Q( z Y2 H
* }2 t) R9 r. [4 t# c: ~& i有助新人学习12864液晶的资料
/ L- M! {: I. n$ ?; E& E- E3 @# ]( j- R) }) }( {9 O
ST7920驱动程序:
1 M. `, k" G F9 y/*********************************************************************************
7 [& _0 x; }3 Y0 [5 S* 【编写时间】: 2017年3月19日
) P* [# q) |2 P9 c. b* 【作 者】: 清翔电子:03$ N r5 g" l; f5 V" T: }3 N& G
* 【版 本】: 1.0
c% C* |: p: M8 i$ y1 m6 ?( E9 T* 【实验平台】: QX-MCS51 单片机开发板
# J1 D# @0 i/ k( } O* 【外部晶振】: 11.0592mhz
+ e" @) r6 ~# Z, D' r* 【主控芯片】: STC89C52RC
! i5 J. E, N( u9 q" P" ]! g* 【编译环境】: Keil μVisio4
' ~6 {+ k! f; @% d- T/ l6 T* 【程序功能】: 12864液晶显示测试
. @5 B1 @3 m* Y* 【使用说明】: 使用液晶前拔下数码管J6跳帽$ h7 }9 v0 h" i0 \' s+ U. J
12864屏幕向板子外插,插在L1排母上3 B& O. z3 u! b% a" E
**********************************************************************************/
5 X6 K- [5 V0 n8 d. h. C5 x0 t# }, C) Y( W( d2 e/ M
6 A# `. ~: r" P9 C
#include <reg52.h>
3 {+ B( A9 |- h1 ?9 @/ y, A9 S#include <string.h>5 P- r j1 j% e5 T8 I7 V- j4 g
& j) d; v+ d t& M5 c9 o$ p& v; r7 W# [. v
#define uchar unsigned char, @$ P) ] H; m) E6 p p
#define uint unsigned int( e5 p ^. z5 o: h
7 `8 Y0 N) f9 }! ?, |
; n4 B4 M, r3 R) k( {3 b5 Iuchar code IC_DAT[];
5 |0 {* t0 a$ N ? ]; r" K5 Guchar code pic1[];
7 G, E1 ~+ B5 A9 tuchar code pic2[];
( b1 D1 y) f( D% O y5 a0 }uchar code pic3[]; # l/ a: ?, Z6 I% v! Y
! S2 l" h1 Z7 {' s% K, j9 ^
$ Z+ l- D* w( [9 S4 Q1 P/ D0 Nsbit RS = P0^7;! a$ s3 N$ h L2 u
sbit WRD = P0^6;
$ U% ]1 X, e: k- T$ ^sbit E = P0^5;
+ M; `& ?: {$ Asbit PSB = P0^4;7 v: l5 s# ~) |/ K$ G
sbit RES = P0^3;$ n/ U ^0 ?# ?" z( W
" t3 Q/ X+ w) S3 M* F4 R$ S+ }; p# H; |! X
void TransferData(char data1,bit DI);0 x& u2 J. C$ b) C
void display(void);. \3 G' x/ q; I4 Q5 `+ X9 f
void display_grapic(void);' [8 D/ L5 x! \7 I
void delayms(uint n);
2 o" q8 [% V x3 u4 Jvoid DisplayLine(uchar line1,uchar line2);7 O) D+ U" K7 C$ Z d
void DisplayGraphic(uchar code *adder);7 t* r5 o$ X9 z
void delay(uint m);5 c: E# r! c4 q9 z0 T4 D
void lcd_mesg(uchar code *adder1);1 z8 t. j- s2 y( p
8 F. B" C e+ f9 @5 Z
5 j2 A: p0 _7 ^/ u' tuchar code IC_DAT[]={) b, j- t" O8 p" Y1 V3 r
" 智能小车 "
* b7 i$ j+ J0 Y: L: V" 俱乐部 "% O& X% {4 r7 N& p4 G
" QQ 群号: "
" ^; s8 {; A, L0 I$ F' ?" 12933307 "
1 E, O5 }) r3 y( ?; P; r};
8 L+ h- F) J9 G1 P" ~- G3 D9 q% D3 n
# |) h- x$ y. i1 h( _8 x
uchar code IC_DAT2[]={1 C- q# @$ u8 z) E/ o& E
" 床前明月光, " //0x803 O* ?. F( V- @- r, R; h' S3 @1 h
" 疑是地上霜, " //0x900 N. Y: ^/ c5 z* x- ]" H
" 举头望明月。 " //0x88/ W+ m4 ~8 W2 {' L& p9 V9 L
" 低头思故乡。 " //0x98. |6 ]- K1 H5 o
};. Z6 _& B' |* q
& C, Q$ N1 t4 g. U& d$ n
8 ]5 {% @3 n3 f! u! C% ^$ ^: v
/********************************************************************6 {, h1 W0 A6 W6 l% ]
* 名称 : Convert(uchar In_Date)9 r' ]2 ?& l5 \* Y( [
* 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。
9 o/ @8 J0 B/ G: h% |: `3 ~, F* 输入 : 1602资料上的值' K) u! y, X1 c6 ]9 G! e5 E. U$ i
* 输出 : 送到1602的值
- U& A) n u- [# Z S, _2 T$ c***********************************************************************/
" b+ G' |1 h! O; ], K2 Funsigned char Convert(unsigned char In_Date)0 Y# f: p; K$ H2 i/ X0 m
{* i& j% A0 E$ W2 I! x: R
unsigned char i, Out_Date = 0, temp = 0;
) o2 k7 }( k i2 k: K" {, C for(i=0; i<8; i++)
Y6 d! E# D2 z- s w {+ r3 w% C! k8 P9 }! ^/ l
//temp = (In_Date >> i) & 0x01;
) y0 b$ L( C" ~) J p //Out_Date |= (temp << (7 - i));
9 t7 b. [( Q- O% V8 E! t% M% V Out_Date= In_Date;
* G. K9 J, }$ I4 A* j, f# s1 h3 \% n6 O+ |
G J. f0 E# ?7 r3 M9 l! w: s$ K5 H
}5 Z" ], n& | L- o7 |' B
return Out_Date;
6 ?# R1 b' U, ]- P8 s2 S}, K H/ t3 E1 K0 t3 j' [ b5 T
: N5 U0 `$ m, k: D$ b' h
. X0 O( v4 ]# pvoid initinal(void) //LCD字库初始化程序4 }/ c+ z) H" r
{) \# l3 `$ C6 I9 l, C
delay(40); //大于40MS的延时程序
$ f6 w4 e0 @* C' V& `" p7 t5 I PSB=1; //设置为8BIT并口工作模式- D" I8 T. g+ M4 D; ~
delay(1); //延时* r/ ^9 t! c7 g. C% {1 o q, Y( y
RES=0; //复位( i$ ^8 |4 M5 W
delay(1); //延时% U+ ?6 L& f/ P+ T! G$ p$ c
RES=1; //复位置高0 i6 W8 E4 ?1 T5 q! S! \+ {* U' F
delay(10); N+ e" O @2 J% n6 O
TransferData(0x30,0); //Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF
( q* z0 U2 q2 C4 i: ~& G delay(100); //大于100uS的延时程序4 {) {2 c! `; U% H6 Q' S3 E
TransferData(0x30,0); //Function Set
8 W4 Z1 L4 W# i delay(37); ////大于37uS的延时程序+ O% w- z0 P! S4 F# _2 }
TransferData(0x08,0); //Display on Control
7 v$ N. W" l& q1 H& i delay(100); //大于100uS的延时程序7 V0 q/ b, H3 v7 ~& T# F' d
TransferData(0x10,0); //Cursor Display Control光标设置' ~( N% t% m! l# ^1 N' k J
delay(100); //大于100uS的延时程序/ S: e3 [( w3 w% o
TransferData(0x0C,0); //Display Control,D=1,显示开
0 U6 q3 w. o% F delay(100); //大于100uS的延时程序
& a- C5 }& ]) y2 B1 y0 g+ F TransferData(0x01,0); //Display Clear6 o0 n& ~# ^% ~7 I
delay(10); //大于10mS的延时程序
( k; U& M2 E; x- }7 k TransferData(0x06,0); //Enry Mode Set,光标从右向左加1位移动: d; s. H! E) c N
delay(100); //大于100uS的延时程序0 y8 O' ~: E0 [
}
- f3 j& U' l, M
6 O& x9 \& ?1 V2 j
4 y$ F3 c6 R% j. D) b! t/********************************************************************+ T0 m v4 `# ^1 r) R# p
* 名称 : Main()1 W: F- @& E* g" ] l
* 功能 : 主函数
1 U U0 ]- T& q* c% \* 输入 : 无
9 k& Q+ Q! @8 L% n7 S: j- C- f4 d* 输出 : 无
: X0 {- J. M7 o7 K$ M2 M***********************************************************************/- B a6 N2 G( E" }4 B; h3 ^9 v
void initina2(void) //LCD显示图片(扩展)初始化程序5 v* p8 K4 q, O9 A, J/ m2 u
{0 R9 H0 a$ P6 W5 J
delay(40); //大于40MS的延时程序
6 w% B5 j+ p" Y, n6 p PSB=1; //设置为8BIT并口工作模式
9 Q% v: X+ |* g* [2 k& f delay(1); //延时- x' x o' _/ v: @' _! y2 ]
RES=0; //复位3 J/ L, s, I Y# r- r6 G
delay(1); //延时
5 `+ Y N7 J+ h/ | RES=1; //复位置高3 }1 u% g" f1 X! O. b
delay(10);
$ ^2 S$ \2 W+ O* V, j
5 Q' J5 X. e7 o' [1 C$ p2 p( Q3 q3 `/ `- k U
TransferData(0x36,0); //Extended Function Set RE=1: extended instruction) \3 {6 ]6 U5 s7 g: o
delay(100); //大于100uS的延时程序& a! a, h& u1 Y" W _, u8 B' i4 p
TransferData(0x36,0); //Extended Function Set:RE=1: extended instruction set" `# t# @2 j& ~: U! ]3 x
delay(37); ////大于37uS的延时程序6 ]4 r! ]; K8 Z' [
TransferData(0x3E,0); //EXFUNCTION(DL=8BITS,RE=1,G=1)
* y1 c+ n* s; O r7 f delay(100); //大于100uS的延时程序; m+ Z+ T% ^$ m& z9 X ]0 W& p! D
TransferData(0x01,0); //CLEAR SCREEN: V f6 g$ v2 ]5 D+ X
delay(100); //大于100uS的延时程序3 {% W& z- ?6 M# h( G. {" u
}4 U9 }) K( R1 ^' v/ T4 _, Q* l3 N
5 `+ p, R L) I6 v
) x' Q3 y8 H! g* n: {/********************************************************************
6 M* M4 L5 H5 P+ r) _4 \* 名称 : Main()
* j$ S. Y& t& b1 r9 N* 功能 : 主函数2 } E+ O! ~% [' e
* 输入 : 无
& x G, X: I& V" n3 b. W4 u- D+ \* 输出 : 无3 E3 _3 Y" S2 R7 n) Z" Z$ g8 B
***********************************************************************/
2 P. q( X4 X2 D l) ^" K( Ivoid main(void)7 S1 B7 q4 p' O G% b7 o8 R
{6 D, b# h9 B/ E1 q
while(1): A4 D9 F1 O' w3 p( G* h3 @
{# d; E# D: o4 p3 n5 s& k* h$ ]( O
initina2(); //调用LCD显示图片(扩展)初始化程序* l. W6 o8 q" T
) Q+ o& F" q" j1 r. `5 S1 H
DisplayGraphic(pic2); //显示图片2, t3 W9 q" x* ~
delayms(200); 1 m# Q1 K4 h3 `7 T" b
: j# u" ~3 h. L( L% a" k9 q! ?5 c2 R4 |# _
initinal(); //调用LCD字库初始化程序
& D; ?% m, S+ \+ y delay(100); //大于100uS的延时程序
2 w3 W/ z5 z* F* ?0 F7 j lcd_mesg(IC_DAT); //显示中文汉字1/ K0 W# e- E, f" @" L( X
delayms(240);3 c N8 L, k& b6 l0 k9 ^* p
delayms(240);3 A/ P6 ~% Z9 I* {8 ^% n2 v: O
0 c* ^2 E% q t& g0 _ [ m initinal(); //调用LCD字库初始化程序3 _. A$ x- r) K1 b) m$ K% o4 I
delay(100); //大于100uS的延时程序
1 U% k' `7 r+ X. p, ?/ f$ u" t* [ lcd_mesg(IC_DAT2); //显示中文汉字2
6 V% v. X3 b: f3 d0 v delayms(240);: G. z- i8 t K5 z! C: d1 g& C
delayms(240);7 k' h+ P: S. n& s) Y) L
initinal(); ; B& o9 O: d5 a: t ?
}. b$ `$ i* O1 r
}, @; W C; ?3 e. }
6 J3 N& j% @4 f5 A. x
e, v! z* k8 d; i- w/********************************************************************9 `' v {3 H' \4 ~" w! W! _
* 名称 : Main()
; j; }" k3 T3 n- H$ x9 v* 功能 : 主函数
7 X* S5 S4 a1 @4 l* 输入 : 无8 j- ^3 e$ n- i/ a, H9 W! H
* 输出 : 无! J; ]( Q: t0 a4 w) l9 s
***********************************************************************/( b8 @6 Y) j- X. E2 X" j: `5 w
void lcd_mesg(unsigned char code *adder1); C' p! S$ m" s: z; K, j5 G" \2 t6 T! p2 `
{9 R6 U5 E2 M2 C( W) l% M9 h2 @* V/ l# u
unsigned char i;. m% Q3 Y% |9 D0 d
TransferData(0x80,0); //Set Graphic Display RAM Address
0 _3 H' l" Q- ]4 G4 R4 W: B delay(100);& p, `- \1 m9 U9 v8 D+ ^
for(i=0;i<32;i++)
( E& J( q3 g( K' [: \ {
! @0 G* i4 Q( j* U$ M TransferData(*adder1,1);- H- Z, f3 n6 u: [
adder1++;
( f% `3 V3 h! R1 i3 q }) S9 Q+ a% T2 m
+ U0 H2 g% b5 f& i' m% z
* @; x' r9 E4 m4 Y( j4 x* }2 J
TransferData(0x90,0); //Set Graphic Display RAM Address( J7 P9 F/ [4 e) J! P: _; D
delay(100);
! j! |2 i( i/ n! ~; h( r# m7 l for(i=32;i<64;i++)
6 S5 G W8 q( ~) } {
4 s+ }1 Y% a% \: Y# \ TransferData(*adder1,1);! u& }$ K& ^. \* m3 C" ?7 O; I3 n& j8 @
adder1++;
. \- B% v; [$ T }
# V8 d z/ m0 h ]9 j% e8 `7 h} x) A6 I; A ^* r9 L
0 K7 J7 `( Z) `* b. r3 H& D! U
- H+ g8 n7 S p/********************************************************************
% C/ z5 E/ s0 h Y' Q+ H* 名称 : Main()
! f! J4 `7 r/ o5 e: B: u" y: Z* 功能 : 主函数
7 z3 n* M1 \/ e0 l4 J* 输入 : 无
% v l2 ~. z5 x/ D& c) ]* 输出 : 无
3 v3 H& c5 B; s1 k2 T$ e x***********************************************************************/- q/ r1 J7 `8 p6 u" f
void TransferData(char data1,bit DI) //传送数据或者命令,当DI=0是,传送命令,当DI=1,传送数据.; P; x4 @& j$ a. Q5 d/ z
{
+ R5 G' P3 h7 {( F WRD=0;
, o: @' P4 y/ Y4 P( B( b RS=DI;' m+ @: K0 F5 R, \8 k% A
delay(1);
1 M: |8 A! J4 M+ w G7 o P2=Convert(data1);
' c" Q% M- H( ~( X E=1;9 O9 P8 x2 T9 o' H2 T
delay(1);0 e6 p+ t+ s( P4 |
E=0;( {, A5 _1 k" n6 O+ X: ]
}% w* M2 ], w. S4 n) D% @& Z4 Y0 h& w* h
4 X3 x7 b2 G$ ~5 O6 q' D5 V4 A6 g2 B0 X7 i5 O) \0 e K
/********************************************************************2 t0 _. R" a& s( w) r1 m v8 M7 b H
* 名称 : Main()
) L6 v; }3 e' a* 功能 : 主函数( Z9 F& s9 j$ d0 e4 r+ q
* 输入 : 无4 y) a3 a3 [5 }2 @! o! \ r* b
* 输出 : 无* m& ~ n1 D' b3 G: k
***********************************************************************/ G& G/ o4 j$ d9 @
void delayms(unsigned int n) //延时10×n毫秒程序
# b9 O- u! g' C8 |, M6 I$ c, m {
& {( |+ U# w1 [ unsigned int i,j;# k! L( h4 q; t
for(i=0;i<n;i++)6 C7 z1 a4 }9 D5 i" }& M
for(j=0;j<2000;j++);& L/ u; k3 o7 r8 E+ c- o
}1 e! [5 a+ q, o2 Y! r+ t+ w
, H1 Z' ~( ]$ r+ d
, r& A+ }; l5 I& |3 e K/********************************************************************8 u U' r. p8 B! Z% k: f# S
* 名称 : Main()' d6 e0 ^- ?# e
* 功能 : 主函数! M2 U) u7 ?3 P! i: \8 w6 {+ A
* 输入 : 无
3 {6 G! @' M6 A2 Q8 Z& v s2 B* 输出 : 无: U4 A# i# ~$ y% P; e0 p8 T
***********************************************************************/
" S! Q! Z9 ?4 f0 e- X0 Ovoid delay(unsigned int m) //延时程序
4 Y& j5 M) C" j' L) R' G) M4 C {" V' k+ Q6 \( f7 O7 o. e
unsigned int i,j;
# f7 i- G- ~6 G for(i=0;i<m;i++)" c4 e& }# \! U9 o( s
for(j=0;j<10;j++);8 i g5 M: A8 ~0 O
}
' w" R+ M2 h" H- O( \ {5 W1 q4 w
8 ~& k% g7 m5 _" R# e% B
! [+ R; T( M" N+ P c3 M' n/********************************************************************( o4 U/ d% Q& o6 Y% b1 L
* 名称 : Main()4 Z" C- c. \! F% H
* 功能 : 主函数
7 i- Z' @. h+ p( O* 输入 : 无
9 i: ~2 G- P. M6 C9 @1 f6 Q8 D* 输出 : 无
( C- k3 O- i O. l% N***********************************************************************/4 x3 O5 B9 d, P1 M
void DisplayGraphic(unsigned char code *adder)& T" U. c& E6 V; i N. r
{3 t3 O* I( N* ]9 e7 \
3 v4 Z" B& {$ f/ @- {5 M) c
J* j% V9 X$ a( S6 Z _" S8 Y int i,j;
- ?, |' G* r2 a//*******显示上半屏内容设置
! B+ r4 a' `1 }2 `1 P for(i=0;i<32;i++) //2 a8 i6 [* z5 n% u) W# V" N
{
" P$ X8 D) R" l& l8 K; A4 f m( ] TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD8 Q$ _1 }+ Z9 ]9 L5 C; X' ~+ e$ i
TransferData(0x80,0); //SET 水平地址 HORIZONTAL ADD! G. ~ P; z: x* E1 u
for(j=0;j<16;j++)
& L9 |2 T! a# w+ e* p+ w/ v0 h7 R {
( U3 ^8 \7 m6 X) Q9 q& z2 d( i TransferData(*adder,1);
7 L8 Q% {! c: d& u; M4 R adder++;- i3 u0 B: D! B: j! |5 i
}/ I6 n- N s- G8 [+ E" s/ V6 Q! U
} 7 s9 T, s3 ]+ F9 [2 V
//*******显示下半屏内容设置
9 T0 @* |1 D5 a2 N for(i=0;i<32;i++) //
4 @+ K: v) j3 P/ ` {
- c6 }! F* T, F9 Q TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD2 z+ G+ b$ f/ `: m- l
TransferData(0x88,0); //SET 水平地址 HORIZONTAL ADD2 f# a" F) k# Y& [7 p# v
for(j=0;j<16;j++)$ U* I8 \2 x6 u3 W
{
, Y3 ^0 o! G/ q) ^' s0 l8 ~! s TransferData(*adder,1);( u3 B7 v) }5 f0 ~3 ]. {
- A J7 w) J! {6 Y
/ L e0 u8 w6 {- w( ]0 R
2 o. Y3 f* O# h, R0 L) O; C1 x…………余下代码请下载附件…………$ i& Z, @! l( @* [) H8 _
) a7 i; k" \/ B: z2 a; w( w9 c, N1 Y" P/ ^
下载:: A# W( U( Q0 g7 Y' ~; B
4 [/ t5 u. M" v
* q& F& [/ e! `; d9 F
|
|