📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 05/14/2009 00:04:43 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LCD.c COMPACT BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /**********************************************************************
2 LCD.C file
3 类型定义
4 作者:
5 建立日期:
6 修改日期:
7 版本:V1.0
8 版权所有,盗版必究。
9 Copyright(C)
10 All rights reserved
11 **********************************************************************/
12 #include <reg51.h>
13 #include <lcd.h>
14 #include <HzCode.h>
15 #include <intrins.h>
16 #define uchar unsigned char
17 #define uint unsigned int
18 #define LCD12864DataPort P1
19 /******************************LCD I/O define*************************/
20 sbit DI=P2^0; //data or command select
21 sbit RW=P2^2; //read or write select
22 sbit EN=P2^1 ; //enable read or write
23 sbit CS1=P2^3 ; // 0
24 sbit CS2=P2^4; // 0
25
26
27 /*******************************函数*********************************/
28 void nop()
29 {
30 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
31 1 }
32
33 /******************************************************************/
34 void CheckState(void)
35 {
36 1 // uchar dat;
37 1 DI=0;
38 1 RW=1;
39 1 /*do{
40 1 P1=0xFF;
41 1 EN=1;
42 1 dat=P1;
43 1 EN=0;
44 1 dat=dat&0x80; //status read DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 DB7=0时表示已经准备好
45 1 }while(dat); */ // busy 0 on/off Rest 0 0 0 0
46 1 }
47 /******************************************************************/
48 void WriteByte(uchar dat)
49 {
50 1 CheckState();
51 1 DI=1;
52 1 RW=0;
53 1 LCD12864DataPort=dat;
54 1 EN=1;
55 1 EN=0;
C51 COMPILER V7.06 LCD 05/14/2009 00:04:43 PAGE 2
56 1 }
57 /*****************************************************************/
58 void SendComToLcd(uchar command)
59 {
60 1 CheckState();
61 1 DI=0;
62 1 RW=0;
63 1 LCD12864DataPort=command;
64 1 EN=1;
65 1 EN=0;
66 1 }
67 /****************************************************************/
68 //设定行地址(页)--X 0-7
69 void SetLine(uchar line)
70 {
71 1 line=line&0x07;
72 1 line=line|0xB8;
73 1 SendComToLcd(line);
74 1 }
75 //设定列地址--Y 0-63
76 void SetColumn(uchar column)
77 {
78 1 column=column&0x3f;
79 1 column=column|0x40;
80 1 SendComToLcd(column);
81 1 }
82 //设定显示开始行--XX
83 void SetStartLine(uchar startline)
84 {
85 1 startline=startline|0xC0;
86 1 SendComToLcd(startline);
87 1 }
88 //开关显示
89 void SetOnOFF(uchar OnOff)
90 {
91 1 OnOff=OnOff|0x3E;
92 1 SendComToLcd(OnOff);
93 1 }
94 /*******************************************************************/
95 //选择屏幕
96 //0 全屏 1 左屏 2 右屏
97 void SelectScreen(uchar Screen)
98 {
99 1 switch(Screen)
100 1 {
101 2 case 0:
102 2 CS1=0;
103 2 nop();
104 2 CS1=0;
105 2 nop();
106 2 break;
107 2 case 1:
108 2 CS1=1;
109 2 nop();
110 2 CS2=0;
111 2 nop();
112 2 break;
113 2 case 2:
114 2 CS1=0;
115 2 nop();
116 2 CS2=1;
117 2 nop();
C51 COMPILER V7.06 LCD 05/14/2009 00:04:43 PAGE 3
118 2 break;
119 2 default:
120 2 break;
121 2
122 2 }
123 1 }
124 /****************************************************************************/
125 // clear screen
126 void ClearScreen(uchar screen)
127 {
128 1 uchar i,j;
129 1 SelectScreen(screen);
130 1 for(i=0;i<8;i++)
131 1 { SetLine(i);
132 2 for(j=0;j<64;j++)
133 2 {
134 3 WriteByte(0x00);
135 3 }
136 2 }
137 1 }
138 /***************************************************************************/
139 //show 8*8
140 //lin(0--7) col(0--127)
141 //address 字模首地址
142 void Show8X8(uchar lin,uchar column,uchar *address)
143 {
144 1 uchar i;
145 1 if(column<64)
146 1 {
147 2 SelectScreen(1);
148 2 SetLine(lin);
149 2 SetColumn(column);
150 2 for(i=0;i<8;i++)
151 2 {
152 3 if((column+i)<64)
153 3 {
154 4 WriteByte(*(address+i));
155 4 }
156 3 else
157 3 {
158 4 SelectScreen(2);
159 4 SetLine(lin);
160 4 SetColumn(column-64+i);
161 4 WriteByte(*(address+i));
162 4 }
163 3
164 3 }
165 2 }
166 1 else
167 1 {
168 2 SelectScreen(2);
169 2 column=column-64;
170 2 SetLine(lin);
171 2 SetColumn(column);
172 2 for(i=0;i<8;i++)
173 2 {
174 3 if(i+column<64)
175 3 {
176 4 WriteByte(*(address+i));
177 4 }
178 3 else
179 3 {
C51 COMPILER V7.06 LCD 05/14/2009 00:04:43 PAGE 4
180 4 SelectScreen(1);
181 4 SetLine(lin);
182 4 SetColumn(column-64+i);
183 4 WriteByte(*(address+i));
184 4 }
185 3 }
186 2 }
187 1 }
188 /*******************************************************************************/
189 //显示数字8*16
190 //入口参数:lin 行值;column 列值;num 码表中的位置
191 void ShowNumber(uchar lin,uchar column,uchar num)
192 {
193 1 uchar *address;
194 1 address=&NumCode[num][0];
195 1 Show8X8(lin,column,address);
196 1 Show8X8(lin+1,column,address+8);
197 1 }
198 /******************************************************************************/
199 //显示汉字16*16
200 //入口参数:lin 行值;column 列值;num 码表中的位置
201 void ShowChina(uchar lin,uchar column,uchar num)
202 {
203 1 uchar *address;
204 1 address=&HzCode[num][0];
205 1 Show8X8(lin,column,address);
206 1 Show8X8(lin,column+8,address+8);
207 1 Show8X8(lin+1,column,address+16);
208 1 Show8X8(lin+1,column+8,address+24);
209 1 }
210
211 /*****************************************************************************/
212 void InitLCD()
213 {
214 1 uchar i=2000;
215 1 while(i--);
216 1 SetOnOFF(1);
217 1 ClearScreen(1);
218 1 ClearScreen(2);
219 1 SetStartLine(0);
220 1 }
221 /*************************************************************************/
222
223 void r_show8x8(uchar lin,uchar column,uchar *address)
224 {
225 1 uchar i,r_data;
226 1 if(column<64)
227 1 {
228 2 SelectScreen(1); //如果列数<64则从第一屏上开始写
229 2 SetLine(lin);
230 2 SetColumn(column);
231 2 for(i=0;i<8;i++)
232 2 {
233 3 if(column+i<64)
234 3 {
235 4 r_data = ~(*(address+i));
236 4 WriteByte(r_data);
237 4 }
238 3 else
239 3 {
240 4 SelectScreen(2);
241 4 SetLine(lin);
C51 COMPILER V7.06 LCD 05/14/2009 00:04:43 PAGE 5
242 4 SetColumn(column-64+i);
243 4 r_data = ~(*(address+i));
244 4 WriteByte(r_data);
245 4 }
246 3 }
247 2 }
248 1 else
249 1 {
250 2 SelectScreen(2); //否则从第二屏上开始写
251 2 column-=64; //防止越界
252 2 SetLine(lin);
253 2 SetColumn(column);
254 2 for(i=0;i<8;i++)
255 2 {
256 3 if(column+i<64)
257 3 {
258 4 r_data = ~(*(address+i));
259 4 WriteByte(r_data);
260 4 }
261 3 else
262 3 {
263 4 SelectScreen(1);
264 4 SetLine(lin);
265 4 SetColumn(column-64+i);
266 4 r_data = ~(*(address+i));
267 4 WriteByte(r_data);
268 4 }
269 3 }
270 2 }
271 1 }
272
273 /**************************************************************************/
274
275 void r_ShowNumber(uchar lin,uchar column,uchar num)
276 {
277 1 uchar *address;
278 1 address=&NumCode[num][0];
279 1 r_show8x8(lin,column,address);
280 1 r_show8x8(lin+1,column,address+8);
281 1 }
282
283 void r_ShowChina(uchar lin,uchar column,uchar num)
284 {
285 1 uchar *address;
286 1 address=&HzCode[num][0];
287 1 r_show8x8(lin,column,address);
288 1 r_show8x8(lin,column+8,address+8);
289 1 r_show8x8(lin+1,column,address+16);
290 1 r_show8x8(lin+1,column+8,address+24);
291 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 989 ----
CONSTANT SIZE = 928 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- 33
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -