?? 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 + -