📄 zlg7290.lst
字号:
C51 COMPILER V7.50 ZLG7290 09/18/2008 15:29:04 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE ZLG7290
OBJECT MODULE PLACED IN ZLG7290.OBJ
COMPILER INVOKED BY: D:\Keil C51\C51\BIN\C51.EXE ZLG7290.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 //********************************************************************
2 //文件名:ZLG7290.c
3 //创建人: ZFZ
4 //建立时间: 2008-6-6
5 //版本描 述: STIV8.0.0
6 //功能描述:键盘管理芯片ZLG7290的标准80C51驱动程序C文件
7 //备注:
8 //******************************************************************
9 #include <C8051F340.h>
10 #include "ZLG7290.h"
11
12
13 /*---------------------------------------------
14 函数名:ZLG7290_Delay
15 功 能:延时
16 参 数:uint x
17 返回值:无
18 修改记录
19 ----------------------------------------------
20 日期 作者 内容
21
22 ---------------------------------------------*/
23 void ZLG7290_Delay(unsigned int x)
24 {
25 1 //unsigned int i;
26 1
27 1 //for(i=0;i<x;i++);
28 1 while ( --x != 0 );
29 1 }
30
31 void I2C_Init(void)
32 {
33 1 SCL_SET();
34 1 ZLG7290_Delay(200);
35 1 SDA_SET();
36 1 ZLG7290_Delay(200);
37 1 }
38
39
40 /*---------------------------------------------
41 函数名:ZLG7290_Start
42 功 能:起始条件
43 参 数:无
44 返回值:无
45 修改记录
46 ----------------------------------------------
47 日期 作者 内容
48
49 ---------------------------------------------*/
50 void ZLG7290_Start(void)
51 {
52 1 SDA_SET(); //SCL为高时,SDA的下降延开始
53 1 ZLG7290_Delay(200);
54 1 //_nop_();
55 1 SCL_SET();
C51 COMPILER V7.50 ZLG7290 09/18/2008 15:29:04 PAGE 2
56 1 //while((P4 & ZLG7290_SCL)==0)
57 1 while(ZLG7290_SCL == 0)
58 1 {;}
59 1 //_nop_();
60 1 //_nop_();
61 1 //_nop_();
62 1 //_nop_();
63 1 //_nop_();
64 1 ZLG7290_Delay(200);
65 1 SDA_CLR();
66 1 //_nop_();
67 1 //_nop_();
68 1 //_nop_();
69 1 //_nop_();
70 1 //_nop_();
71 1 //_nop_();
72 1 ZLG7290_Delay(200);
73 1 SCL_CLR();
74 1 //_nop_();
75 1 //_nop_();
76 1 ZLG7290_Delay(200);
77 1 }
78
79 /*---------------------------------------------
80 函数名:ZLG7290_Stop
81 功 能:停止条件
82 参 数:无
83 返回值:无
84 修改记录
85 ----------------------------------------------
86 日期 作者 内容
87
88 ---------------------------------------------*/
89 void ZLG7290_Stop(void)
90 {
91 1 SDA_CLR(); //SCL为高时,SDA的上升延停止
92 1 ZLG7290_Delay(200);
93 1 SCL_SET();
94 1 //while((P4 & ZLG7290_SCL)==0)
95 1 while(ZLG7290_SCL == 0)
96 1 {;}
97 1 //_nop_();
98 1 //_nop_();
99 1 //_nop_();
100 1 //_nop_();
101 1 //_nop_();
102 1 ZLG7290_Delay(200);
103 1 SDA_SET();
104 1 //_nop_();
105 1 //_nop_();
106 1 //_nop_();
107 1 //_nop_();
108 1 //_nop_();
109 1 ZLG7290_Delay(200);
110 1 }
111
112 /*---------------------------------------------
113 函数名:ZLG7290_Wrbyt
114 功 能:写一个字节函数
115 参 数:unsigned char shu
116 返回值:无
117 修改记录
C51 COMPILER V7.50 ZLG7290 09/18/2008 15:29:04 PAGE 3
118 ----------------------------------------------
119 日期 作者 内容
120
121 ---------------------------------------------*/
122 void ZLG7290_Wrbyt(unsigned char shu)
123 {
124 1 unsigned char i;
125 1
126 1 for(i=0;i<8;i++)
127 1 {
128 2 if((shu & 0x80)>0)
129 2 {
130 3 SDA_SET();
131 3 }
132 2 else
133 2 {
134 3 SDA_CLR();
135 3 }
136 2 //ZLG7290_Delay(200);
137 2 //_nop_();
138 2 SCL_SET();
139 2 //_nop_();
140 2 //_nop_();
141 2 //_nop_();
142 2 //_nop_();
143 2 //_nop_();
144 2 ZLG7290_Delay(200);
145 2 SCL_CLR(); //SDA上的数据只有在SCL为低时才能改变
146 2 ZLG7290_Delay(200);
147 2 //_nop_();
148 2 shu <<= 1; //数据左移一位
149 2 }
150 1 }
151
152 /*---------------------------------------------
153 函数名:ZLG7290_Rdbyt
154 功 能:读一个字节
155 参 数:无
156 返回值:unsigned char nn
157 修改记录
158 ----------------------------------------------
159 日期 作者 内容
160
161 ---------------------------------------------*/
162 unsigned char ZLG7290_Rdbyt(void)
163 {
164 1 unsigned char nn=0xff;
165 1 unsigned char j;
166 1 SDA_SET(); //置数据线为输入方式
167 1
168 1 for(j=0;j<8;j++)
169 1 {
170 2 //SCL_CLR();
171 2 //_nop_();
172 2 //_nop_();
173 2 //_nop_();
174 2 //_nop_();
175 2 //_nop_();
176 2 //ZLG7290_Delay(200);
177 2 SCL_SET();
178 2 ZLG7290_Delay(200);
179 2 //if((P4 & ZLG7290_SDA)==0)
C51 COMPILER V7.50 ZLG7290 09/18/2008 15:29:04 PAGE 4
180 2 if(ZLG7290_SDA == 0)
181 2 {
182 3 nn<<=1;
183 3 nn=(nn&0xfe);
184 3 SCL_CLR();
185 3 ZLG7290_Delay(200);
186 3 }
187 2 else
188 2 {
189 3 nn<<=1;
190 3 nn=(nn|0x01);
191 3 SCL_CLR();
192 3 ZLG7290_Delay(200);
193 3 }
194 2 }
195 1 //SCL_CLR();
196 1 //ZLG7290_Delay(200);
197 1
198 1 return(nn);
199 1 }
200
201
202 /*---------------------------------------------
203 函数名:ZLG7290_ACK
204 功 能:产生应答信号
205 参 数:无
206 返回值:无
207 修改记录
208 ----------------------------------------------
209 日期 作者 内容
210
211 ---------------------------------------------*/
212 void ZLG7290_ACK(void)
213 {
214 1 SDA_CLR();
215 1 ZLG7290_Delay(200);
216 1 SCL_SET();
217 1 ZLG7290_Delay(200);
218 1 //_nop_();
219 1 //_nop_();
220 1 //_nop_();
221 1 //_nop_();
222 1 //_nop_();
223 1 //_nop_();
224 1 SCL_CLR();
225 1 ZLG7290_Delay(200);
226 1 SDA_SET();
227 1 }
228
229 /*---------------------------------------------
230 函数名:ZLG7290_NACK
231 功 能:产生非应答信号
232 参 数:无
233 返回值:无
234 修改记录
235 ----------------------------------------------
236 日期 作者 内容
237
238 ---------------------------------------------*/
239 void ZLG7290_NACK(void)
240 {
241 1 SDA_SET();
C51 COMPILER V7.50 ZLG7290 09/18/2008 15:29:04 PAGE 5
242 1 ZLG7290_Delay(200);
243 1 SCL_SET();
244 1 //_nop_();
245 1 //_nop_();
246 1 //_nop_();
247 1 //_nop_();
248 1 //_nop_();
249 1 //_nop_();
250 1 ZLG7290_Delay(200);
251 1 SCL_CLR();
252 1 ZLG7290_Delay(200);
253 1 SDA_CLR();
254 1 }
255
256 /*---------------------------------------------
257 函数名:Check_ACK
258 功 能:检查返回应答信号
259 参 数:无
260 返回值:F0(0或1)
261 修改记录
262 ----------------------------------------------
263 日期 作者 内容
264
265 ---------------------------------------------*/
266 bit Check_ACK(void)
267 {
268 1 bit F0;
269 1 //_nop_();
270 1 //_nop_();
271 1 //_nop_();
272 1 //ZLG7290_Delay(200);
273 1 SDA_SET();
274 1 //_nop_();
275 1 //_nop_();
276 1 //_nop_();
277 1 ZLG7290_Delay(200);
278 1 SCL_SET();
279 1 //_nop_();
280 1 //_nop_();
281 1 //_nop_();
282 1 //_nop_();
283 1 //_nop_();
284 1 //_nop_();
285 1 ZLG7290_Delay(200);
286 1 //F0 = (P4 & ZLG7290_SDA) >> 4;
287 1 F0 = ZLG7290_SDA;
288 1 SCL_CLR();
289 1 //_nop_();
290 1 //_nop_();
291 1 //_nop_();
292 1 //_nop_();
293 1 //_nop_();
294 1 //_nop_();
295 1 //_nop_();
296 1 ZLG7290_Delay(200);
297 1
298 1 return(F0);
299 1 }
300
301 /*---------------------------------------------
302 函数名:ZLG7290_ReadReg
303 功 能:读7290寄存器
C51 COMPILER V7.50 ZLG7290 09/18/2008 15:29:04 PAGE 6
304 参 数:unsigned char SubAddr
305 返回值:寄存器值
306 修改记录
307 ----------------------------------------------
308 日期 作者 内容
309
310 ---------------------------------------------*/
311 unsigned char ZLG7290_ReadReg(unsigned char SubAddr)
312 {
313 1 unsigned char regvalue = 0;
314 1 bit cflag=0;
315 1
316 1 ZLG7290_Start();
317 1 ZLG7290_Wrbyt(ZLG7290_I2C_ADDR);
318 1 cflag = Check_ACK();
319 1 ZLG7290_Wrbyt(SubAddr);
320 1 cflag = Check_ACK();
321 1 ZLG7290_Start();
322 1 ZLG7290_Wrbyt(ZLG7290_I2C_ADDR + 1);
323 1 cflag = Check_ACK();
324 1 regvalue = ZLG7290_Rdbyt();
325 1
326 1 ZLG7290_NACK();
327 1 //ZLG7290_Delay(100);
328 1 ZLG7290_Stop();
329 1 ZLG7290_Delay(2000);
330 1
331 1 return(regvalue);
332 1 }
333
334 /*---------------------------------------------
335 函数名:ZLG7290_WriteReg
336 功 能:写7290寄存器
337 参 数:unsigned char SubAddr,unsigned char value
338 返回值:无
339 修改记录
340 ----------------------------------------------
341 日期 作者 内容
342
343 ---------------------------------------------*/
344 void ZLG7290_WriteReg(unsigned char SubAddr,unsigned char value)
345 {
346 1 bit cflag=0;
347 1
348 1 ZLG7290_Start(); //开始
349 1 ZLG7290_Wrbyt(ZLG7290_I2C_ADDR);
350 1 cflag=Check_ACK();
351 1 ZLG7290_Wrbyt(SubAddr);
352 1 cflag=Check_ACK();
353 1
354 1 ZLG7290_Wrbyt(value);
355 1 cflag=Check_ACK(); //接收应答信号
356 1
357 1 //ZLG7290_Delay(200); //延时
358 1 ZLG7290_Stop(); //停止
359 1 ZLG7290_Delay(2000); //延时
360 1 }
361
362 /*---------------------------------------------
363 函数名:ZLG7290_WriteCmd
364 功 能:写7290控制寄存器
365 参 数:unsigned char SubAddr,unsigned char value
C51 COMPILER V7.50 ZLG7290 09/18/2008 15:29:04 PAGE 7
366 返回值:无
367 修改记录
368 ----------------------------------------------
369 日期 作者 内容
370
371 ---------------------------------------------*/
372 void ZLG7290_WriteCmd(unsigned char cmd0,unsigned char cmd1)
373 {
374 1 bit cflag=0;
375 1
376 1 ZLG7290_Start(); //开始
377 1 ZLG7290_Wrbyt(ZLG7290_I2C_ADDR);
378 1 cflag=Check_ACK();
379 1 ZLG7290_Wrbyt(ZLG7290_CmdBuf);
380 1 cflag=Check_ACK();
381 1
382 1 ZLG7290_Wrbyt(cmd0);
383 1 cflag=Check_ACK(); //接收应答信号
384 1 ZLG7290_Wrbyt(cmd1);
385 1 cflag=Check_ACK(); //接收应答信号
386 1
387 1 //ZLG7290_Delay(200); //延时
388 1 ZLG7290_Stop(); //停止
389 1 ZLG7290_Delay(2000); //延时
390 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 361 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -