?? testlcd.lst
字號:
C51 COMPILER V8.08 TESTLCD 04/22/2009 17:44:07 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE TESTLCD
OBJECT MODULE PLACED IN testlcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE testlcd.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*-------------------------------------------------------------------------------------------------
2 ╔=======================================
3 ┆ YG51A開發板配套實驗學習例程 ┆
4 ┆ Version 2.0 ┆
5 ┆ ┆
6 ┆ 揚光電子工作室 ┆
7 ┆ ┆
8 ┆ QQ:573764777 ┆
9 ┆ E-mail:yg-stu@163.com ┆
10 ╚=======================================╝
11 ********************************** 程序功能說明 ******************************************************
12 在1602LCD上顯示"HELLO YG51A !"和"START! NOW !兩行內容,
13 延遲后從右向左滾動.
14 ******************************************************************************************************/
15
16 #include "reg52.h"
17
18 #define uchar unsigned char
19
20 typedef bit BOOL ;
21
22 sbit rs = P2^6 ;
23 sbit rw = P3^6 ;
24 sbit ep = P2^7 ;
25
26
27 void delay(uchar) ;
28 void lcd_wcmd(uchar) ;
29 BOOL lcd_bz() ;
30 void lcd_pos(uchar) ;
31 void lcd_wdat(uchar) ;
32 void display(uchar,uchar *) ;
33
34 code uchar dis1[] = {"HELLO EVERYONE ! "} ;
35 code uchar dis2[] = {"START! NOW! "} ; //一行16個字符
36
37
38
39 void longdelay(uchar s) //長延時
40 {
41 1 while(s--)
42 1 {
43 2 delay(60) ;
44 2 }
45 1 }
46
47 void delay(uchar ms)
48 { // 延時子程序
49 1 uchar i ;
50 1 while(ms--)
51 1 {
52 2 for(i=0;i<250;i++) ;
53 2 }
54 1 }
55
C51 COMPILER V8.08 TESTLCD 04/22/2009 17:44:07 PAGE 2
56 BOOL lcd_bz()
57 { // 測試LCD忙碌狀態
58 1 BOOL result ;
59 1 rs = 0 ;
60 1 rw = 1 ;
61 1 ep = 1 ;
62 1 result = (BOOL)(P0 & 0x80); //強制類型轉換為BOOL,非0則等于1
63 1 ep = 0 ;
64 1 return result ;
65 1 }
66
67 void lcd_wcmd(uchar cmd)
68 { // 寫入指令數據到LCD
69 1 while(lcd_bz()) ;
70 1 rs = 0 ;
71 1 rw = 0 ;
72 1 ep = 0 ;
73 1 P0 = cmd ;
74 1 ep = 1 ;
75 1 ep = 0 ;
76 1 }
77
78 void lcd_pos(uchar pos)
79 {
80 1 lcd_wcmd(pos | 0x80); //顯示數據存儲地址設置,最高位為1
81 1 }
82
83 void lcd_wdat(uchar dat)
84 { //寫入字符顯示數據到LCD
85 1 while(lcd_bz()) ;
86 1 rs = 1 ;
87 1 rw = 0 ;
88 1 ep = 0 ;
89 1 P0 = dat ;
90 1 ep = 1 ;
91 1 ep = 0 ;
92 1 }
93
94 void lcd_init()
95 { //LCD初始化設定
96 1 lcd_wcmd(0x38) ; //8位總線 雙行顯示
97 1 delay(1) ;
98 1 lcd_wcmd(0x01) ; //清顯示 光標復位到地址00H位置
99 1 delay(1) ;
100 1 lcd_wcmd(0x06) ; //光標移動方向右移 所有文字不移動
101 1 delay(1) ;
102 1 lcd_wcmd(0x0c) ; //開顯示 無光標 不閃爍
103 1 delay(1) ;
104 1 }
105
106 /*---------------
107 函數名稱:display()
108 功能 :在LCD上顯示數組的數據
109 說明 :先寫顯示地址,后寫顯示數據
110 調用 :lcd_wcmd(), lcd_pos()
111 入口參數:pos 寫入的位置,q指向要寫入的數據所在的數組
112 返回值 :無
113 ----------------*/
114 void display(uchar pos, uchar *q)
115 {
116 1 uchar i ;
117 1 //lcd_wcmd(0x01) ; //clear
C51 COMPILER V8.08 TESTLCD 04/22/2009 17:44:07 PAGE 3
118 1 //delay(10) ;
119 1 lcd_pos(pos) ;
120 1 for(i=0;i<16;i++) //寫16個字符
121 1 {
122 2 lcd_wdat(*q) ;
123 2 q++ ;
124 2 longdelay(2) ;
125 2 }
126 1 }
127
128 main()
129 {
130 1 lcd_init() ; //初始化LCD
131 1 //delay(10) ;
132 1 display(0x00,dis1) ;
133 1 display(0x40,dis2) ;
134 1 display(0x14,dis1) ;
135 1 display(0x54,dis2) ;
136 1 lcd_wcmd(0x07) ; //文字右移
137 1 delay(1) ;
138 1 while(1)
139 1 {
140 2 display(0x00,dis1) ;
141 2 display(0x40,dis2) ;
142 2 }
143 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 256 ----
CONSTANT SIZE = 35 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
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 + -