📄 water.lst
字号:
C51 COMPILER V7.06 WATER 10/28/2007 09:52:35 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE WATER
OBJECT MODULE PLACED IN water.OBJ
COMPILER INVOKED BY: C:\Keil\UV2\C51\BIN\C51.EXE water.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "water.h"
2
3 uchar xdata lcdPosX, lcdPosY; //X,Y坐标
4 uchar xdata halfScr, halfLineCnt, basicBlock; //半屏,半屏行数,N*8块
5
6 uchar xdata Option = 0; //液晶屏选项
7 uchar xdata Page = 0; //液晶屏页码
8
9 uchar ErrorNum = 0; //0-无错误
10 uchar xdata Errorflag[9];
11
12 /**********************************delay**************************************************/
13 void delay(uint i)
14 {
15 1 while (i--) ;
16 1 }
17 void Ldelay()
18 {
19 1 int i;
20 1 for(i=0;i<10;i++)
21 1 {
22 2 delay(50000);
23 2 delay(50000);
24 2 delay(50000);
25 2 delay(50000);
26 2 delay(50000);
27 2 }
28 1 }
29 /********************************** HD7279A *********************************************/
30 /* Long delay for 7279 read or write */
31 void long_delay(void)
32 {
33 1 uchar i;
34 1 for( i = 0; i < 0xff; i++)
35 1 {
36 2 nop();
37 2 nop();
38 2 }
39 1 }
40
41 /* Short delay for 7279 read or write */
42 void short_delay(void)
43 {
44 1 uchar i;
45 1 for( i = 0; i <0x60; i++);
46 1 }
47
48 /*Write 7279 function */
49 void send_byte( uchar out_byte)
50 {
51 1 uchar i;
52 1 CS = 0;
53 1 long_delay();
54 1 for(i = 0; i < 8; i++)
55 1 {
C51 COMPILER V7.06 WATER 10/28/2007 09:52:35 PAGE 2
56 2 if(out_byte & 0x80)
57 2 {
58 3 DAT = 1;
59 3 }
60 2 else
61 2 {
62 3 DAT = 0;
63 3 }
64 2 CLK = 1;
65 2 short_delay();
66 2 CLK = 0;
67 2 short_delay();
68 2 out_byte = out_byte*2;
69 2 }
70 1 DAT = 0;
71 1 }//end of send_byte function
72
73 uchar receive_byte(void)
74 {
75 1 uchar i, in_byte;
76 1 DAT = 1;
77 1 long_delay();
78 1 for( i = 0; i < 8; i++)
79 1 {
80 2 CLK = 1;
81 2 short_delay();
82 2 in_byte = in_byte*2;
83 2 if(DAT)
84 2 {
85 3 in_byte = in_byte | 0x01;
86 3 }
87 2 CLK = 0;
88 2 short_delay();
89 2 }
90 1 DAT = 0;
91 1 return (in_byte);
92 1 }
93
94 /* interface of write 7279 function*/
95 void write7279(uchar cmd, uchar dta)
96 {
97 1 send_byte(cmd); //first send command byte
98 1 send_byte(dta); //second send user data
99 1 }
100
101 /* interface of read 7279 function*/
102 uchar read7279(uchar cmd)
103 {
104 1 send_byte(cmd); //first send command to read data
105 1 return (receive_byte()); //read data
106 1 }
107
108
109 /********************************************* 液晶 ********************************************/
110
111 //ms延时
112 void lcd_DelayMs (uint ms)
113 {
114 1 uchar i;
115 1 while (ms)
116 1 {
117 2 for (i = 0; i < 254; i++);
C51 COMPILER V7.06 WATER 10/28/2007 09:52:35 PAGE 3
118 2 ms--;
119 2 }
120 1 }
121
122
123
124 //串行数据输入一字节
125 void LCD_SendByte(uchar s_data)
126 {
127 1 uchar i;
128 1 SID=0;
129 1 SCLK=0;
130 1 for(i=0;i<8;i++)
131 1 {
132 2 SID=(bit)(s_data & 0x80);
133 2 delay(1);
134 2 SCLK=1;
135 2 delay(1);
136 2 s_data<<=1;
137 2 delay(1);
138 2 SCLK=0;
139 2 delay(1);
140 2 }
141 1 }
142 //命令输入
143 void LCD_SendComm(uchar comm_data)
144 {
145 1 delay(1);
146 1 LCD_SendByte(0xF8 & 0xFF); //send 1 1 1 1 1 RW=0 RS=0 0
147 1 delay(1);
148 1 LCD_SendByte(comm_data & 0xF0); //send D7 D6 D5 D4 0 0 0 0
149 1 delay(1);
150 1 LCD_SendByte((comm_data & 0x0F)<<4); //send D3 D2 D1 D0 0 0 0 0
151 1 delay(150);
152 1 }
153
154
155 //数据输入
156 void LCD_SendData(uchar send_data)
157 {
158 1 LCD_SendByte(0xFA & 0xFF); // 1 1 1 1 1 RW=0 RS=1 0
159 1 delay(1);
160 1 LCD_SendByte(send_data & 0xF0); //send D7 D6 D5 D4 0 0 0 0
161 1 delay(1);
162 1 LCD_SendByte((send_data & 0x0F)<<4); //send D3 D2 D1 D0 0 0 0 0
163 1 delay(150);
164 1 }
165
166
167 //设定光标位置
168 void Set_Cursor(uchar X, Y)
169 {
170 1 if (X == 0)
171 1 {
172 2 X = 0x80;
173 2 }
174 1 else if (X == 1)
175 1 {
176 2 X = 0x90;
177 2 }
178 1 else if (X == 2)
179 1 {
C51 COMPILER V7.06 WATER 10/28/2007 09:52:35 PAGE 4
180 2 X = 0x88;
181 2 }
182 1 else if (X == 3)
183 1 {
184 2 X = 0x98;
185 2 }
186 1 Y = X + Y;
187 1 LCD_SendComm(Y);
188 1
189 1 }
190
191
192 //清除屏幕
193 void lcd_Clear(void)
194 {
195 1
196 1 LCD_SendComm(SClear);
197 1 lcd_DelayMs(30);
198 1 LCD_SendComm(SOrigin);
199 1 delay(150);
200 1 }
201
202 //显示字符串
203 void lcd_DispString(uchar X, Y, uchar *msg )
204 {
205 1
206 1 Set_Cursor(X, Y);
207 1 while (*msg != '\0')
208 1 {
209 2 LCD_SendData(*msg++);
210 2 }
211 1 }
212
213 //坐标写入
214 void wrPosition(void)
215 {
216 1 LCD_SendComm(SFunSetE);
217 1 LCD_SendComm(lcdPosY);
218 1 LCD_SendComm(lcdPosX);
219 1 LCD_SendComm(SFunSetB);
220 1 }
221
222 //函数功能:全屏显示图形
223 //bmpCls=清除图形屏幕选项(OFF为不清屏,即显示图形,ON为清屏)
224 void lcd_DispPhoto (uchar *bmp, uchar bmpCls)
225 {
226 1 lcdPosX = 0x80;
227 1 halfScr = 2;
228 1
229 1 for (;halfScr != 0; halfScr--)
230 1 {
231 2 lcdPosY = 0x80;
232 2 halfLineCnt = 32;
233 2
234 2 for (;halfLineCnt != 0; halfLineCnt--)
235 2 {
236 3 basicBlock = 16;
237 3 wrPosition ();
238 3
239 3 for (; basicBlock != 0; basicBlock--)
240 3 {
241 4 if (bmpCls == OFF)
C51 COMPILER V7.06 WATER 10/28/2007 09:52:35 PAGE 5
242 4 {
243 5 LCD_SendData (*bmp++);
244 5 }
245 4 else if (bmpCls == ON)
246 4 {
247 5 LCD_SendData (0x00);
248 5 }
249 4 }
250 3 lcdPosY++;
251 3 }
252 2 lcdPosX = 0x88;
253 2 }
254 1 LCD_SendComm(SFunDrawOn);
255 1 LCD_SendComm(SFunSetB);
256 1 }
257
258 //---------------------------------------------------------
259 //函数原形:void lcd_ConvertChar (uchar CX, CY, width)
260 //函数功能:字符反白显示
261 //输入参数:
262 //返回值 :
263 //---------------------------------------------------------
264
265 void lcd_ConvertChar (uchar CX, CY, width)
266 {
267 1 lcd_DispPhoto(OFF,ON);
268 1 lcdPosY = 0x80;
269 1
270 1 if (CX == 0)
271 1 {
272 2 CX = 0x80;
273 2 halfLineCnt = 16;
274 2 }
275 1 else if (CX == 1)
276 1 {
277 2 CX = 0x80;
278 2 halfLineCnt = 32;
279 2 }
280 1 else if (CX == 2)
281 1 {
282 2 CX = 0x88;
283 2 halfLineCnt = 16;
284 2 }
285 1 else if (CX == 3)
286 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -