📄 lcd.lst
字号:
C51 COMPILER V7.06 LCD 01/24/2007 16:22:12 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN lcd.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd.c DEBUG OBJECTEXTEND PAGEWIDTH
-(79) PAGELENGTH(66)
stmt level source
1 #include "lcd.h"
2 #include "delay.h"
3
4 #ifdef Debug
5 #include <stdio.h>
6 #endif
7
8 unsigned char CurOffset,CurRow,CurPage,CurCol;
9
10 void LCD_BUSY(unsigned char lr) //判断忙标志
11 {
12 1 unsigned char status;
13 1
14 1 if(lr==RIGHT)
15 1 {
16 2 CLEAR_LCD_CS2; //cs2=0
17 2 SET_LCD_CS1; //cs1=1
18 2 }
19 1 else
20 1 {
21 2 SET_LCD_CS2; //cs2=1
22 2 CLEAR_LCD_CS1; //cs1=0
23 2 }
24 1 SET_LCD_CMD;
25 1
26 1 SET_LCD_READ;
27 1 SET_LCD_E;
28 1 delay_us();
29 1 while(LCD_OP_PORT&LCD_STATUS_BUSY)
30 1 {
31 2 CLEAR_LCD_E;
32 2 delay_us();
33 2 SET_LCD_E;
34 2 delay_us();
35 2 }
36 1 CLEAR_LCD_E;
37 1 SET_LCD_WRITE;
38 1
39 1 }
*** WARNING C280 IN LINE 12 OF LCD.C: 'status': unreferenced local variable
40
41 void write_LCD(unsigned char lr,unsigned char cd,unsigned char da
-t) /*写入指令或数据*/
42 {
43 1
44 1 LCD_BUSY(lr);
45 1 if(cd==CMD)
46 1 SET_LCD_CMD;
47 1 else
48 1 SET_LCD_DATA;
49 1
50 1 SET_LCD_WRITE;
51 1 SET_LCD_E;
52 1 LCD_OP_PORT = dat;
53 1
54 1 #ifdef Debug
C51 COMPILER V7.06 LCD 01/24/2007 16:22:12 PAGE 2
55 1 printf("%x \n",dat);
56 1 #endif
57 1
58 1 delay_nus(4);
59 1 CLEAR_LCD_E;
60 1 }
61
62 unsigned char read_LCD(unsigned char lr) /* 读显示数据 */
63 {
64 1 unsigned char dat;
65 1
66 1 LCD_BUSY(lr);
67 1 SET_LCD_DATA;
68 1
69 1 SET_LCD_READ;
70 1 SET_LCD_E;
71 1
72 1 delay_us();
73 1
74 1 dat=LCD_OP_PORT;
75 1
76 1 CLEAR_LCD_E;
77 1 SET_LCD_WRITE;
78 1
79 1 LCD_BUSY(lr);
80 1 SET_LCD_DATA;
81 1
82 1 SET_LCD_READ;
83 1 SET_LCD_E;
84 1
85 1 delay_us();
86 1
87 1 dat=LCD_OP_PORT;
88 1 CLEAR_LCD_E;
89 1 SET_LCD_WRITE;
90 1
91 1 return dat;
92 1 }
93
94 void set_start_line_L(unsigned char line) /*设置显示起始行*/ //0-
-63
95 {
96 1 write_LCD(LEFT,CMD,0xc0|line);
97 1 }
98
99 void set_start_line_R(unsigned char line) /*设置显示起始行*/ //0-
-63
100 {
101 1 write_LCD(RIGHT,CMD,0xc0|line);
102 1 }
103
104 void set_page_L(unsigned char page) /*设置X地址 设置页*/ //0-7
105 {
106 1 write_LCD(LEFT,CMD,0xb8|page);
107 1 }
108
109 void set_page_R(unsigned char page) /*设置X地址 设置页*/ //0-7
110 {
111 1 write_LCD(RIGHT,CMD,0xb8|page);
112 1 }
113
114 void set_col_addr_L(unsigned char col) /*设置Y地址*/ //0-63
115 {
116 1 write_LCD(LEFT,CMD,0x40|col);
C51 COMPILER V7.06 LCD 01/24/2007 16:22:12 PAGE 3
117 1 }
118
119 void set_col_addr_R(unsigned char col) /*设置Y地址*/ //0-63
120 {
121 1 write_LCD(RIGHT,CMD,0x40|col);
122 1 }
123
124 void LCD_Init(void) /*初始化函数*/
125 {
126 1 set_start_line_L(0); /*显示起始行为0*/
127 1 set_start_line_R(0); /*显示起始行为0*/
128 1
129 1 write_LCD(LEFT,CMD,DISPLAY_ON); /* 开显示 */
130 1
131 1 #ifdef Debug
132 1 //printf("OK \n");
133 1 #endif
134 1
135 1 // write_LCD(RIGHT,CMD,DISPLAY_ON); /* 开显示 */
136 1
137 1 for(;;)
138 1 {
139 2 // write_LCD(RIGHT,CMD,DISPLAY_ON); /* 开显示 */
140 2 // write_LCD(RIGHT,CMD,DISPLAY_OFF); /* 开显示 */
141 2 LCD_clr();
142 2 disp_char('1');
143 2
144 2 // disp_char('1');
145 2 }
146 1 }
147
148 void LCD_clr(void) /*清屏函数*/
149 {
150 1 unsigned char pages,i;
151 1 for(pages=6;pages<8;pages++)
152 1 {
153 2 set_page_L(pages); /* X 页地址 */
154 2 set_page_R(pages); /* X 页地址 */
155 2 for(i=0;i<20;i++)
156 2 {
157 3 set_col_addr_L(i);//Y
158 3 set_col_addr_R(i);//Y
159 3 write_LCD(LEFT,DATA,0x0);
160 3 write_LCD(RIGHT,DATA,0x0);
161 3 }
162 2 }
163 1 }
164
165 //ASCII 字模宽度及高度
166 #define ASC_CHR_WIDTH 8
167 #define ASC_CHR_HEIGHT 12
168
169 typedef struct typFNT_ASC16 /* 汉字字模显示数据结构 */
170 {
171 char Index[1];
172 char Msk[16];
173 };
174
175 struct typFNT_ASC16 ASC_16[] = { /* 显示为8*16 Curier 10 常规*
-/
176 "1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x0
-4,0x07,0x04,0x04,0x00,
177 };
178
C51 COMPILER V7.06 LCD 01/24/2007 16:22:12 PAGE 4
179 #define ASC_HZ_WIDTH 12
180 //#define ASC_HZ_HEIGHT 12
181
182 typedef struct typFNT_GB16 /*12*16 汉字字模显示数据结构 */
183 {
184 char Index[2];
185 char Msk[24];
186 };
187
188 unsigned char GetPage(void) /*得到当前页*/
189 {
190 1 return CurPage;
191 1 }
192
193 unsigned char GetCol(void) /*得到当前列*/
194 {
195 1 return CurCol;
196 1 }
197
198 void SetPageCol(unsigned char upage, unsigned char ucol) /* 设置
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -