?? mcs51-項目開發經典.lst
字號:
185 { SBUF = uart_data_out;
186 1 while(TI==0);
187 1 TI=0;
188 1 }
189 //-------------------------------------------------------------------------------------------------
190 //函數功能:串口發射字符數組。通常將要發送的字符數組定義在CODE代碼區。
191 void uart_string_out(char * char_array)
192 { uchar i;
193 1 for(i=0; i<strlen(char_array) ;i++)
194 1 {
195 2 uart_byte_out(char_array[i]);
196 2 }
197 1 }
198
199 // 液晶ST7920驅動程序
200 //=================================================================================================
201 //-------------------------------------------------------------------------------------------------
202 // 函數功能:液晶并行寫數據或寫指令
203 // 形參:dat_or_comm 區分指令或數據,由宏定義可知 comm表示指令,dat表示數據
204 // content 指令或數據內容
205 void write_lcd (uchar dat_comm,uchar content)
206 {
207 1 check_busy ();
208 1 if(dat_comm)
209 1 {rs=1; //data
210 2 rw=0; //write
211 2 }
212 1 else
213 1 {rs=0; //command
214 2 rw=0; //write
215 2 }
216 1 P0=content; //output data or comm
217 1 e=1;
218 1 e=0;
219 1 }
220 //-------------------------------------------------------------------------------------------------
221 uchar read_lcd (void)
222 { uchar fhz;
223 1 check_busy ();
224 1 P0=0xff;
225 1 rs=1;
226 1 rw=1;
227 1 e=1;
228 1 fhz=P0;
229 1 e=0;
230 1 return(fhz) ;
231 1 }
232 //-------------------------------------------------------------------------------------------------
233 //函數功能:判斷液晶忙閑
234 void check_busy (void)
235 { uint max_delay_time=65535;
236 1 P0=0xff;
237 1 rs=0;
238 1 rw=1;
239 1 e =1;
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/07/2008 20:01:11 PAGE 5
240 1 while(busy==1)
241 1 {
242 2 max_delay_time--;//如果busy==1條件永遠滿足不了(如液晶損壞),則延時一段時間后退出
243 2 if(max_delay_time==0) break;
244 2 }
245 1 e =0;
246 1 }
247 //-------------------------------------------------------------------------------------------------
248 // 函數功能:液晶模塊初始化
249 void init_lcd (void)
250 {
251 1 write_lcd (comm,0x30); //6 功能設定:使用基本指令動作,8位控制接口
252 1 write_lcd (comm,0x01); //1 清屏:DDRAM全部寫20H,地址指針指向00H
253 1 write_lcd (comm,0x02); //2 地址歸位:地址指針指向00H
254 1 write_lcd (comm,0x06); //3 點設定:置光標右移,AC自動加 1,整體顯示不移動
255 1 write_lcd (comm,0x0c); //4 顯示狀態設定:置整體顯示開,光標關,光標位置不反白閃爍
256 1 write_lcd (comm,0x14); //5 光標或顯示移位控制:光標右移,AC加 1
257 1 }
258 //-------------------------------------------------------------------------------------------------
259 // 函數功能:刷新圖像
260 void image_clear(void)
261 {
262 1 uchar y_zb,x_zb;
263 1
264 1 for(y_zb=0;y_zb<32;y_zb++)
265 1 {for(x_zb=0;x_zb<8;x_zb++)
266 2 {line_display (y_zb, x_zb, 0x0000);
267 3 }
268 2 }
269 1 }
270 //-------------------------------------------------------------------------------------------------
271 // 函數功能:清DDRAM
272 void lcm_clear_ram (void)
273 {
274 1 write_lcd (comm,0x30);
275 1 write_lcd (comm,0x01);
276 1 }
277 //-------------------------------------------------------------------------------------------------
278 // 函數功能:顯示漢字或字符
279 // 12232C液晶模塊的顯示結構為:共2行顯示,每行可顯示15個字符或7個半漢字
280 // 顯示內容可以字符和漢字混排,方法如下:
281 // 即一個漢字為2字節,一個字符1字節,漢字字符可以穿插,只要保證每行15字節就可正確顯示
282 void chinese_or_character_display (uchar code *char_name)
283 {
284 1 uchar i;
285 1 write_lcd (comm,0x30);
286 1
287 1 write_lcd (comm,0x80);//設定DDRAM地址到地址計數器AC,即第一行顯示首址
288 1 for (i=0;i<15;i++)
289 1 {write_lcd (dat,char_name[i]);//顯示第一行內容,要顯示字符串的0-14字節
290 2 }
291 1 write_lcd (comm,0x90);//設定DDRAM地址到地址計數器AC,即第二行顯示首址
292 1 for (i=15;i<30;i++)
293 1 {write_lcd (dat,char_name[i]);//顯示第二行內容,要顯示字符串的15-29字節
294 2 }
295 1 }
296 //-------------------------------------------------------------------------------------------------
297 // 函數功能:顯示圖片
298 void image_display (uchar code *img)
299 {
300 1 uchar i,j;
301 1 for(j=0;j<32;j++)
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/07/2008 20:01:11 PAGE 6
302 1 {
303 2 for(i=0;i<8;i++)
304 2 {
305 3 write_lcd (comm,0x34);
306 3 write_lcd (comm,y+j);
307 3 write_lcd (comm,x+i);
308 3 write_lcd (comm,0x30);
309 3 write_lcd (dat,img[j*16+i*2]);
310 3 write_lcd (dat,img[j*16+i*2+1]);
311 3 }
312 2 }
313 1 write_lcd (comm,0x36);//繪圖顯示開
314 1 }
315 //-------------------------------------------------------------------------------------------------
316 void line_display (uchar y_coordinate, uchar x_coordinate, uint show_data)
317 {
318 1 uchar data_high,data_low;
319 1 data_high = (show_data & 0xff00)>>8;
320 1 data_low = show_data & 0x00ff;
321 1
322 1 write_lcd (comm,0x34);
323 1 write_lcd (comm,0x80 + y_coordinate);
324 1 write_lcd (comm,0x80 + x_coordinate);
325 1
326 1 write_lcd (comm,0x30);
327 1
328 1 write_lcd (dat,data_high);
329 1 write_lcd (dat,data_low);
330 1
331 1 write_lcd (comm,0x36);//繪圖顯示開
332 1 }
333 //-------------------------------------------------------------------------------------------------
334 uint line_read (uchar y_coordinate, uchar x_coordinate)
335 {
336 1 uchar data_high,data_low;
337 1 uint data_backup;
338 1
339 1 write_lcd (comm,0x34);
340 1 write_lcd (comm,0x80 + y_coordinate);
341 1 write_lcd (comm,0x80 + x_coordinate);
342 1
343 1 write_lcd (comm,0x30);
344 1 read_lcd ();
345 1 data_high = read_lcd ();
346 1 data_low = read_lcd ();
347 1
348 1 data_backup = data_high;
349 1 data_backup = (data_backup<<8) | data_low;
350 1
351 1 return(data_backup);
352 1 }
353 //=================================================================================================
354 // T1中斷服務程序
355 //=================================================================================================
356 void T1_interrupt(void) interrupt 3
357 {
358 1 TH1=0x4c;//11.0592M晶振時T1定時時間長度為50毫秒
359 1 TL1=0x00;
360 1 t1_delay_time++;//在需要延時的地方清空并判斷該變量
361 1 }
362 //=================================================================================================
363 // end of the file
C51 COMPILER V7.06 MCS51__钅靠猒_____ 12/07/2008 20:01:11 PAGE 7
364 //=================================================================================================
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 665 ----
CONSTANT SIZE = 587 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 25
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 + -