|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于51单片机的ST7920芯片lcd12864液晶显示程序1 ?+ V; l9 ~6 g5 |8 H
- t" \6 K" p% O8 L% q" l) T
1 h* B' K' k z; ^. V有助新人学习12864液晶的资料
3 ^0 \8 I/ z9 @$ [, e8 n, N
, G- j" O- |, n2 \6 m5 e4 gST7920驱动程序:+ V/ Z" U3 t2 l" |1 H
/*********************************************************************************
: B( |/ h, E: p! V/ S1 W4 r* 【编写时间】: 2017年3月19日
! d0 i* ~7 |/ i* ?1 V* 【作 者】: 清翔电子:03
/ Z% R% Y$ B2 F4 z+ l* 【版 本】: 1.0- p! F4 M. z) q( s, \1 M1 d
* 【实验平台】: QX-MCS51 单片机开发板) u0 k5 ~( |8 |7 S2 T
* 【外部晶振】: 11.0592mhz
' a# D( K0 o; w" ~) j$ ^) \* 【主控芯片】: STC89C52RC
# u" L# I- T5 v* 【编译环境】: Keil μVisio4 . T/ q. @3 Q. S" y, v
* 【程序功能】: 12864液晶显示测试
; Y) v: Q, c3 x* 【使用说明】: 使用液晶前拔下数码管J6跳帽
- m# H& ?8 n5 G3 K k. E( H: B12864屏幕向板子外插,插在L1排母上6 b5 |) M1 G: Q" L Y, M2 m
**********************************************************************************/
6 E4 @& k! U/ |$ g* e4 T2 q5 K8 I( v. B/ m( M3 Z" ]$ \
`9 D$ k2 u2 O& ^#include <reg52.h>
; E/ B9 o: c7 x/ ?7 [: X% ?#include <string.h>
9 ]! e1 ^! V7 G. p+ M- B
4 d! _/ v! S6 C6 i6 Z8 Z2 l( D
: X4 m+ y r" h4 {& J7 q3 X#define uchar unsigned char
, x- P u' y3 S0 r6 \' n#define uint unsigned int5 x1 Q; q H' C
" C' Z5 `+ J4 F) W: h
! y' n/ J ~; F* l- \4 ^) puchar code IC_DAT[];5 D, p" K5 @% X) {
uchar code pic1[];9 k' g2 w5 V+ I5 C1 U# ]; l h6 Y
uchar code pic2[];2 U) K% e* h: g# l i! x8 }3 e; \
uchar code pic3[];
/ i* U5 ]1 S) Q* C) P9 m4 w; x% n l5 |/ h2 j$ d- W
1 t) B- b1 |' t: ~sbit RS = P0^7;
* g" @$ K5 }9 X0 Z psbit WRD = P0^6;, B1 }8 L8 N$ y9 F
sbit E = P0^5;
& Z: R& S3 C( w& J, V4 osbit PSB = P0^4;
0 a2 N* n0 a/ s8 L& Z2 J+ rsbit RES = P0^3;
5 G" S$ ^/ W: h: o5 Y6 {
. {9 K" ?' k1 A. P( f! h! I0 G% o/ n& W# P! O- Z
void TransferData(char data1,bit DI);+ _% H1 X( c w( m
void display(void);
" m ^% I# k9 W9 o2 ?0 P" Ivoid display_grapic(void);$ W( n: J% `( D
void delayms(uint n);" K: a9 G" a" j5 k% B) E& k
void DisplayLine(uchar line1,uchar line2);0 }& p; D# S" Z1 G# F* _9 O& r
void DisplayGraphic(uchar code *adder);
) F4 {% e1 k" f9 bvoid delay(uint m);
- f2 e3 ~' d4 t% X8 S0 vvoid lcd_mesg(uchar code *adder1);
# ^9 D9 T* H" `0 X6 a( g
9 \* O# |" A; `5 W( [) _# a- ? a5 W3 z5 f8 F( j# W/ l
uchar code IC_DAT[]={9 S& |) s' F) G1 E# `0 i
" 智能小车 "
: H2 c9 }, M% V9 {! E" 俱乐部 "
& \3 k) c9 e' I. y6 `" QQ 群号: "* k# X3 C1 v; [- @6 W8 ]
" 12933307 "/ Z: l! S7 e1 {& J0 d9 y
};4 y l2 _& v; a1 r3 V
; Q9 }# o. p; p4 v" I- j( d* g
. ]( @# u+ D+ o0 E. M2 X: Yuchar code IC_DAT2[]={
6 J2 W/ S, m' G; f7 ^( B q8 a$ c' z" 床前明月光, " //0x80
$ X7 ^! I4 U* l" P- |& O8 Z% T" 疑是地上霜, " //0x90% J3 [) @( c+ @, Z$ K" M+ y+ m1 p& v
" 举头望明月。 " //0x88" W1 ~" \# U5 n# e0 @ I- C' l
" 低头思故乡。 " //0x98
8 B; |" h& O$ _6 m};
! e8 t3 G# u# O7 d. ]* d7 }) Z$ R1 E9 I- V; S* X
! e. I6 K7 s5 N" S6 p8 A/********************************************************************
2 K+ P# {$ c/ c- B% R" b' Z* 名称 : Convert(uchar In_Date)$ L; ] |% r7 j
* 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。2 F0 N; O# j% {$ j5 w6 Q
* 输入 : 1602资料上的值
3 k& X7 L( A3 x. Y( J+ B* 输出 : 送到1602的值
% Y1 E% F# W1 t5 R***********************************************************************/
) c3 v/ p5 x! X) S& G1 Dunsigned char Convert(unsigned char In_Date): x* ]( U! r* n# {! D
{5 Z7 K2 i% v6 G8 G
unsigned char i, Out_Date = 0, temp = 0;: s+ o1 X# |2 \) l/ U4 H2 ~: Y m
for(i=0; i<8; i++)
4 M6 o. s4 [9 d5 S+ P) \# W. X K {$ e$ I/ A, _% F- x, ^$ F
//temp = (In_Date >> i) & 0x01;( f, k0 h6 b1 m0 b5 U- ^- \
//Out_Date |= (temp << (7 - i));# f3 A) |3 Y6 w
Out_Date= In_Date;) m+ o1 a, m. w3 a) H& I( k
9 E# a1 Q) V. A2 `0 y$ r
' i9 C0 D/ M$ z. {& y: H& e }& \; L% J D+ S
return Out_Date; U' c# z5 e- \$ A& a& l
}1 d: N: t! q1 L! }
. l# I) j. X. \' r5 W7 Z! Y/ Z# V4 O& E6 O6 b: {
void initinal(void) //LCD字库初始化程序
! [$ D# `6 x$ t9 m* P9 Q7 _4 D V{0 _" p8 r, _2 t$ n
delay(40); //大于40MS的延时程序
0 \; _" z' Y4 X7 S2 a PSB=1; //设置为8BIT并口工作模式
, G5 C- @6 S& Q. x delay(1); //延时
" I4 {$ Y5 A3 N6 j RES=0; //复位
; \4 n; n9 a! |2 |, P delay(1); //延时
]4 z& S5 g' ^' S) l) _4 d RES=1; //复位置高1 G+ J/ c' F; n7 P
delay(10);
, g3 y$ @9 W( x' f TransferData(0x30,0); //Extended Function Set :8BIT设置,RE=0: basic instruction set, G=0 :graphic display OFF p; S8 M6 c0 J8 b. |/ _# ]
delay(100); //大于100uS的延时程序3 n3 v2 j+ W- H8 G+ Z* n* [
TransferData(0x30,0); //Function Set- l$ g/ g/ z& ^, F* n5 K
delay(37); ////大于37uS的延时程序
* E" t* N: I1 @ TransferData(0x08,0); //Display on Control- ]. F- y) s5 g; u9 }- x- e+ _
delay(100); //大于100uS的延时程序% X" ?5 _7 N, L, P; O: ^9 v6 Y
TransferData(0x10,0); //Cursor Display Control光标设置* y5 {6 F& L; b0 d' o6 C: X
delay(100); //大于100uS的延时程序 b- L+ @" E( a1 a7 w0 R+ S* |" F
TransferData(0x0C,0); //Display Control,D=1,显示开
; o a1 `: Q: ^+ M% I$ v# s delay(100); //大于100uS的延时程序& z' n5 a: n7 y1 D1 p( H( _
TransferData(0x01,0); //Display Clear
8 }0 D3 O+ V; j0 X& b: ` delay(10); //大于10mS的延时程序* H9 S0 a$ M" _3 j, z) c6 U
TransferData(0x06,0); //Enry Mode Set,光标从右向左加1位移动5 I: E, N! e! G5 _- I" I
delay(100); //大于100uS的延时程序
$ A4 {& x" L# |. f }
% n" ?) P3 ?; h' S6 V3 I1 Y: D& a
, O5 }$ Y; M5 M$ x* X
1 a( s; n5 f/ T/********************************************************************
4 x" q. y: u! G, Z! i' j+ X* 名称 : Main()
! `, b8 |' n3 o" \* 功能 : 主函数
. I3 ]- H3 Z6 W Y" G( x* 输入 : 无6 ~* c0 \6 x5 G
* 输出 : 无
8 @& n# C( [& {" u. {% P***********************************************************************/0 e% b5 h' Z8 a
void initina2(void) //LCD显示图片(扩展)初始化程序
- _0 Y7 u5 q4 _) s! `* U! y {
* q( ~, Z! |; @' ^, l delay(40); //大于40MS的延时程序- X- S ^7 o, P; ~4 g- ]
PSB=1; //设置为8BIT并口工作模式
* l6 z! @4 u& o$ a9 e$ g9 u delay(1); //延时" W- I) T2 e; W- o1 p _9 D: n0 ^. D! b
RES=0; //复位2 Y2 i" d2 A6 B( N. t
delay(1); //延时- E, H E( T* b j' h; @
RES=1; //复位置高! T1 k* D/ q, l- n, F& K, E
delay(10);
+ K; p( S$ ?3 a' x3 r" J v4 F, |- G8 O9 X% ?, S$ m$ ]
( P4 r- x" J* e- [
TransferData(0x36,0); //Extended Function Set RE=1: extended instruction6 r0 Z4 `' M0 A$ z% A
delay(100); //大于100uS的延时程序# I* `8 _. ^5 ]8 _
TransferData(0x36,0); //Extended Function Set:RE=1: extended instruction set
: k4 v g1 T' @5 w! P0 _8 d delay(37); ////大于37uS的延时程序
9 f6 _7 |4 E4 o% y4 L0 A3 l TransferData(0x3E,0); //EXFUNCTION(DL=8BITS,RE=1,G=1)
7 H% d$ ?0 h1 \, L- i delay(100); //大于100uS的延时程序0 t: x+ m2 D L# g5 V1 q# f
TransferData(0x01,0); //CLEAR SCREEN
( }6 ?& S S/ p1 h. C delay(100); //大于100uS的延时程序
, x: L% }+ N# p; E; R }- l+ V- g; r; Y
" P2 X! o. H$ Y' o) L! ?' j2 c. h: |$ K w: a3 q8 m
/********************************************************************
0 \- U, h2 {$ F- g# w2 Y* 名称 : Main()
6 `) w* \: c W( I6 f* 功能 : 主函数9 A# Z# y4 D% \9 O
* 输入 : 无( t/ D5 T, f7 J3 D$ C* a% u" d6 g1 |
* 输出 : 无
0 q# I! \2 c, ]3 y* k2 V8 O***********************************************************************/# i3 y' u6 u; M I2 n. U# M+ C: V
void main(void)1 Q& }/ R$ q5 y$ b, Y: s
{! L' H) c3 G/ e5 N8 _) h' J
while(1)
2 k4 j! S2 n9 [) p. y g$ K {
3 O+ \1 R) Y9 N. l. S& _ initina2(); //调用LCD显示图片(扩展)初始化程序
% k0 }; ]% m7 r& I' e! V
' d; k8 d) J4 V/ E4 F' `, h DisplayGraphic(pic2); //显示图片2- p" V/ p! p8 o7 H) N9 o. a
delayms(200);
) } L# Q8 m1 Q5 g0 C. H" \ Y+ ^6 v4 @* i; [ S: b2 X4 R c+ e
1 ^. h) D" ~( z' N% m
initinal(); //调用LCD字库初始化程序* P9 R; Z K* n! ~3 A: v
delay(100); //大于100uS的延时程序
* z5 t6 e0 O/ U# V8 p lcd_mesg(IC_DAT); //显示中文汉字1; b: O9 L; U' F7 `
delayms(240);
4 o3 a6 k1 |0 v" L delayms(240);0 l! g! w& H5 `) j$ S* \7 X
, n# \7 M1 i5 f9 I( t% ? J- ~
initinal(); //调用LCD字库初始化程序
& x {7 w$ ~ ^! z% V) b delay(100); //大于100uS的延时程序
6 Q- H' d0 ?' W/ ` lcd_mesg(IC_DAT2); //显示中文汉字2
) O4 s7 U2 v5 |# H! f4 F$ { delayms(240);1 [. S* f: Z( y `- W
delayms(240);4 K V8 F/ G" X5 Y1 N ?% H- S
initinal();
6 ]: ^/ O/ I6 B% b: x; q }* w7 j+ T. F+ _7 c9 c+ Z! @
}& [2 s3 h0 H* m7 O2 D* m7 i) {
+ p: s$ O2 G; _+ G0 y4 `6 Y' d7 m
# ]2 f/ f; `* I/********************************************************************
" E3 \# Q6 o4 U; b3 M* 名称 : Main()* J# u1 r* Q/ @, Q; @7 i' S' o% Z% j
* 功能 : 主函数+ }7 ]! L8 Y/ ^% ?2 ~; c6 U9 ~7 g, c
* 输入 : 无6 S8 P s# P4 `) |
* 输出 : 无
9 r4 G! k7 v- _7 u3 P***********************************************************************/
4 U* U) `5 c. q% m2 s* A0 Zvoid lcd_mesg(unsigned char code *adder1)
* R% U7 x/ D& e- Y u{' L, E N5 m2 A3 Y1 _* I
unsigned char i;
" ?3 m$ ~/ v* v2 M }1 A& E" X TransferData(0x80,0); //Set Graphic Display RAM Address' R% I+ D$ Q0 K6 J( N# R
delay(100); s* O& ^2 V, M, ~: [/ C; i: Q
for(i=0;i<32;i++)
q7 S: w+ P' s9 Z h {+ v6 B0 I; U2 z2 s' o4 p
TransferData(*adder1,1);
% \1 h! @) |5 W6 z5 L adder1++;
7 R# I$ {. A' q# u1 ]( ~ }# C0 Y: {5 ?0 o3 @
4 V2 {' T2 b/ }& t6 T8 Y+ `- P
5 m$ b2 n* z/ d5 R1 r: k TransferData(0x90,0); //Set Graphic Display RAM Address
: t( _! C& e+ {( ^6 O. w delay(100);
& P! {: G$ c* T* L* b1 A7 ]% X1 F4 K for(i=32;i<64;i++)! M5 P; t$ E+ v
{
) W) l: O; I7 z" D; p TransferData(*adder1,1);
! N, x9 \( C$ ]; r: }; X adder1++;
5 [, d+ O6 q* @. ?3 I% H; Q }
6 t0 L8 f7 t. K/ S/ t: {# ^2 X}# P! i& x2 ~' R" q7 j0 P7 M
% }" V( R! P0 k' C# n. k
# B! h }0 ^/ C K& g* a5 M/******************************************************************** i# [2 y' [: z4 g! n; H7 v& [
* 名称 : Main()
9 t3 {- s- B: z$ x) n* 功能 : 主函数( G! q( q3 r- f0 K- B/ H
* 输入 : 无
4 F p$ m. h& {$ E" w* 输出 : 无0 t2 j2 y2 \' O' r, Q/ s
***********************************************************************/. r! L9 m8 E0 y! y. P+ C, L V
void TransferData(char data1,bit DI) //传送数据或者命令,当DI=0是,传送命令,当DI=1,传送数据.
* F0 R) u. L2 J+ t6 q! n {3 d y8 ^1 ?+ P
WRD=0;# [' a. ~8 h( ~' \( p& ]9 J
RS=DI;
2 m$ a+ `: [8 C6 ?9 ~5 s delay(1);
C; E7 p$ ]: Z Y! t! U P2=Convert(data1);
! C. ]1 v1 f* Q2 Q E=1;
y: f9 O1 |, X7 d6 ^ delay(1);
2 c! D: B, J4 z. K x E=0;
7 k d, S: X N" Z" a" B }
9 P' ~( |: j8 t" O% B7 ~. M9 J5 P) M+ [. k/ _* N, M1 d
9 E3 j1 |0 j4 Z: k( L
/********************************************************************
- ~' {0 Q1 q; H- ?+ g- z; _) m* 名称 : Main()1 N2 ~* R& }5 W% c+ E4 ~
* 功能 : 主函数+ l1 ~) O* U3 r! R( r
* 输入 : 无* Y% I6 c: O A2 D% M' q
* 输出 : 无1 ^* `6 I. ]* j" _3 @" J
***********************************************************************/
. H! h4 J9 f8 R8 d a0 Z B# Yvoid delayms(unsigned int n) //延时10×n毫秒程序
7 ?; Q' ^" e8 h$ S, B7 C) j. j {5 z* \+ v y9 C s0 j" F
unsigned int i,j;
5 I4 w" F+ l3 ^" K* ^ for(i=0;i<n;i++)+ D. ?9 n! C* h3 T
for(j=0;j<2000;j++);
$ n8 X" k: J6 K4 r2 q. R }
+ s! _) Z7 ^( c0 {/ ]6 u' V9 a$ T( I
1 a; G: y; u% ?" \8 S, `% v" x2 y" b
/********************************************************************3 d2 u# E$ O0 E2 N
* 名称 : Main()
5 f q6 A3 [8 T: }* 功能 : 主函数! m6 T2 }* v3 k, m. T4 ?& s
* 输入 : 无( c- w1 G9 {1 T2 B) U1 E, w& o9 l
* 输出 : 无
* m) l: P K8 N7 |2 d***********************************************************************/
! ~1 K; v3 Y% r* o0 v' s. tvoid delay(unsigned int m) //延时程序 Q, I0 ~8 J% X$ n1 [
{5 T0 n) @$ |& u9 Y8 t+ k
unsigned int i,j;8 Y3 i" o5 u, H( A/ g9 B" G
for(i=0;i<m;i++)
& B' q7 p/ ^, z& s) J/ @+ V1 p for(j=0;j<10;j++);
1 M7 y- [7 I* v3 n* g _! s$ g$ E }
1 S" V% A; H; C: D/ G6 ^
, n, m7 ?- m2 t% h* N& _# M. E& M8 q9 m4 P
/********************************************************************1 l3 P; Q* p2 i$ Q$ }8 y# h' k
* 名称 : Main()
0 l# W* ]% Y2 O/ I8 [* 功能 : 主函数
+ @% E' Z! t/ }, p- c- p9 i( T$ I* 输入 : 无
: J4 B! g& D# {$ e' m* 输出 : 无4 Y6 |. X, Q( P
***********************************************************************/# |, _/ i! j0 t/ w+ t- c2 e' [
void DisplayGraphic(unsigned char code *adder)1 [8 Q. \# d! Y1 Y' h; \
{# i5 [' U1 o" z3 M
4 i% E% S5 V: a: {0 o* P9 a3 l1 T s! J5 _& h- M
int i,j;6 J/ o. e7 i, G6 P
//*******显示上半屏内容设置2 c$ O, o7 ]: u: R- f
for(i=0;i<32;i++) //- Z+ f4 y$ t$ i7 D* S
{ 7 l4 {! F! I/ k. G
TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD& \1 q3 {# |" E# U% Z
TransferData(0x80,0); //SET 水平地址 HORIZONTAL ADD+ i" ]3 E/ _6 }& s( T* P
for(j=0;j<16;j++): Z+ D7 ]9 G$ t6 [/ V1 O5 i: r9 J' ^
{
# }- V$ b* R- A1 d0 }% q TransferData(*adder,1);4 ^% i' L7 k- |. t6 T0 m# M
adder++;1 O$ V) e6 o% C1 m/ o& r0 P
}3 \4 Y* |7 p* S
} 0 `) s! s8 Y( m8 N/ E% ]
//*******显示下半屏内容设置
2 ~6 @1 Z! J6 N7 O& i5 V, Z' U% Z for(i=0;i<32;i++) //- L2 I# \7 N& ?, }" ~' O' W- K- n
{
1 Y8 E0 J# a8 g: z& i TransferData((0x80 + i),0); //SET 垂直地址 VERTICAL ADD
% m- n7 _; S: r8 R3 j. @, J1 T& Z7 H TransferData(0x88,0); //SET 水平地址 HORIZONTAL ADD V( M9 T; j$ q
for(j=0;j<16;j++)
( _: P0 J$ J# A# N {) c& D, o, H2 z6 O+ Y7 @6 L
TransferData(*adder,1);. w5 h% P3 |# V6 w
4 n. _5 a4 \! f8 V& B* h' f- b+ z! U" _ J
1 [3 z5 W% z9 R3 ?…………余下代码请下载附件…………( D. l& Y$ N" G' I
7 S- O" s: A# n; _' C
! G& X; J/ ~$ J5 }下载:
! K! ]6 L3 r. E1 p: T& B) Q' x+ g# E) j$ F) z9 Z- R
: X+ z" o+ p4 p5 E& i |
|