?? lcm-1602a.lst
字號:
C51 COMPILER V8.08 LCM_1602A 11/24/2009 12:52:21 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE LCM_1602A
OBJECT MODULE PLACED IN LCM-1602A.OBJ
COMPILER INVOKED BY: f:\Keil3\C51\BIN\C51.EXE LCM-1602A.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************************************************
2 作者: 李雪川
3 時間: 2009-7-29
4 說明: YJD1602A-1液晶顯示程序
5 地址設置:地址為后7位,第8位為1
6 N=0 一行顯示 地址0x00-0x4f
7 N= 1 兩行顯示 首行 0x00-0x2f, 次行0x40-0x67
8 版本: V1
9 注意:u = LCM_BYTE; ***********特別注意:往往一時大意容易出小錯,結果出不來*******
10 while (u & 0x80); BF=1:忙 BF = 0: 空閑
11 return(u);
12 **------------------------------------------------------------------------------------
13 ** 修改信息:
14 ** 修改 人: 李雪川
15 ** 修改日期: 2009-10-25
16 ** 修改內容: 添加液晶測試宏定義,方便測試
17 ***********************************************************************************************/
18
19 /* LCM-1602A.C */
20
21 #include "LCM-1602A.H"
22
23
24 /*******************************************************************************************
25 ** 函數名稱:delay_ms
26 ** 函數功能:延時ms
27 *******************************************************************************************/
28
29
30 /*******************************************************************************************
31 ** 函數名稱: uchar lcm_rdbyte(void)
32 ** 函數功能:向1602a-1讀一個數據
33 *******************************************************************************************/
34 uchar lcm_rdbyte(void)
35 {
36 1 LCM_RS = 1; /* 讀數據 */
37 1 LCM_R_W = 1;
38 1 LCM_E = 1; /* 高電平有效 */
39 1 return(LCM_BYTE);
40 1 }
41
42 /*******************************************************************************************
43 ** 函數名稱: uchar lcm_rdint(void)
44 ** 函數功能:向1602a-1讀BF , AC
45 *******************************************************************************************/
46 uchar lcm_rdint(void)
47 {
48 1 LCM_BYTE = 0xff;
49 1 LCM_RS = 0; /* 讀寄存器 */
50 1 LCM_R_W = 1;
51 1 LCM_E = 1; /* 高電平有效 */
52 1 /***u = LCM_BYTE; //***********特別注意:往往一時大意容易出小錯,結果出不來*************/
53 1 while (LCM_BYTE & 0x80); /* BF=1:忙 BF = 0: 空閑 */
54 1 return(LCM_BYTE);
55 1 }
C51 COMPILER V8.08 LCM_1602A 11/24/2009 12:52:21 PAGE 2
56
57
58 /*******************************************************************************************
59 ** 函數名稱: void lcm_wrint(uchar byte, uchar busyc)
60 ** 函數功能:向1602a-1寫寄存器. 包括些控制字和地址
61 ** 地址設置:地址為后7位,第8位為1
62 N=0 一行顯示 地址0x00-0x4f
63 N= 1 兩行顯示 首行 0x00-0x2f, 次行0x40-0x67
64 *******************************************************************************************/
65 void lcm_wrint(uchar byte, uchar busyc)
66 {
67 1 if (busyc) lcm_rdint(); /* busyc 為0 忽略遇忙檢測 */
68 1 // LCM_BYTE = byte;
69 1 LCM_RS = 0; /* 寫寄存器 */
70 1 LCM_R_W = 0;
71 1 LCM_BYTE = byte;
72 1 LCM_E = 0; /*下降沿有效 */
73 1 _nop_();
74 1 LCM_E = 1;//////////////////////////////////////////////////////////////////
75 1 }
76
77
78 /*******************************************************************************************
79 ** 函數名稱: void lcm_wrbyte(uchar byte)
80 ** 函數功能:向1602a-1寫一個數據,(寫完后ac可設置自動加一)
81 *******************************************************************************************/
82 void lcm_wrbyte(uchar byte)
83 {
84 1 lcm_rdint(); /* 遇忙檢測 */
85 1 LCM_RS = 1; /* 寫數據 */
86 1 LCM_R_W = 0;
87 1 LCM_BYTE = byte;
88 1 LCM_E = 0; /*下降沿有效 */
89 1 _nop_();
90 1 LCM_E = 1;
91 1 }
92
93
94 /*******************************************************************************************
95 ** 函數名稱: void lcm_ac(uchar x, uchar y)
96 ** 函數功能: 將AC光標移動到指定位置
97 *******************************************************************************************/
98 void lcm_ac(uchar x, uchar y)
99 {
100 1 y &= 0x01; /* 算地址 */
101 1 x &= 0x0F; //限制X不能大于15,Y不能大于1
102 1 if (y) x |= 0x40; //當要顯示第二行時地址碼+0x40;
103 1 x |= 0x80; // 算出指令碼
104 1 lcm_wrint(x, 0); //這里不檢測忙信號,發送地址碼
105 1 }
106
107
108 /*******************************************************************************************
109 ** 函數名稱: void lcm_displist(uchar x, uchar y, uchar *ddata)
110 ** 函數功能:向1602a-1任意地址顯示一串字符
111 *******************************************************************************************/
112 void lcm_displist(uchar x, uchar y, uchar *ddata)
113 {
114 1 uchar line = x; /* 字符串首列地址 */
115 1 uchar listlength = 0;
116 1 y &= 0x01;
117 1 x &= 0x0F; //限制X不能大于15,Y不能大于1
C51 COMPILER V8.08 LCM_1602A 11/24/2009 12:52:21 PAGE 3
118 1
119 1 if (y) line |= 0x40; //當要顯示第二行時地址碼+0x40;
120 1 line |= 0x80; // 算出指令碼
121 1 lcm_wrint(line, 1); //檢測忙信號,發送地址碼
122 1
123 1 while(ddata[listlength] != '\0') //若到達字串尾則退出
124 1 {
125 2 if (x <= 0x0F) //X坐標應小于0xF
126 2 {
127 3 // lcm_diapchar(x, y, ddata[listlength]);
128 3 lcm_wrbyte(ddata[listlength]);
129 3 x++;
130 3 listlength++;
131 3 }
132 2 else
133 2 {
134 3 break;
135 3 }
136 2 }
137 1 }
138
139 /*******************************************************************************************
140 ** 函數名稱: void lcm_init()
141 ** 函數功能:1602a-1初始設置
142 *******************************************************************************************/
143 void lcm_init()
144 {
145 1
146 1 lcm_wrint(0x38,1); /* D4= 1:8位數據接口,0:4位數據接口,D3=1:兩行顯示 0:一行顯示
147 1 D2 = 1: 5*10點陣 0 :5*7點陣*/
148 1 lcm_wrint(0x08,1); /* 顯示開關控制D3=1, D2顯示開關,D1光標開關,D0閃爍開關. 1:開,0:關 */
149 1
150 1 lcm_wrint(0x0e,1);
151 1 lcm_wrint(0x01,1); /* 清零 */
152 1 lcm_wrint(0x02,1); /* 光標歸為到HOME */
153 1 lcm_wrint(0x06,1); /* 輸入方式設置,D2=1, D1=1:AC自加,0:自減, D0=1:畫面平移,0:不動\
154 1 這里畫面設置為不動*/
155 1 //lcm_wrint(0x1c,1); /* 光標畫面移位,D3=1:畫面移 0:光標移動,D2=1:右移0:左移 */
156 1 }
157
158
159
160
161
162
163
164 /*--------------------------------宏編譯---------------------------------------------------*/
165 #if LCM_1602A_TEST > 0
166
167
168 void main()
169 {
170 1 uint i = 500000;
171 1 uchar code tab1[] = {"zhu yao xing fu!!!!"};
172 1 uchar code tab2[] = {" yong yuan! "};
173 1 while(i--);
174 1 lcm_init();
175 1
176 1 lcm_wrbyte('a');
177 1 lcm_wrbyte('a');
178 1 lcm_wrbyte('a');
179 1 lcm_wrbyte('a');
C51 COMPILER V8.08 LCM_1602A 11/24/2009 12:52:21 PAGE 4
180 1
181 1
182 1 lcm_displist(0,1,tab2);
183 1 lcm_displist(0,0,tab1);
184 1 lcm_rdbyte(); //測試可不要
185 1 while(1);
186 1 }
187
188 #endif
189 /*----------------------------宏編譯結束------------------------------------------------------*/
190
191
192
193
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 238 ----
CONSTANT SIZE = 37 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 4
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 + -