📄 lcd12864.lst
字号:
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN lcd12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcd12864.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #include <intrins.h>
3
4
5 #define SENDCOMM 0XF8 //0XF1000
6 #define READCOMM 0XFC //0XF1100
7 #define SENDDATA 0XFA //0XF1010
8 #define READDATA 0XFE //0XF1110
9
10 void LCD_send_byte(unsigned char a);
11 unsigned char LCD_read_byte(void);
12 unsigned char LCD_bf(void);
13 unsigned char TEMP_BUFF[5];
14 void LCD_comm(unsigned char comm);
15 void LCD_setxy(unsigned char x,unsigned char y);
16 void LCD_PORTInit(void);
17 void LCD_WriteStr(unsigned char dis_addr_x,unsigned char dis_addr_y,char* str);
18 void LCD_WriteDBC(unsigned char dis_addr_x,unsigned char dis_addr_y,unsigned char dis_dat);
19
20
21 sbit E_CLK =P2^2; //clock input
22 sbit RW_SID=P2^1; //data input/output
23 sbit RS_CS =P2^0; //chip select
24 sbit LCD_PSB=P2^3;
25 sbit LCD_A =P2^4;
26
27 sbit Beep = P1^0;
28 sbit power = P1^1;
29 sbit tell_charge = P1^2;
30
31 void delay(unsigned int n)
32 {
33 1 unsigned int i;
34 1 for(i=0; i<n; i++) {;}
35 1 }
36
37 void LCD_PORTInit(void)
38 {
39 1
40 1 E_CLK=0;
41 1 RS_CS=0;
42 1 }
43
44 void LCD_send_byte(unsigned char a)
45 {
46 1 unsigned char i;
47 1 for(i=8;i>0;i--)
48 1 {
49 2 if(a&(0x01<<(i-1)))
50 2 RW_SID=1;
51 2 else
52 2 RW_SID=0;
53 2 delay(2);
54 2 E_CLK=1;
55 2 delay(2);
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 2
56 2 E_CLK=0;
57 2 delay(2);
58 2 }
59 1 }
60
61 unsigned char LCD_read_byte(void)
62 {
63 1 unsigned char i,dat=0;
64 1 for(i=8;i>0;i--)
65 1 {
66 2 E_CLK=1;
67 2 delay(2);
68 2 if(RW_SID==1)
69 2 dat|=(0x01<<(i-1));
70 2 E_CLK=0;
71 2 delay(2);
72 2 }
73 1 return dat;
74 1 }
75
76 unsigned char LCD_bf(void)
77 {
78 1 unsigned char readh,readl,bf;
79 1 RS_CS=1;
80 1 delay(2);
81 1
82 1 LCD_send_byte(READCOMM);
83 1
84 1 readh=LCD_read_byte();
85 1
86 1 readl=LCD_read_byte();
87 1
88 1 delay(2);
89 1 RS_CS=0;
90 1
91 1 readl=(readl>>4);
92 1 bf=(readh&0xf0)|(readl&0x0f);
93 1 return bf;
94 1 }
95
96 void LCD_comm(unsigned char comm)
97 {
98 1 unsigned char temp;
99 1
100 1 do{
101 2 temp=LCD_bf();
102 2 }while(temp&0X80);
103 1
104 1 RS_CS=1;
105 1 delay(2);
106 1
107 1 LCD_send_byte(SENDCOMM);
108 1
109 1 temp=comm&0XF0;
110 1 LCD_send_byte(temp);
111 1
112 1 temp=((comm&0X0F)<<4)&0XF0;
113 1 LCD_send_byte(temp);
114 1
115 1 delay(2);
116 1 RS_CS=0;
117 1 }
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 3
118
119 void LCD_data(unsigned char lcd_data)
120 {
121 1 unsigned char temp;
122 1 RS_CS=1;
123 1 delay(2);
124 1 LCD_send_byte(SENDDATA);
125 1
126 1 temp=lcd_data&0xf0;
127 1 LCD_send_byte(temp);
128 1
129 1 temp=(lcd_data&0X0F)<<4;
130 1 LCD_send_byte(temp);
131 1
132 1 delay(2);
133 1 RS_CS=0;
134 1 }
135 /*******************************************************************/
136 // 设置显示位置 X(1~16),Y(1~4)
137 /*******************************************************************/
138 void LCD_setxy(unsigned char x,unsigned char y)
139 {
140 1 switch(y)
141 1 {
142 2 case 1:
143 2 LCD_comm(0X7F+x);break;
144 2 case 2:
145 2 LCD_comm(0X8F+x);break;
146 2 case 3:
147 2 LCD_comm(0X87+x);break;
148 2 case 4:
149 2 LCD_comm(0X97+x);break;
150 2 default:break;
151 2 }
152 1 }
153
154 /*******************************************************************/
155 // 在指定位置显示一半角字符
156 /*******************************************************************/
157 /*void LCD_WriteDBC(unsigned char dis_addr_x,unsigned char dis_addr_y,unsigned char dis_dat)
158 {
159 LCD_setxy(dis_addr_x,dis_addr_y);
160 LCD_data(dis_dat);
161 }*/
162 /*******************************************************************/
163 // 在指定位置显示字符串
164 /*******************************************************************/
165 void LCD_WriteStr(unsigned char dis_addr_x,unsigned char dis_addr_y,char* str)
166 {
167 1 unsigned char LCD_temp;
168 1 LCD_setxy(dis_addr_x,dis_addr_y);
169 1 LCD_temp=*str;
170 1 while(LCD_temp != 0x00)
171 1 {
172 2 LCD_data(LCD_temp);
173 2 LCD_temp=*(++str);
174 2 }
175 1 }
176 void LCD_WriteData(unsigned char dis_addr_x,unsigned char dis_addr_y,unsigned char dat)
177 {
178 1 LCD_setxy(dis_addr_x,dis_addr_y);
179 1 LCD_data(dat);
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 4
180 1 }
181 void LCD_init(void)
182 {
183 1 unsigned char i;
184 1
185 1 LCD_A=0; //开背光
186 1 LCD_PSB=0; //串行通信
187 1
188 1 LCD_PORTInit();
189 1 i=LCD_bf();
190 1 while(i==0x80)
191 1 {
192 2 delay(80);
193 2 i=LCD_bf();
194 2 }
195 1 //RST=0;
196 1 RS_CS=0;
197 1 //serial mode
198 1 delay(100);
199 1 // RST=1;
200 1 LCD_comm(0x30);//功能设置,一次送8位数据,基本指令集
201 1 LCD_comm(0x0C);//0000,1100 整体显示,游标off,游标位置off
202 1 LCD_comm(0x01);//0000,0001 清DDRAM
203 1 LCD_comm(0x02);//0000,0010 DDRAM地址归位
204 1 LCD_comm(0x80);//1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC
205 1 //LCD_comm(0x04);//点设定,显示字符/光标从左到右移位,DDRAM地址加 一
206 1 //LCD_comm(0x0F);//显示设定,开显示,显示光标,当前显示位反白闪动
207 1 }
208
209
210 #define jump_ROM 0xCC
211 #define start 0x44
212 #define read_EEPROM 0xBE
213 unsigned int TMPH,TMPL;
214 sbit DQ=P3^0;
215
216 /*============================================================================/
217 *函数名称:reset
218 *入口参数:无;返回deceive_ready
219 *函数功能:复位
220 /============================================================================*/
221 void reset(void)
222 {
223 1 DQ=0;
224 1 delay(48);
225 1 DQ=1;
226 1 delay(5);
227 1 while(DQ);
228 1 delay(48);
229 1 }
230 /*==============================================================================/
231 *函数名称:read_bit
232 *入口参数:无;返回接收的数据
233 *函数功能:读1bit子程序
234 /==============================================================================*/
235 unsigned char read_bit(void)
236 {
237 1 unsigned char i;
238 1 DQ=0;
239 1 DQ=1;
240 1 for(i=0;i<3;i++);
241 1 return(DQ);
C51 COMPILER V7.09 LCD12864 11/27/2008 20:04:08 PAGE 5
242 1 }
243 /*================================================================================/
244 *函数名称:vrite_bit
245 *入口参数:bitval
246 *函数功能:写1bit子程序
247 /=================================================================================*/
248 void write_bit(unsigned char bitval)
249 {
250 1 DQ=0;
251 1 if(bitval==1)
252 1 DQ=1;
253 1 delay(5);
254 1 DQ=1;
255 1 }
256 /*===============================================================================/
257 *函数名称:write_byte
258 *入口参数:val
259 *函数功能:写1byte子程序
260 /================================================================================*/
261 void write_byte(unsigned char val)
262 {
263 1 unsigned char i,temp;
264 1 for(i=0;i<8;i++)
265 1 {
266 2 temp=val>>i;
267 2 temp=temp&0x01;
268 2 write_bit(temp);
269 2 delay(5);
270 2 }
271 1 }
272 /*=============================================================================/
273 *函数名称:read_byte
274 *入口参数:无
275 *返回值:接收的数据value
276 *函数功能:读一个byte子程序
277 /==============================================================================*/
278 unsigned char read_byte(void)
279 {
280 1 unsigned char i,m,receive_data;
281 1 receive_data=0;
282 1 for(i=0;i<8;i++)
283 1 {
284 2 m=read_bit();
285 2 receive_data=(m<<7)|(receive_data>>1);
286 2 delay(6);
287 2 }
288 1 return(receive_data);
289 1 }
290 /*==========================================================================/
291 *函数名称:getTemValue
292 *入口参数:无
293 *返回值:value
294 *函数功能:取得温度值
295 /==========================================================================*/
296 void getTemValue(void)
297 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -