📄 ad7109.lst
字号:
C51 COMPILER V7.07 AD7109 02/27/2007 10:02:55 PAGE 1
C51 COMPILER V7.07, COMPILATION OF MODULE AD7109
OBJECT MODULE PLACED IN ad7109.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ad7109.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /********************************************************************
2 VIIC_C51.C
3 此程序是I2C操作平台(主方式的软件平台)的底层的C子程序,如发送数据
4 及接收数据,应答位发送,并提供了几个直接面对器件的操作函数,它很方便的
5 与用户程序连接并扩展.....
6
7 注意:函数是采用软件延时的方法产生SCL脉冲,固对高晶振频率要作
8 一定的修改....(本例是1us机器周期,即晶振频率要小于12MHZ)
9
10 ********************************************************************/
11
12 // adress-8bits
13
14 //#include <reg764.h>
15 #include <SST89x5x4.H> /*头文件的包含*/
16
17 #include <intrins.h>
18 #include <math.h>
19
20 //#include <SST89x5x4.H>
21
22 #define uchar unsigned char
23 #define uint unsigned int
24 #define lcd_clr 0x01
25 #define you_on 0x0f
26
27 #define BIT0 0X01
28 #define BIT1 0X02
29 #define BIT2 0X04
30 #define BIT3 0X08
31 #define BIT4 0X10
32 #define BIT5 0X20
33 #define BIT6 0X40
34 #define BIT7 0X80
35 #define _Nop() _nop_() /*定义空指令*/
36
37
38 /*
39 keyboard data
40 0 12
41 1 8
42 2 4
43 3 0
44 4 1
45 5 2
46 6 3
47 7 5
48 8 6
49 9 7
50 10-ok 9
51 11 10
52 12-wrong11
53 13 13
54 14 14
55 15 15
C51 COMPILER V7.07 AD7109 02/27/2007 10:02:55 PAGE 2
56 */
57
58 //全局变量定义
59 //lcd_bits
60 sbit rs = P1^7;
61 sbit rw = P1^6;
62 sbit e = P2^1;
63 sbit lcd_deng = P2^3;
64 //ad_bits
65 sbit sta = P3^2;
66 sbit le = P3^6;
67 sbit he = P3^7;
68 sbit ce = P2^4;
69
70 //函数申明
71 void lcd_ini(void);
72 void lcd_wrc(uchar com);
73 void lcd_wrd(uchar dat);
74 void lcd_checkbusy();
75 void delay(unsigned int n);
76 void lcd_on();
77 void lcd_off();
78 uchar lcd_read_ac();
79 void lcd_dis_num(uint dat);
80 void lcd_dis_ch(uchar h,uchar l);
81 void lcd_add(uchar h,uchar l);
82 void lcd_dis_int(long dat,uint int_bits); //显示一个有符号的整数,显示为dat的低int_bits位
83
84 uchar key_data(void);
85
86
87 //i2c相关函数
88 void Start_I2c(); //起动总线函数
89 void Stop_I2c(); //结束总线函数
90 void SendByte(uchar c); //字节数据传送函数send
91 uchar RcvByte(); //字节数据传送函数 receive
92 void Ack_I2c(bit a); //主控器进行应答信号
93 bit ISendStr_8(uchar add,uchar son_add,uchar dat); //向子地址为8位的器件发送多字节数据函数
94 bit ISendStr_16(uchar add,uint son_add,uchar dat); //向子地址为16位的器件发送多字节数据函数
95 uchar IRcvStr_8(uchar add,uchar son_add); //向子地址为8位的器件读取多字节数据函数
96 uchar IRcvStr_16(uchar add,uint son_add); //向子地址为16位的器件读取多字节数据函数
97
98
99 void lcd_dis_time(void); //时钟显示函数
100 void set_time(uchar sec, uchar min, uchar hr, uchar dy, uchar dt,uchar mn,uchar yr); //时钟设置sec, min,
-hr, dy, dt, mn, yr
101 void ad_ce_and_xian(void);
102
103
104
105 /* 常,变量定义区 */
106
107 /*端口位定义*/
108 sbit SDA = P3^3; /*模拟I2C数据传送位*/
109 sbit SCL = P1^4; /*模拟I2C时钟控制位*/
110 sbit WP = P1^3;
111 /*状态标志*/
112
113 bit ack; /*应答标志位*/
114 uchar s;
115
116 void main()
C51 COMPILER V7.07 AD7109 02/27/2007 10:02:55 PAGE 3
117 {
118 1 // uchar i = 0;
119 1 // uchar v;
120 1 // uchar mydata = 0;
121 1 // uchar keydata = 0;
122 1 // uint pot_i;
123 1 // pot_i = &i;
124 1 // uchar max=58;
125 1 // uchar *s;
126 1 // s = &max;
127 1
128 1 lcd_off();
129 1 lcd_on();
130 1 lcd_ini();
131 1 // lcd_add(2,1);
132 1 // lcd_dis_ch(0xb4,0xa1);
133 1
134 1
135 1 // I2C
136 1 // WP = 0;
137 1
138 1 // write to rom
139 1 /*
140 1 lcd_add(2,1);
141 1
142 1 i = ISendStr_16(0xa0,0x0000,19);
143 1 lcd_wrd(0x30+i);
144 1 */
145 1 /*
146 1 lcd_add(3,1);
147 1 for(v=0x0000;v<8;v++)
148 1 {
149 1 i = 0;
150 1 while(i == 0)
151 1 {
152 1 i = ISendStr_16(0xa0,v,250+2*v+1);
153 1 }
154 1 lcd_wrd(0x30+(uchar)i);
155 1 }
156 1 */
157 1
158 1 // read rom set address
159 1 /*
160 1 for(v=0x0000;v<8;v++)
161 1 {
162 1 i = IRcvStr_16(0xa0,v);
163 1 lcd_wrc(0x88+2*v);
164 1 lcd_dis_num(i);
165 1 }
166 1
167 1 /*
168 1 */
169 1
170 1
171 1 // while(1);
172 1
173 1 // set_time(30,6,2,2,30,1,7); //时钟设置sec, min, hr, dy, dt, mn, yr
174 1
175 1
176 1 // lcd_add(2,1);
177 1 // lcd_wrd(0x03);
178 1 // lcd_dis_num(54);
C51 COMPILER V7.07 AD7109 02/27/2007 10:02:55 PAGE 4
179 1
180 1
181 1
182 1 while(1)
183 1 {
184 2 lcd_dis_time(); //时钟显示函数
185 2 // lcd_add(3,1);
186 2 // lcd_dis_int(987,2); //显示一个有符号的整数,显示为dat的低int_bits位
187 2
188 2 // ad_ce_and_xian();
189 2 /*
190 2 keydata = key_data();
191 2 lcd_add(4,6);
192 2 switch(keydata)
193 2 {
194 2 case 0:
195 2 {
196 2 v = 3;
197 2 lcd_dis_num(v);
198 2 break;
199 2 }
200 2 case 1:
201 2 {
202 2 v = 4;
203 2 lcd_dis_num(v);
204 2 break;
205 2 }
206 2 case 2:
207 2 {
208 2 v = 5;
209 2 lcd_dis_num(v);
210 2 break;
211 2 }
212 2 case 3:
213 2 {
214 2 v = 6;
215 2 lcd_dis_num(v);
216 2 break;
217 2 }
218 2 case 4:
219 2 {
220 2 v = 2;
221 2 lcd_dis_num(v);
222 2 break;
223 2 }
224 2 case 5:
225 2 {
226 2 v = 7;
227 2 lcd_dis_num(v);
228 2 break;
229 2 }
230 2 case 6:
231 2 {
232 2 v = 8;
233 2 lcd_dis_num(v);
234 2 break;
235 2 }
236 2 case 7:
237 2 {
238 2 v = 9;
239 2 lcd_dis_num(v);
240 2 break;
C51 COMPILER V7.07 AD7109 02/27/2007 10:02:55 PAGE 5
241 2 }
242 2 case 8:
243 2 {
244 2 v = 1;
245 2 lcd_dis_num(v);
246 2 break;
247 2 }
248 2 case 9:
249 2 {
250 2 v = 10;
251 2 lcd_dis_num(v);
252 2 break;
253 2 }
254 2 case 10:
255 2 {
256 2 v = 11;
257 2 lcd_dis_num(v);
258 2 break;
259 2 }
260 2 case 11:
261 2 {
262 2 v = 12;
263 2 lcd_dis_num(v);
264 2 break;
265 2 }
266 2 case 12:
267 2 {
268 2 v = 0;
269 2 lcd_dis_num(v);
270 2 break;
271 2 }
272 2 case 13:
273 2 {
274 2 v = 13;
275 2 lcd_dis_num(v);
276 2 break;
277 2 }
278 2 case 14:
279 2 {
280 2 v = 14;
281 2 lcd_dis_num(v);
282 2 break;
283 2 }
284 2 case 15:
285 2 {
286 2 v = 15;
287 2 lcd_dis_num(v);
288 2 break;
289 2 }
290 2 default:
291 2 // case 16:
292 2 {
293 2 v = 16;
294 2 lcd_dis_num(v);
295 2 break;
296 2 }
297 2 }
298 2 */
299 2
300 2 }
301 1 }
302
C51 COMPILER V7.07 AD7109 02/27/2007 10:02:55 PAGE 6
303
304 void lcd_ini()
305 {
306 1 delay(100);
307 1 lcd_wrc(0x34);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -