📄 lcd12864.lst
字号:
C51 COMPILER V8.05a LCD12864 05/01/2009 16:13:02 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN LCD12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD12864.C BROWSE DEBUG OBJECTEXTEND
line level source
1 //注意:忙检测在LCD12864并行接口时不能使用,暂时未找到原因
2 ////////////////////////////////////////////////////////////////////
3 /////////****************LCD12864并行驱动******************/////////
4 /////////++++++++++++++ LCD12864.c ++++++++++++++++++++/////////
5 /////////基本功能:静态字符,汉字显示,静态图片显示等 //////////
6 /////////系统晶振:11.0582MHz //////////
7 /////////程序编写:东冬(dqing0625) //////////
8 /////////修改时间:2009年03月24日 //////////
9 ////////////////////////////////////////////////////////////////////
10
11 #include "stc89c52rc.h"
12 #include <intrins.h>
13 #include "MyType.h"
14 #include "LCD12864.h"
15 #include "Delaytime.h"
16
17 //======串口模式=======
18 sbit LCD12864_RS = P2^1; //片选信号输入
19 sbit LCD12864_RW = P2^2; //串行数据输入
20 sbit LCD12864_EN = P2^4; //串行移位脉冲输入
21 sbit LCD12864_PSB = P2^5; //串并模式选择 0:串口,1:并口
22 sbit LCD12864_RST = P1^3; //lcd12864复位
23
24 #define LCD12864_DATA P0 //数据指令传输并行接口
25 /******************************************************************
26 名称:void LCD12864_Wbyte(uchar byte)
27 功能:向12864写入8位数据
28 指令:12M晶振,如果用22.1184或者24M晶振,延时要加倍
29 调用:
30 返回:无
31 /******************************************************************/
32 void LCD12864_Wbyte(uchar byte)
33 {
34 1
35 1 LCD12864_RW = 0; //RW(0)写字节
36 1 _nop_();
37 1 _nop_();
38 1 LCD12864_EN = 1;
39 1 _nop_();
40 1 LCD12864_DATA = byte; //写字节
41 1 _nop_();
42 1 _nop_();
43 1 _nop_();
44 1 _nop_();
45 1 LCD12864_EN = 0;
46 1 _nop_();
47 1 _nop_();
48 1 LCD12864_RW = 1;
49 1
50 1 }
51 /******************************************************************
52 名称:uchar LCD12864_Rbyte(void)
53 功能:从12864读出8位数据
54 指令:
55 调用:无
C51 COMPILER V8.05a LCD12864 05/01/2009 16:13:02 PAGE 2
56 返回:sdat
57 /******************************************************************/
58 uchar LCD12864_Rbyte(void)
59 {
60 1 uchar sdat;
61 1 LCD12864_RW = 0;
62 1 _nop_();
63 1 LCD12864_RW = 1; //RW(1)读字节
64 1 _nop_();
65 1 _nop_();
66 1 LCD12864_EN = 1;
67 1 _nop_();
68 1 sdat = LCD12864_DATA; //读出状态 ,
69 1 _nop_();
70 1 _nop_();
71 1 LCD12864_EN = 0 ;
72 1 _nop_();
73 1 _nop_();
74 1 LCD12864_RW = 0; //RW(1)读字节
75 1
76 1 return sdat;
77 1 }
78 /******************************************************************
79 名称:void LCD12864_busy( void )
80 功能:读忙状态,
81 指令:
82 调用:
83 返回:无
84 /******************************************************************/
85 void LCD12864_busy( void )
86 {
87 1 LCD12864_RS = 1;
88 1
89 1 while(LCD12864_Rbyte()&0x80)//读BF,直到BF == 0*/
90 1 {
91 2 LCD12864_RS = 0;
92 2 }
93 1 }
94 /******************************************************************
95 名称:void LCD12864_W(bit dat_com,uchar byte)
96 功能:dat_com=0写指令,dat_com=1写数据
97 指令:
98 调用:LCD12864_Wbyte();LCD12864_busy();
99 返回:无
100 /******************************************************************/
101 void LCD12864_W (bit dat_com,uchar byte)
102 {
103 1 // LCD12864_busy(); //LCD忙检测
104 1
105 1 LCD12864_RS = dat_com;
106 1
107 1 LCD12864_Wbyte(byte); //写入字节
108 1
109 1 LCD12864_RS = !dat_com;
110 1
111 1 }
112 /******************************************************************
113 名称:void LCD12864_Init(void)
114 功能:LCD12864初始化
115 指令:
116 调用:LCD12864_W();
117 返回:无
C51 COMPILER V8.05a LCD12864 05/01/2009 16:13:02 PAGE 3
118 /******************************************************************/
119 void LCD12864_Init(void)
120 {
121 1
122 1 LCD12864_PSB = 1; //选择并口模式
123 1 LCD12864_RST = 1; //禁止复位
124 1 LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC); //基本指令功能.
125 1 LCD12864_W(LCD12864_COM,LCD12864_PLACE_ROLL); //允许输入卷动位址
126 1 LCD12864_W(LCD12864_COM,LCD12864_REST_OFF); //脱离随眠状态,显示打开,关光标,反白关.
127 1 LCD12864_W(LCD12864_COM,LCD12864_CLEAR); //清屏指令.
128 1 LCD12864_W(LCD12864_COM,LCD12864_CURSOR_RRF); //AC自动加一,光标右移,整体显示不移动
129 1 }
130 /******************************************************************
131 名称:void LCD12864_Clear(void)
132 功能:LCD12864清屏
133 指令:
134 调用:LCD12864_W();
135 返回:无
136 /******************************************************************/
137 void LCD12864_Clear(void)
138 {
139 1 LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC);//基本指令功能.
140 1 LCD12864_W(LCD12864_COM,LCD12864_CLEAR); //清屏指令.
141 1 }
142 /******************************************************************
143 名称:void LCD12864_Wbmp(uchar *puts)
144 功能:LCD12864绘图
145 指令:
146 调用:LCD12864_W();
147 返回:无
148 /******************************************************************/
149 void LCD12864_Wbmp(uchar *puts)
150 {
151 1 uint x = 0;
152 1 uchar i,j;
153 1
154 1 LCD12864_W(LCD12864_COM,LCD12864_COM_PLOT_OFF); //扩展指令集动作,绘图显示OFF
155 1
156 1 for(i=0;i<32;i++)
157 1 {
158 2 LCD12864_W(LCD12864_COM,0x80|i); //列32行,双屏结构中上半屏
159 2 LCD12864_W(LCD12864_COM,0x80); //X地址坐标,自动加1.
160 2
161 2 for(j=0;j<16;j++) //16*8=256
162 2 LCD12864_W(LCD12864_DAT,puts[x++]);
163 2 }
164 1
165 1 for(i=0;i<32;i++)
166 1 {
167 2 LCD12864_W(LCD12864_COM,0x80|i);
168 2 LCD12864_W(LCD12864_COM,0x88); //下半屏
169 2
170 2 for(j=0;j<16;j++)
171 2 LCD12864_W(LCD12864_DAT,puts[x++]);
172 2 }
173 1 LCD12864_W(LCD12864_COM,LCD12864_COM_PLOT_ON); //扩展指令集动作,绘图显示ON
174 1
175 1 }
176 /******************************************************************
177 名称:void LCD12864_BMP_Clear( void )
178 功能:LCD12864清图像
179 指令:
C51 COMPILER V8.05a LCD12864 05/01/2009 16:13:02 PAGE 4
180 调用:LCD12864_W();
181 返回:无
182 /******************************************************************/
183 void LCD12864_BMP_Clear( void )
184 {
185 1 uchar i,j;
186 1
187 1 LCD12864_W(LCD12864_COM,LCD12864_COM_PLOT_OFF); //扩展指令集动作,绘图显示OFF
188 1
189 1 for(i=0;i<32;i++) //12864实际为256x32
190 1 {
191 2 LCD12864_W (LCD12864_COM,0x80|i); //行位置
192 2 LCD12864_W (LCD12864_COM,0x80); //列位置
193 2
194 2 for (j=0;j<32;j++) //256/8=32 byte
195 2 LCD12864_W(LCD12864_DAT,0); //全部写入0即清除图像
196 2 }
197 1 LCD12864_W(LCD12864_COM,LCD12864_COM_PLOT_ON); //扩展指令集动作,绘图显示ON
198 1 }
199 /******************************************************************
200 名称:void LCD12864_WPoss(uchar x,uchar y,uchar *buff)
201 功能:LCD12864字符位置自定义显示
202 指令:
203 调用:LCD12864_W();
204 返回:无
205 /******************************************************************/
206 void LCD12864_WPoss(uchar x,uchar y,uchar *buff)
207 {
208 1 uchar addr,i=0;
209 1 switch (x)
210 1 {
211 2 case 0:addr=0x80;break;
212 2 case 1:addr=0x90;break;
213 2 case 2:addr=0x88;break;
214 2 case 3:addr=0x98;break;
215 2 }
216 1 addr=addr+y;
217 1
218 1 LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC); //8BitMCU,基本指令集合
219 1 LCD12864_W(LCD12864_COM,addr); //显示在自定义位置
220 1
221 1 while(buff[i]!='\0')
222 1 {
223 2 LCD12864_W(LCD12864_DAT,buff[i++]);
224 2 if(++y==16)
225 2 {
226 3 y=0;
227 3 if(++x==4) x=0;
228 3
229 3 switch (x)
230 3 {
231 4 case 0:addr=0x80;break;
232 4 case 1:addr=0x90;break;
233 4 case 2:addr=0x88;break;
234 4 case 3:addr=0x98;break;
235 4 }
236 3 addr=addr+y;
237 3 LCD12864_W(LCD12864_COM,addr);
238 3 }
239 2
240 2 }
241 1 }
C51 COMPILER V8.05a LCD12864 05/01/2009 16:13:02 PAGE 5
242 /******************************************************************
243 名称:void LCD12864_TXT_Clear( void )
244 功能:LCD12864清文本
245 指令:
246 调用:LCD12864_W();
247 返回:无
248 /******************************************************************/
249 void LCD12864_TXT_Clear( void )
250 {
251 1 uchar i;
252 1
253 1 LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC); //8BitMCU,基本指令集合
254 1 LCD12864_W(LCD12864_COM,0x80); //AC归起始位,DDROM起始地址
255 1
256 1 for(i=0;i<64;i++)
257 1 LCD12864_W(LCD12864_DAT,0x20); //字符编码0x20是空白字符
258 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 493 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 11
IDATA SIZE = ---- ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -