📄 lcd12864.lst
字号:
C51 COMPILER V6.23a LCD12864 10/02/2007 16:57:17 PAGE 1
C51 COMPILER V6.23a, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN LCD12864.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE c文件\LCD12864.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\LCD128
-64.lst) OBJECT(LCD12864.obj)
stmt level source
1 //*************************************************************************************************
2 //* *
3 //* ******************************LCD12864驱动程序************************** *
4 //* *
5 //*************************************************************************************************
6
7 //*************************************************************************************************
8 //* *
9 //* ******************************头文件及宏定义************************** *
10 //* *
11 //*************************************************************************************************
12 #include <reg52.h>
13 #define LCDPORT P1
14 sbit E= P3^7;
15 sbit RW= P3^6;
16 sbit DI= P3^5;
17 sbit CS1= P3^3;
18 sbit CS2= P3^4;
19 sbit BUSYSTATUS= P1^7; //忙状态位。
20 //#define DISONSTATUS P0_5 //显示开关状态位。
21 //#define RSTSTATUS P0_4 //复位状态位。
22 #define LCDSTARTROW 0xC0 //设置起始行指令。
23 #define LCDPAGE 0xB8 //设置页指令。
24 #define LCDLINE 0x40 //设置列指令。
25
26
27
28
29 //*************************************************************************************************
30 //* *
31 //* ********************************读忙标志位********************************* *
32 //* *
33 //*************************************************************************************************
34 bit bCheckBusy()
35 {
36 1 LCDPORT=0x00;
37 1 RW=1;
38 1 DI=0;
39 1 E=1;
40 1 E=0;
41 1 return BUSYSTATUS;
42 1 }
43
44 //*************************************************************************************************
45 //* *
46 //* ********************************写数据********************************* *
47 //* *
48 //*************************************************************************************************
49 void vWriteData(unsigned char ucData)
50 {
51 1 while(bCheckBusy());
52 1 LCDPORT=0x00;
53 1
54 1 RW=0;
C51 COMPILER V6.23a LCD12864 10/02/2007 16:57:17 PAGE 2
55 1 DI=1;
56 1 LCDPORT=ucData;
57 1 E=1;
58 1 E=0;
59 1 }
60
61 //*************************************************************************************************
62 //* *
63 //* ********************************写指令********************************* *
64 //* *
65 //*************************************************************************************************
66 void vWriteCMD(unsigned char ucCMD)
67 {
68 1 while(bCheckBusy());
69 1 LCDPORT=0x00;
70 1 RW=0;
71 1 DI=0;
72 1 LCDPORT=ucCMD;
73 1 E=1;
74 1 E=0;
75 1 }
76
77 //*************************************************************************************************
78 //* *
79 //* ********************************LCD初始化函数******************************* *
80 //* *
81 //*************************************************************************************************
82 /*void vLCDInitialize()
83 {
84 CS1=1;
85 CS2=1;
86 vWriteCMD(0x38); //8位形式,两行字符。
87 vWriteCMD(0x0F); //开显示。
88 vWriteCMD(0x01); //清屏。
89 vWriteCMD(0x06); //画面不动,光标右移。
90 vWriteCMD(LCDSTARTROW); //设置起始行。
91 }
92 */
93 //*************************************************************************************************
94 //* *
95 //* ******************************显示自定义行********************************* *
96 //* *
97 //*************************************************************************************************
98 //在8×128的格子里显示自定义长度的一行
99 void vShowCustomRow(unsigned char ucPage,unsigned char ucLine,unsigned char ucWidth,unsigned char *ucaRow)
100 {
101 1 unsigned char ucCount; //取值范围:ucPage:0~7;ucLine:0~127;
102 1 if(ucLine<64) //ucWidth:0~127;ucLine+ucWidth<1128。
103 1 {
104 2 CS1=1;
105 2 CS2=0;
106 2 vWriteCMD(LCDPAGE+ucPage);
107 2 vWriteCMD(LCDLINE+ucLine);
108 2 if((ucLine+ucWidth)<64)
109 2 {
110 3 for(ucCount=0;ucCount<ucWidth;ucCount++)
111 3 vWriteData(*(ucaRow+ucCount));
112 3 }
113 2 else
114 2 {
115 3 for(ucCount=0;ucCount<64-ucLine;ucCount++)
116 3 vWriteData(*(ucaRow+ucCount));
C51 COMPILER V6.23a LCD12864 10/02/2007 16:57:17 PAGE 3
117 3
118 3 CS1=0;
119 3 CS2=1;
120 3 vWriteCMD(LCDPAGE+ucPage);
121 3 vWriteCMD(LCDLINE);
122 3 for(ucCount=64-ucLine;ucCount<ucWidth;ucCount++)
123 3 vWriteData(*(ucaRow+ucCount));
124 3 }
125 2 }
126 1 else
127 1 {
128 2 CS1=0;
129 2 CS2=1;
130 2 vWriteCMD(LCDPAGE+ucPage);
131 2 vWriteCMD(LCDLINE+ucLine-64);
132 2 for(ucCount=0;ucCount<ucWidth;ucCount++)
133 2 vWriteData(*(ucaRow+ucCount));
134 2 }
135 1 }
136 //*************************************************************************************************
137 //* *
138 //* *****************************汉字显示函数*********************************** *
139 //* *
140 //*************************************************************************************************
141 //此函数将16×16汉字显示在8×128的格子里。
142 void vShowOneChin(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaChinMap)
143 {
144 1 vShowCustomRow(ucPage,ucLine,16,ucaChinMap);
145 1 vShowCustomRow(ucPage+1,ucLine,16,ucaChinMap+16);
146 1
147 1 }
148 //*************************************************************************************************
149 //* *
150 //* *****************************字符显示函数*********************************** *
151 //* *
152 //*************************************************************************************************
153 //此函数将8×16字符显示在8×128的格子里。
154 void vShowOneChar(unsigned char ucPage,unsigned char ucLine,unsigned char *ucaCharMap)
155 {
156 1 vShowCustomRow(ucPage,ucLine,8,ucaCharMap);
157 1 vShowCustomRow(ucPage+1,ucLine,8,ucaCharMap+8);
158 1
159 1 }
160 //*************************************************************************************************
161 //* *
162 //* *****************************清屏函数*********************************** *
163 //* *
164 //*************************************************************************************************//此函
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -