📄 bdz.lst
字号:
C51 COMPILER V7.20 BDZ 08/25/2006 20:43:45 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE BDZ
OBJECT MODULE PLACED IN bdz.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE bdz.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "reg52.h"
2 #include "math.h"
3 #include "intrins.h"
4 #define byte unsigned char
5 #define uint unsigned int
6 #define WRITE 0xA0 //写地址
7 #define READ 0xA1 //读地址
8 #define OV_TIM 250
9 #define HI 0xf8
10 #define LO 0x2f //12m 1ms 6m 2ms //扫描速度降低一倍
11 #define TRUE 1
12 #define FALSE 0
13 sbit DAS=P2^0;
14 sbit CLS=P2^1;
15 #define tem_xiax_addr 10 //iic中的地址
16 #define tem_shax_addr 20
17 #define time_addr 30
18
19 sbit time_led=P2^2;
20 sbit mod_led=P2^3;
21 sbit daiji_led=P2^4;
22 sbit com0=P2^5;
23 sbit com1=P2^6;
24 sbit com2=P2^7;
25 sbit JDQ=P0^7;
26 sbit SET=P3^4;
27 sbit ADD=P3^5;
28 sbit SUB=P3^6;
29 sbit MOD=P3^7;
30
31 sbit FMQ=P1^7;
32
33 sbit CLK=P0^0; //ad
34 sbit DA=P0^1;
35 sbit CS=P0^2;
36
37 #define duan P1
38 #define tem_lc_xiax 50
39 #define tem_lc_shax 230
40 byte caij,count,caij;
41 uint k=60000,j=10000,xiax_linshi;
42 uint tem_shax,tem_xiax;
43 byte iic[2],t2=0,t1=0,t0=0,cai_flag=0,tem_now,n,cai_N;
44 bit flag=0;
45 code byte smg[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E};
46
47 /*================================24C02部分===============================================================
-*/
48 /*----------------------------------------------------------------------
49 IIC启动信号
50 ----------------------------------------------------------------------*/
51 void I_start(void)
52 {
53 1 DAS=1;
54 1 CLS=1;
C51 COMPILER V7.20 BDZ 08/25/2006 20:43:45 PAGE 2
55 1 DAS=0;
56 1 CLS=0;
57 1 }
58 /*---------------------------------------------------------------------------
59 IIC停止信号
60 ----------------------------------------------------------------------------*/
61 void I_stop(void)
62 {
63 1 CLS=0;
64 1 DAS=0;
65 1 CLS=1;
66 1 DAS=1;
67 1 CLS=0;
68 1 }
69 void I_init(void)
70 {
71 1 CLS=0;
72 1 I_stop();
73 1 }
74 /*-------------------------------------------------------------------------
75 IIC时钟信号
76 函数返回一个IIC数据线上的值
77 --------------------------------------------------------------------------*/
78 bit I_clock(void) //发送的数据咱存在sample中
79 {
80 1 bit sample;
81 1 CLS=1;
82 1 sample=DAS;
83 1 CLS=0;
84 1 return(sample);
85 1 }
86 /*---------------------------------------------------------------------------
87 向IIC器件发送一个字节数据 参数:I_data
88 返回应答位信号,为1表示发送成功,为0表示发送失败
89 -----------------------------------------------------------------------------*/
90 bit I_send(byte I_data)
91 {
92 1 register byte i;
93 1 for(i=0;i<8;i++)
94 1 {
95 2 if(I_data&0x80)
96 2 DAS=1;
97 2 else DAS=0;
98 2 I_data=I_data<<1;
99 2 I_clock();
100 2 }
101 1 DAS=1;
102 1 return(~I_clock()); //返回应答信号,为1表示发送成功,为0表示发送失败
103 1 }
104 /*-----------------------------------------------------------------------------
105 接受一个IIC器件发送过来的字节数据,参数无
106 返回 字节数据
107 --------------------------------------------------------------------------------*/
108 byte I_receive(void)
109 {
110 1 byte I_data=0;
111 1 register byte i;
112 1 for(i=0;i< 8;i++)
113 1 {
114 2 I_data=I_data*2;
115 2 _nop_();
116 2 if(I_clock())
C51 COMPILER V7.20 BDZ 08/25/2006 20:43:45 PAGE 3
117 2 I_data=I_data+1;
118 2 _nop_();
119 2 _nop_();
120 2 _nop_();
121 2 }
122 1 return(I_data);
123 1 }
124 /*-----------------------------------------------------------------------------
125 接受IIC器件数据后的应答信号 参数无,返回无
126 --------------------------------------------------------------------------------*/
127 void I_Ack(void)
128 {
129 1 DAS=0;
130 1 I_clock();
131 1 DAS=1;
132 1 }
133 /*----------------------------------------------------------------------------
134 调用函数: I_start 无参数,无返回值 I_send :函数原形
135 bit function I_send(byte I_data) 返回0,1
136 参数:Address 要写入的IIC器件单元地址 返回:1,0
137 功能:写入器件地址和器件单元地址,等待想IIC器件发送数据
138 ----------------------------------------------------------------------------*/
139 bit E_address(byte Address)
140 {
141 1 I_start();
142 1 if(I_send(WRITE)) //发送写地址
143 1 return (I_send(Address)); //写入器件控制单元地址
144 1 else
145 1 return(FALSE);
146 1 }
147
148 /*---------------------------------------------------------------------------
149 从IIC器件读数据块 存入EAROMImage[]中
150 参数:t 为数据块的首地址
151 返回: 位数据 为1表示成功,0表示失败
152 --------------------------------------------------------------------------*/
153 bit E_read_block(byte t,byte block_size,byte *EAROMImage) //t起始地址
154 {
155 1 register byte i;
156 1 byte j;
157 1 j=0;
158 1 i=t+block_size;
159 1
160 1 if(E_address(t)) //发送器件地址
161 1 {
162 2 I_start();
163 2 if(I_send(READ)) //
164 2 {
165 3 for(;t<=i; t++)
166 3 {
167 4 EAROMImage[j++]= (I_receive());
168 4 if(t!=i)
169 4 I_Ack();
170 4 else
171 4 { I_clock();
172 5 I_stop();
173 5 }
174 4 }
175 3 return(TRUE);
176 3 }
177 2 else
178 2 {
C51 COMPILER V7.20 BDZ 08/25/2006 20:43:45 PAGE 4
179 3 I_stop();
180 3 return(FALSE);
181 3 }
182 2 }
183 1 else
184 1 {
185 2 I_stop();
186 2 return(FALSE);
187 2 }
188 1 }
189
190 /*---------------------------------------------------------------------
191 延时程序
192 ----------------------------------------------------------------------*/
193 void wait_5ms(void)
194 {
195 1 register uint i;
196 1 for(i=0;i<1000;i++)
197 1 _nop_();
198 1 }
199 /*----------------------------------------------------------------------------
200 功能将EAROMImage[]数组写入IIC器件
201 参数: i 器件首地址
202 返回: 0,1
203 -----------------------------------------------------------------------------*/
204 bit E_write_block(byte i,byte block_size,byte *EAROMImage) //i起始地址
205 { register byte t;
206 1 byte j;
207 1 j=0;
208 1 t=i+block_size;
209 1
210 1 for(;i<=t; i++)
211 1 {
212 2 if(E_address(i)&&I_send(EAROMImage[j++]))
213 2 {
214 3 I_stop();
215 3 wait_5ms();
216 3 }
217 2 else
218 2 return(FALSE);
219 2 }
220 1 return(TRUE);
221 1 }
222
223
224 /*---------------------------------------------------------------------------
225 延时
226 参数: t 返回:无
227 -------------------------------------------------------------------------*/
228 void delay(uint t)
229 {
230 1 uint i,j;
231 1 for(i=0; i<t;i++)
232 1 for(j=0;j<10;j++);
233 1 }
234
235 /*---------------------------------------------------------------------------
236 功能: 将参数save里的值写入 以t为首地址的IIC器件
237 参数: t 首地址 save 要保存的变量
238 返回: 无
239 ---------------------------------------------------------------------------*/
240 write(unsigned char t,unsigned int save,byte *Imagew)
C51 COMPILER V7.20 BDZ 08/25/2006 20:43:45 PAGE 5
241 {
242 1 // XBF=0;
243 1 Imagew[0] = save/256; //高位
244 1
245 1 Imagew[1] = save-(save/256)*256; //低位
246 1 if( E_write_block(t,1,Imagew))
247 1 _nop_();
248 1 // XBF=1; //写保护
249 1 }
250
251 /*---------------------------------------------------------------------------
252 功能: 将24C02中的存放的数据转化成十进制,存入save中,
253 参数: g 表示IIC器件中的首地址
254 返回: uint 数据
255 -----------------------------------------------------------------------------*/
256 unsigned int read(unsigned char g,byte *Imager)
257 {
258 1 unsigned int save=0;
259 1 // XBF=0;
260 1 if(E_read_block(g,1,Imager))
261 1 {
262 2 uint i = Imager[0],t=Imager[1];
263 2 save = ((i * 256) +t);
264 2 // XBF=1; //写保护
265 2 }
266 1 return(save);
267 1 }
268 /*========================================================================================================
-*/
269 void js(int sav) //计算
270 {
271 1 t2=sav/100;
272 1 t1=(sav%100)/10;
273 1 t0=sav%10;
274 1 }
275 /*---------------------------------------------
276 功能: 修改数据 10进制
277 参数: min 下限 max 上限 save 初始值
278 返回: save 最终值
279 注意: 按键没有q0,q1,q2区别,while 循环中wg=0;
280 -----------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -