📄 main_lcd.lst
字号:
170 2 break;
171 2
172 2 case 1: //写右指令
173 2 CheckState();
174 2 add_iw_r=command;
175 2 break;
176 2
177 2 case 2: //写左右指令
178 2 CheckState();
179 2 add_iw_lr=command;
C51 COMPILER V8.02 MAIN_LCD 03/25/2006 14:31:32 PAGE 4
180 2 break;
181 2 }
182 1 }
183 /*----------------------------------------------------------------------------------------------------*/
184 //设定行地址(页)--X 0-7
185 void SetLine(uchar line)
186 {
187 1 line=line & 0x07; // 0<=line<=7 //防止越界
188 1 line=line|0xb8; //1011 1xxx //通过和b8h或得到指令包含页地址的指令码
189 1 SendCommandToLCD(line,s_c); //??需要设置屏幕位置(左右?)
190 1 }
191 /*----------------------------------------------------------------------------------------------------*/
192 //设定列地址--Y 0-63
193 void SetColumn(uchar column)
194 {
195 1 column=column &0x3f; // 0=<column<=63 //防止越界
196 1 column=column | 0x40; //01xx xxxx //通过和40h或得到指令包含列地址的指令码
197 1 SendCommandToLCD(column,s_c); //??需要设置屏幕位置(左右?)
198 1 }
199 /*----------------------------------------------------------------------------------------------------*/
200 //设定显示开始行--XX
201 void SetStartLine(uchar startline) //0--63
202 {
203 1 startline=startline & 0x3f; //防止越界, 原来的--startline=startline & 0x07,只能达到7行,有误
204 1 startline=startline|0xc0; //1100 0000 //通过和c0h或得到指令包含开始行地址的指令码
205 1 SendCommandToLCD(startline,s_c); //??需要设置屏幕位置(左右?)
206 1 }
207 /*----------------------------------------------------------------------------------------------------*/
208 //开关显示
209 void SetOnOff(uchar onoff)
210 {
211 1 onoff=0x3e | onoff; //0011 111x
212 1 SendCommandToLCD(onoff,s_c); //??需要设置屏幕位置(左右?)
213 1 }
214 /*---------------------------------------------------------------------------------------------------*/
215 //选择屏幕
216 //screen: 0-左,1-右,2-全屏
217 void SelectScreen(uchar screen)
218 { //深圳RT12864:正有效 cs0: 1--左; cs1: 1--右;case2:1--全屏
219 1 switch(screen)
220 1 {
221 2 case 0: //左屏
222 2 s_c=0;
223 2 break;
224 2 case 1: //右屏
225 2 s_c=1;
226 2 break;
227 2 case 2: //全屏
228 2 s_c=2;
229 2 break;
230 2 }
231 1 }
232 /*---------------------------------------------------------------------------------------------------*/
233 //清屏
234 //screen: 0-左,1-右,2-全屏
235 void ClearScreen(uchar screen)
236 { unsigned char i,j;
237 1 SelectScreen(screen);
238 1
239 1 for(i=0;i<8;i++)
240 1 { SetLine(i);
241 2 for(j=0;j<64;j++)
C51 COMPILER V8.02 MAIN_LCD 03/25/2006 14:31:32 PAGE 5
242 2 {
243 3 WriteByte(0x00,s_c);
244 3 }
245 2 }
246 1 }
247 /*-------------------------------------------------------------------------------------------------*/
248 void Reset() //液晶复位
249 {
250 1 //reset 低复位
251 1 lcdreset=0;
252 1 /*_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();*/
253 1 Lcd12864delay(1000);
254 1 lcdreset=1;
255 1
256 1 SelectScreen(2); //选择全屏,关显示
257 1 SendCommandToLCD(0x3e,s_c);
258 1
259 1 }
260
261
262 /*--------------------------------------------------------------------------------------------------*/
263 //显示8*6点阵
264 //旋转90度:字模被竖着切分
265 //lin:行(0-7), column: 列(0-20)
266 //address : 字模区首地址
267 void Show86(uchar lin,uchar column,uint address)
268 {
269 1 unsigned char i;
270 1 if(column>20) {return;}
271 1 if(column<10){ SelectScreen(1);} //如果列数<8(0,1,2,3,4,5,6,7,8,9)则写在第一屏上
272 1 else {SelectScreen(2);} //否则 (10,11,12,13,14,15,16,17,18,19)写在第二屏上
273 1 column=column & 0x0f; //防止越界
274 1 SetLine(lin);
275 1 SetColumn(column=column*6+4); //相当于×6+4,得到真实的列地址,即前后4列空
276 1 for(i=0;i<6;i++) //显示8列,即一个8×8点阵
277 1 WriteByte( CBYTE[address+i],s_c ); //需要建立CBYTR表格????????
278 1 }
279
280 /*--------------------------------------------------------------------------------------------------*/
281 //显示8*8点阵
282 //旋转90度:字模被竖着切分
283 //lin:行(0-7), column: 列(0-15)
284 //address : 字模区首地址
285 void Show88(uchar lin,uchar column,uint address)
286 {
287 1 unsigned char i;
288 1 if(column>16) {return;}
289 1 if(column<8)
290 1 {
291 2 SelectScreen(1); //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
292 2 column=column & 0x07; //防止越界
293 2 }
294 1 else {
295 2 SelectScreen(2); //否则 (8,9,10,11,12,13,14,15)写在第二屏上
296 2 column=column & 0x0f; //防止越界
297 2 }
298 1 SetLine(lin);
299 1 SetColumn(column<<3); //左移3位,相当于×8,得到真实的列地址
300 1 for(i=0;i<8;i++) //显示8列,即一个8×8点阵
301 1 WriteByte( CBYTE[address+i],s_c ); //需要建立CBYTR表格????????
302 1 }
303
C51 COMPILER V8.02 MAIN_LCD 03/25/2006 14:31:32 PAGE 6
304 /*----------------------------------------------------------------------------------------------*/
305 void InitLCD() //初始化LCD
306 {
307 1 Reset(); //复位,关显示
308 1
309 1 ClearScreen(2); //清全屏
310 1
311 1 SelectScreen(2);
312 1 SetOnOff(1); //开显示
313 1 SelectScreen(2); //选择全屏
314 1 SetStartLine(0); //开始行:0
315 1 }
316 /*----------------------------------------------------------------------------------------------------*/
317 void main(void)
318 {
319 1 InitLCD(); //初始化LCD
320 1 while(1)
321 1 {
322 2 SelectScreen(2); //选择全屏
323 2 SetStartLine(5); //开始行:0
324 2 Show88(1,2,ascii+22);
*** WARNING C214 IN LINE 324 OF MAIN_LCD.C: 'Argument': conversion: pointer to non-pointer
325 2 Show88(1,3,ascii+30);
*** WARNING C214 IN LINE 325 OF MAIN_LCD.C: 'Argument': conversion: pointer to non-pointer
326 2 }
327 1 }
328
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 464 ----
CONSTANT SIZE = 724 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 4
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 2 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -