?? lcd160xb.lst
字號:
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE LCD160XB
OBJECT MODULE PLACED IN .\OutPut\Lcd160xb.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SRC\Lcd160xb.c BROWSE INCDIR(.\HEAD\) DEBUG OBJECTEXTEND PRINT(.\List\Lcd16
-0xb.lst) TABS(8) OBJECT(.\OutPut\Lcd160xb.obj)
line level source
1 //==============================================================================
2 //字符液晶模塊的C51程序源文件
3 //適用于內建ASCII字符字庫的單/雙行液晶,以及數據端口采用8位或4位兩種引腳的接法!
4 //File Name=lcd160xb.c
5 // 1.8BIT數據接口(PIN3 V0不能連線)
6 // 4BIT數據接口(PIN3 V0不能連線)
7 // 增加4SPI接口方式(PIN3 V0不能連線)
8 // 增加3SPI接口方式(PIN3 V0不能連線)
9 //==============================================================================
10 #include <Intrins.h>
11 #include "public.h"
12 #include "W78E52.h"
13 #include "Delay_s.h"
14 #include "lcd160xb.h"
15
16 //全局變量
17 uchar data lcd_line_1[CONST_LCD160XB_LINE_WIDTH+1]; //液晶第一行顯示緩沖
18 uchar data lcd_line_2[CONST_LCD160XB_LINE_WIDTH+1]; //液晶第二行顯示緩沖
19
20 //內部函數的定義
21 #if ((LCD_PORT ==PORT_WIDTH_8BIT) || (LCD_PORT ==PORT_WIDTH_4BIT) )
22 static void _lcd160xb_judge_busy(void);
23 static uchar _lcd160xb_recv_byte(uchar rs);
24 #endif
25
26 static void _lcd160xb_send_byte(uchar da, uchar rs);
27
28 #if (LCD_PORT ==PORT_WIDTH_4BIT)
static void _lcd160xb_send_half_cmd(uchar da);
#endif
31
32 /********************************************************/
33 //序號:
34 // HD_LCD160XB_S01
35 //功能:
36 // 液晶初始化,沒有關標顯示
37 //輸入:
38 // 無
39 //輸出:
40 // 無
41 /********************************************************/
42 void lcd160xb_init_set(void)
43 {
44 1 #if (LCD_PORT ==PORT_WIDTH_4BIT)
#if (LCD_TYPE ==TYPE_LCD1601B)
delay_x1ms(15);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_4BIT_1LINE,CONST_LCD160XB_COMMAND);
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 2
#else //2行顯示
delay_x1ms(50);
_lcd160xb_send_half_cmd(0x30);
delay_x1ms(10);
_lcd160xb_send_half_cmd(0x30);
delay_x1ms(1);
_lcd160xb_send_half_cmd(0x30);
delay_x1ms(1);
_lcd160xb_send_half_cmd(0x20);
delay_x1ms(1);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x28,CONST_LCD160XB_COMMAND);
#endif
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
lcd160xb_clr_scr();
lcd160xb_clr_scr();
//RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x24,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x20,CONST_LCD160XB_COMMAND);
////////////
#elif (LCD_PORT ==PORT_WIDTH_4SPI)
delay_x1ms(50);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_OFF,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
delay_x1ms(11);
_lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON,CONST_LCD160XB_COMMAND);
lcd160xb_clr_scr();
//RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0
_lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);
#elif (LCD_PORT ==PORT_WIDTH_3SPI)
delay_x1ms(50);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 3
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_OFF,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
delay_x1ms(11);
_lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON,CONST_LCD160XB_COMMAND);
lcd160xb_clr_scr();
//RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0
_lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);
#else //8位數據端口
138 1 #if (LCD_TYPE ==TYPE_LCD1601B)
delay_x1ms(15);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
delay_x1ms(5);
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_1LINE,CONST_LCD160XB_COMMAND);
#else //2行顯示
149 1 delay_x1ms(15);
150 1 _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
151 1 delay_x1ms(5);
152 1 _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
153 1 delay_x1ms(5);
154 1 _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
155 1
156 1 _lcd160xb_judge_busy();
157 1 _lcd160xb_send_byte(CMD_LCD160XB_CONFIG_8BIT_2LINE,CONST_LCD160XB_COMMAND);
158 1 #endif
159 1
160 1 _lcd160xb_judge_busy();
161 1 _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_OFF,CONST_LCD160XB_COMMAND);
162 1 _lcd160xb_judge_busy();
163 1 _lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
164 1 _lcd160xb_judge_busy();
165 1 _lcd160xb_send_byte(CMD_LCD160XB_CURSE_SETS,CONST_LCD160XB_COMMAND);
166 1 _lcd160xb_judge_busy();
167 1 _lcd160xb_send_byte(CMD_LCD160XB_DISPLAY_ON,CONST_LCD160XB_COMMAND);
168 1
169 1 //20061128(2-1)
170 1 //RE=1, SelectCodeBank=Bank1, LcdLines=2,RE=0
171 1 _lcd160xb_judge_busy();
172 1 _lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND);
173 1 _lcd160xb_judge_busy();
174 1 _lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
175 1 _lcd160xb_judge_busy();
176 1 _lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
177 1 _lcd160xb_judge_busy();
178 1 _lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND);
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 4
179 1 ////////////
180 1
181 1 #endif
182 1
183 1 }
184
185 /********************************************************/
186 //序號:
187 // HD_LCD160XB_S02
188 //功能:
189 // 液晶清屏
190 //輸入:
191 // 無
192 //輸出:
193 // 無
194 /********************************************************/
195 void lcd160xb_clr_scr(void)
196 {
197 1 #if (LCD_PORT ==PORT_WIDTH_4BIT)
_lcd160xb_judge_busy();
_lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
#elif (LCD_PORT ==PORT_WIDTH_4SPI)
_lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
delay_x1ms(2);
#elif (LCD_PORT ==PORT_WIDTH_3SPI)
_lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
delay_x1ms(2);
#else
207 1 _lcd160xb_judge_busy();
208 1 _lcd160xb_send_byte(CMD_LCD160XB_CLR_SCREEN,CONST_LCD160XB_COMMAND);
209 1 #endif
210 1 }
211
212
213 /********************************************************/
214 //序號:
215 // HD_LCD160XB_S03
216 //功能:
217 // 液晶設置顯示數據RAM(DD RAM)的地址
218 //輸入:
219 // pos 液晶的字符位置,=0...15 從作到右16個字符
220 // line 指定的行號,=0/1 表示第1/2行
221 //輸出:
222 // 無
223 /********************************************************/
224 void lcd160xb_set_disp_addr(uchar pos, uchar line)
225 {
226 1 //保證平時RE=0
227 1 #if (LCD_PORT ==PORT_WIDTH_4BIT)
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x20,CONST_LCD160XB_COMMAND); //RE=0
#if (LCD_TYPE ==TYPE_LCD1601B)
line =0x80 |(pos &0x0f);
#else
line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0) |(pos &0x0f);
#endif
_lcd160xb_judge_busy();
_lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x24,CONST_LCD160XB_COMMAND); //RE=1
_lcd160xb_judge_busy();
C51 COMPILER V8.01 LCD160XB 12/08/2006 10:51:10 PAGE 5
_lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
_lcd160xb_judge_busy();
_lcd160xb_send_byte(0x20,CONST_LCD160XB_COMMAND); //RE=0
#elif (LCD_PORT ==PORT_WIDTH_4SPI)
_lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND); //RE=0
line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0) |(pos &0x0f);
_lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND); //RE=1
_lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND); //RE=0
#elif (LCD_PORT ==PORT_WIDTH_3SPI)
_lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND); //RE=0
line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0) |(pos &0x0f);
_lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND); //RE=1
_lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x11,CONST_LCD160XB_COMMAND);
_lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND); //RE=0
#else //8BIT 數據接口
270 1 //20061128(2-2)
271 1 _lcd160xb_judge_busy();
272 1 _lcd160xb_send_byte(0x30,CONST_LCD160XB_COMMAND); //RE=0
273 1 //////////////
274 1
275 1 #if (LCD_TYPE ==TYPE_LCD1601B)
line =0x80 |(pos &0x0f);
#else
278 1 line =(line ==CONST_LCD160XB_FIRST_LINE ? 0x80 :0xC0) |(pos &0x0f);
279 1 #endif
280 1 _lcd160xb_judge_busy();
281 1 _lcd160xb_send_byte(line, CONST_LCD160XB_COMMAND);
282 1
283 1 //20061128(2-3)
284 1 _lcd160xb_judge_busy();
285 1 _lcd160xb_send_byte(0x34,CONST_LCD160XB_COMMAND); //RE=1
286 1 _lcd160xb_judge_busy();
287 1 _lcd160xb_send_byte(0x08,CONST_LCD160XB_COMMAND);
288 1 _lcd160xb_judge_busy();
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -