📄 lcd.lst
字号:
C51 COMPILER V6.12 LCD 08/14/2005 13:21:18 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\LCD.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE .\LCD.c DEBUG OBJECTEXTEND
stmt level source
1 #pragma large
2 #include <reg51.h>
3 #include <string.h>
4 #define COMW_ADD ((unsigned char volatile xdata *)(0xE060))// 指令口写地址
5 #define COMR_ADD ((unsigned char volatile xdata *)(0xE050))// 指令口读地址
6 #define DATW_ADD ((unsigned char volatile xdata *)(0xE020))// 数据口写地址
7 #define DATR_ADD ((unsigned char volatile xdata *)(0xE010))// 数据口读地址
8
9 sbit ACC_7=ACC^7;
10
11 char COM;//指令寄存器
12 char DAT;//数据寄存器
13
14 void lcd_init(void);
15 void display(char ch,char i);
16 void clear_LCD();
17 void WRITE_COMMAND(void);
18 void WRITE_DATA(void);
19 void Show_data(char dat);
20 void Set_ADD(int add);
21 int Get_ADD(unsigned char dat,unsigned char cnt);
22 char Get_char(int add,char i);
23 void lcd_delay();
24
25 char State_0_1_test();
26 char State_2_test();
27
28 void lcd_init(void)
29 {
30 1
31 1 //清屏
32 1 clear_LCD();
33 1
34 1 /*
35 1 //Set text home address 0x0000
36 1 DAT=0x00;
37 1 WRITE_DATA();
38 1 DAT=0x00;
39 1 WRITE_DATA();
40 1 COM=0x40;
41 1 WRITE_COMMAND();
42 1
43 1 //Set text area
44 1 DAT=0x0F;
45 1 WRITE_DATA();
46 1 DAT=0x00;
47 1 WRITE_DATA();
48 1 COM=0x41;
49 1 WRITE_COMMAND();
50 1 */
51 1
52 1
53 1 //Set graphic home address 0x0000
54 1 DAT=0x00;
55 1 WRITE_DATA();
C51 COMPILER V6.12 LCD 08/14/2005 13:21:18 PAGE 2
56 1 DAT=0x00;
57 1 WRITE_DATA();
58 1 COM=0x42;
59 1 WRITE_COMMAND();
60 1
61 1
62 1 //Set graphic area
63 1 DAT=0x10;
64 1 WRITE_DATA();
65 1 DAT=0x00;
66 1 WRITE_DATA();
67 1 COM=0x43;
68 1 WRITE_COMMAND();
69 1
70 1 //Mode set
71 1 COM=0x80;
72 1 WRITE_COMMAND();
73 1
74 1
75 1
76 1 //Display mode
77 1 COM=0x98;
78 1 WRITE_COMMAND();
79 1
80 1
81 1 COM=0xC4;
82 1 WRITE_COMMAND();
83 1
84 1 }
85
86 ///////////////////LCD显示///////////////////
87 void display(char V,char i)
88 {
89 1 char ch;
90 1 int add_temp;
91 1 add_temp=Get_ADD(V,i);//获取显示地址
92 1 ch=Get_char(add_temp,i);//获取显示数据
93 1 Set_ADD(add_temp); //建立地址
94 1 Show_data(ch);
95 1 }
96
97
98 //写指令代码子程序
99 void WRITE_COMMAND(void)
100 {
101 1 while(!State_0_1_test()) ;
102 1 *COMW_ADD=COM; //写指令代码
103 1 }
104
105
106 //写数据代码子程序
107 void WRITE_DATA(void)
108 {
109 1 while(!State_0_1_test()) ;
110 1 *DATW_ADD=DAT; //写指令代码
111 1 }
112
113
114 char State_0_1_test()
115 {
116 1 char temp;
117 1 temp=*COMR_ADD;
C51 COMPILER V6.12 LCD 08/14/2005 13:21:18 PAGE 3
118 1 temp&=0x03;
119 1 if(temp==0x03) return 1;
120 1 else return 0;
121 1 }
122
123 char State_2_test()
124 {
125 1 char temp;
126 1 temp=*COMR_ADD;
127 1 temp&=0x04;
128 1 if(temp==0x04) return 1;
129 1 else return 0;
130 1 }
131
132 void clear_LCD()
133 {
134 1 int i;
135 1 //显示数据清零
136 1 DAT=0x00;
137 1 WRITE_DATA();
138 1 DAT=0x00;
139 1 WRITE_DATA();
140 1 COM=0x24;
141 1 WRITE_COMMAND();
142 1
143 1 COM=0xB0;
144 1 WRITE_COMMAND();
145 1 for(i=0;i<2048;i++)
146 1 {
147 2 DAT=0; //传送数值
148 2 WRITE_DATA();
149 2 }
150 1 COM=0xB2;
151 1 WRITE_COMMAND();
152 1 Set_ADD(0);
153 1 }
154
155 //设置地址
156 void Set_ADD(int add)
157 {
158 1 char low;
159 1 char heigh;
160 1 low=add;
161 1 add>>=8;
162 1 heigh=add;
163 1 DAT=low;
164 1 WRITE_DATA();
165 1 DAT=heigh;
166 1 WRITE_DATA();
167 1 COM=0x24;
168 1 WRITE_COMMAND();
169 1 }
170
171
172 int Get_ADD(unsigned char dat,unsigned char cnt)
173 {
174 1 char temp;
175 1 char add;
176 1 int ADDR=512;
177 1 temp=dat/4;
178 1 temp-=31;
179 1 add=cnt/8;
C51 COMPILER V6.12 LCD 08/14/2005 13:21:18 PAGE 4
180 1 ADDR-=(temp*16);
181 1 ADDR+=add;
182 1 return ADDR;
183 1 }
184
185
186 char Get_char(int add,char i)
187 {
188 1 char ch_temp;
189 1 char count;
190 1 Set_ADD(add);
191 1 ch_temp=*DATR_ADD;
192 1 count=i%8;
193 1 switch(count)
194 1 {
195 2 case 0: return 0xFF;break;
196 2 case 1: return 0xFE;break;
197 2 case 2: return 0xFD;break;
198 2 case 3: return 0xFC;break;
199 2 case 4: return 0xFB;break;
200 2 case 5: return 0xFA;break;
201 2 case 6: return 0xF9;break;
202 2 case 7: return 0xF8;break;
203 2 default:return F0;
204 2 }
205 1 }
206
207 //显示数据
208 void Show_data(char dat)
209 {
210 1 COM=dat; //传送数值
211 1 WRITE_COMMAND();
212 1 }
213
214
215 void lcd_delay()
216 {
217 1 int i=2048;
218 1 while(i--);
219 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 476 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 2 9
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -