📄 lcd_dot.lst
字号:
C51 COMPILER V6.12 LCD_DOT 08/22/2005 21:55:30 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE LCD_DOT
OBJECT MODULE PLACED IN .\LCD_dot.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE .\LCD_dot.c DEBUG OBJECTEXTEND
stmt level source
1 /////////////////////////////////////////////////////////////////////
2 ///////////硬件连线说明:WR--AB4、RD--AB5、数据口0~7--DB0~DB7
3 /////////// C/D---AB6、FS--AB7、CE--OUTIO2
4 /////////////////////////////////////////////////////////////////////
5 #pragma large
6 #include <reg51.h>
7 #include <string.h>
8 #define COMW_ADD ((unsigned char volatile xdata *)(0xE060))// 指令口写地址
9 #define COMR_ADD ((unsigned char volatile xdata *)(0xE050))// 指令口读地址
10 #define DATW_ADD ((unsigned char volatile xdata *)(0xE020))// 数据口写地址
11 #define DATR_ADD ((unsigned char volatile xdata *)(0xE010))// 数据口读地址
12
13 char CM; //指令寄存器
14 char DT; //数据寄存器
15
16 extern int addr; //地址
17 extern unsigned char show_com;
18 extern char char_data;
19 extern unsigned char bmp_dat[1028];
20 int Start_addr;
21
22 void lcd_dot_init(void);
23 void Show_dot(unsigned char Y,unsigned char X);
24 void Show_text(unsigned char line,unsigned char col,unsigned char i);
25 void Show_string(unsigned char line,unsigned char col,unsigned char *string);
26 void Show_han(unsigned char line,unsigned char col,unsigned char *ch);
27 void clear_LCD();
28 void WRITE_COM(void);
29 void WRITE_DAT(void);
30 void Set_ADD();
31 void Get_dot_ADD(unsigned char Y,unsigned char X);
32 void Get_show_com(unsigned char i);
33 void lcd_delay();
34 void Show_int_num_dot(unsigned char line,unsigned char col,unsigned int temp,char wei,unsigned char float_
-);
35
36 char State_0_1_test();
37 char State_2_test();
38
39 void lcd_dot_init(void)
40 {
41 1
42 1 ////////////////////////////清屏///////////////////////////////
43 1 clear_LCD();
44 1
45 1 //////////////////////Set text home address 0x2000////////////
46 1 DT=0x00;
47 1 WRITE_DAT();
48 1 DT=0x04;
49 1 WRITE_DAT();
50 1 CM=0x40;
51 1 WRITE_COM();
52 1
53 1 ///////////////////////Set text area///////////////////////////
54 1 DT=0x10;
C51 COMPILER V6.12 LCD_DOT 08/22/2005 21:55:30 PAGE 2
55 1 WRITE_DAT();
56 1 DT=0x00;
57 1 WRITE_DAT();
58 1 CM=0x41;
59 1 WRITE_COM();
60 1
61 1
62 1 /////////////////////Set graphic home address 0x0000////////////
63 1 DT=0x00;
64 1 WRITE_DAT();
65 1 DT=0x00;
66 1 WRITE_DAT();
67 1 CM=0x42;
68 1 WRITE_COM();
69 1
70 1
71 1 /////////////////////Set graphic area////////////////////////////
72 1 DT=0x10;
73 1 WRITE_DAT();
74 1 DT=0x00;
75 1 WRITE_DAT();
76 1 CM=0x43;
77 1 WRITE_COM();
78 1
79 1
80 1 /////////////////////Mode set////////////////////////////////////
81 1 CM=0x80;
82 1 WRITE_COM();
83 1
84 1 ////////////////////Display mode//////////////////////////////////
85 1 CM=0x9c;
86 1 WRITE_COM();
87 1
88 1 }
89
90
91 /////////////////////////////////////LCD点显示///////////////////////////////////////
92 //(Y,X)为坐标值,左下方为(0,0);Y为纵向坐标:(0~255),X为横向坐标:(0~127)
93 /////////////////////////////////////////////////////////////////////////////////////
94 void Show_dot(unsigned char Y,unsigned char X)
95 {
96 1 Start_addr=0;
97 1 Get_dot_ADD(Y,X); //获取显示地址
98 1 Set_ADD(); //建立地址
99 1 Get_show_com(X); //获取显示数据
100 1 CM=show_com; //传送数值
101 1 WRITE_COM();
102 1 }
103
104
105 ////////////////////////////////////LCD字符显示/////////////////// /////////////////
106 //(line,col)为坐标值,左上方为(0,0);line为行数:(0~7),col为列数:(0~15)
107 /////////////////////////////////////////////////////////////////////////////////////
108 void Show_text(unsigned char line,unsigned char col,unsigned char i)
109 {
110 1 Start_addr=0x0400;
111 1 addr=Start_addr+16*line+col;//获取显示地址
112 1 Set_ADD(); //建立地址
113 1 DT=i;
114 1 *DATW_ADD=DT;
115 1 CM=0xC4;
116 1 WRITE_COM();
C51 COMPILER V6.12 LCD_DOT 08/22/2005 21:55:30 PAGE 3
117 1 }
118
119
120
121 ////////////////////////////////////LCD字符串显示/////////////////// /////////////////
122 //(line,col)为坐标值,左上方为(0,0);line为行数:(0~7),col为列数:(0~15)
123 /////////////////////////////////////////////////////////////////////////////////////
124 void Show_string(unsigned char line,unsigned char col,unsigned char *string)
125 {
126 1 unsigned char str_len;
127 1 unsigned char cnt;
128 1 str_len=strlen(string);
129 1 for(cnt=0;cnt<str_len-1;cnt++)
130 1 {
131 2 Show_text(line,col+cnt,string[cnt]-32);
132 2 }
133 1
134 1 }
135
136
137
138 /////////////////////////////////////LCD汉字显示/////////////////////////////////////
139 //(line,col)为坐标值,左上方为(0,0);line为行数:(0~63),col为列数:(0~7)
140 /////////////////////////////////////////////////////////////////////////////////////
141 void Show_han(unsigned char line,unsigned char col,unsigned char *ch)
142 {
143 1 unsigned char cnt;
144 1 Start_addr=0x0000;
145 1 addr=Start_addr+16*line+col*2; //获取显示地址
146 1
147 1 for(cnt=0;cnt<32;cnt+=2)
148 1 {
149 2 Set_ADD(); //建立地址
150 2 CM=0xB0;
151 2 WRITE_COM();
152 2 DT=ch[cnt]; //传送数值
153 2 WRITE_DAT();
154 2 DT=ch[cnt+1]; //传送数值
155 2 WRITE_DAT();
156 2 CM=0xB2;
157 2 WRITE_COM();
158 2 addr+=16;
159 2 }
160 1 addr=0;
161 1 Set_ADD();
162 1 }
163
164 /////////////////////////////////////////////////////////////////////////////////////
165 /////////////////////////////////////LCD图形显示/////////////////////////////////////
166 /////////////////////////////////////////////////////////////////////////////////////
167 void Show_bmp()
168 {
169 1 int i;
170 1 //////显示图形
171 1 DT=0x00;
172 1 WRITE_DAT();
173 1 DT=0x00;
174 1 WRITE_DAT();
175 1 CM=0x24;
176 1 WRITE_COM();
177 1
178 1 CM=0xB0;
C51 COMPILER V6.12 LCD_DOT 08/22/2005 21:55:30 PAGE 4
179 1 WRITE_COM();
180 1 for(i=0;i<1024;i++)
181 1 {
182 2 DT=bmp_dat[i]; //传送数值
183 2 WRITE_DAT();
184 2 }
185 1 CM=0xB2;
186 1 WRITE_COM();
187 1 addr=0;
188 1 Set_ADD();
189 1 }
190
191
192
193 ////////////////////////写指令代码子程序//////////////////////
194 void WRITE_COM(void)
195 {
196 1 while(!State_0_1_test()) ;
197 1 *COMW_ADD=CM; //写指令代码
198 1 }
199
200
201 /////////////////////////写数据代码子程序/////////////////////
202 void WRITE_DAT(void)
203 {
204 1 while(!State_0_1_test()) ;
205 1 *DATW_ADD=DT; //写指令代码
206 1 }
207
208 //////////////////////////判断状态0、1/////////////////////////
209 char State_0_1_test()
210 {
211 1 char temp;
212 1 temp=*COMR_ADD;
213 1 temp&=0x03;
214 1 if(temp==0x03) return 1;
215 1 else return 0;
216 1 }
217
218
219 ///////////////////////////判断状态2////////////////////////////
220 char State_2_test()
221 {
222 1 char temp;
223 1 temp=*COMR_ADD;
224 1 temp&=0x04;
225 1 if(temp==0x04) return 1;
226 1 else return 0;
227 1 }
228
229
230 ////////////////////////////清屏////////////////////////////////
231 void clear_LCD()
232 {
233 1 int i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -