📄 温度测量.lst
字号:
C51 COMPILER V7.09 温度瞋量 06/23/2005 21:02:16 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE 温度瞋量
OBJECT MODULE PLACED IN 温度测量.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE 温度测量.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <REG2051.H>
2 #include <intrins.h>
3
4 #define uchar unsigned char
5 #define uint signed int
6 #define uuchar signed char
7
8 #define k1 P3_1 //k1功能键
9 #define k2 P3_2 //k2加键
10 #define k3 P3_3 //k3复位键
11 #define bj P3_0 //定值输出
12 #define adk P3_7
13
14
15
16 uchar sec20,sec,xm0,xm1,xm2,ki,buffer[3],BitCounter,temp,Dat,dz,i,digit,Number[5]={1,2,3,4,5};
17 uchar convert[10]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0~9段码
18 uint Count,zzz,zzbl,t,v,jsz;
19 static uchar bdata ke,kee; //可位寻址的状态寄存器
20
21 sbit stada= P1^7; //Ls164串行数据
22 sbit sclk = P1^2; //Ls164串行时钟
23 sbit Sda= P3^5; //2401串行数据
24 sbit Scl= P3^4; //2401串行时钟
25 sbit LED1 = P1^3; //数码管位驱动
26 sbit LED2 = P1^4; //数码管位驱动
27 sbit LED3 = P1^5; //数码管位驱动
28 sbit p36 = P3^6;
29 sbit k11=ke^0;
30 sbit k12=ke^1;
31 sbit k22=ke^2;
32 sbit k21=ke^3;
33 sbit k33=ke^4;
34 sbit k31=ke^5;
35 sbit jsz11=ke^6;
36 sbit jsz12=ke^7;
37 sbit jsf11=kee^0;
38 sbit jsf12=kee^1;
39 sbit b=kee^2;
40 sbit c=kee^3;
41 sbit d=kee^4;
42 sbit e=kee^5;
43 sbit cl=kee^6;
44
45 void delay(i); //延时函数
46 void scanLED(); //显示函数
47 void timeToBuffer(); //显示转换函数
48 void Sen(); //74Ls164串并转换
49
50 void time();
51 void jpcl();
52 void fw();
53 void jy();
54 void adzhh();
55
C51 COMPILER V7.09 温度瞋量 06/23/2005 21:02:16 PAGE 2
56 /*起始条件*/
57 void Start(void)
58 {
59 1 Sda=1;
60 1 Scl=1;
61 1 _nop_();_nop_();_nop_();_nop_();_nop_();
62 1 Sda=0;
63 1 _nop_();_nop_();_nop_();_nop_();_nop_();
64 1 }
65
66 /*停止条件*/
67 void Stop(void)
68 {
69 1 Sda=0;
70 1 Scl=1;
71 1 _nop_();_nop_();_nop_();_nop_();_nop_();
72 1 Sda=1;
73 1 _nop_();_nop_();_nop_();_nop_();_nop_();
74 1 }
75
76 /*应答位*/
77 void Ack(void)
78 {
79 1 Sda=0;
80 1 _nop_();_nop_();_nop_();_nop_();_nop_();
81 1 Scl=1;
82 1 _nop_();_nop_();_nop_();_nop_();_nop_();
83 1 Scl=0;
84 1 }
85
86 /*反向应答位*/
87 void NoAck(void)
88 {
89 1 Sda=1;
90 1 _nop_();_nop_();_nop_();_nop_();_nop_();
91 1 Scl=1;
92 1 _nop_();_nop_();_nop_();_nop_();_nop_();
93 1 Scl=0;
94 1 }
95
96 /*发送数据子程序,Data为要求发送的数据*/
97 void Send(uchar Data)
98 {
99 1 uchar BitCounter=8; //位数控制
100 1 uchar temp; //中间变量控制
101 1 do
102 1 {
103 2 temp=Data;
104 2 Scl=0;
105 2 _nop_();_nop_();_nop_();_nop_();_nop_();
106 2 if((temp&0x80)==0x80) //如果最高位是1
107 2 Sda=1;
108 2 else
109 2 Sda=0;
110 2 _nop_();_nop_();_nop_();_nop_();_nop_();
111 2 Scl=1;
112 2 temp=Data<<1; //RLC
113 2 Data=temp;
114 2 BitCounter--;
115 2 }
116 1 while(BitCounter);
117 1 Scl=0;
C51 COMPILER V7.09 温度瞋量 06/23/2005 21:02:16 PAGE 3
118 1 _nop_();_nop_();_nop_();_nop_();_nop_();
119 1 }
120
121 /*读一个字节的数据,并返回该字节值*/
122 uchar Read(void)
123 {
124 1 uchar temp=0;
125 1 uchar temp1=0;
126 1 uchar BitCounter=8;
127 1 Sda=1;
128 1 do
129 1 {
130 2 Scl=0;
131 2 _nop_();_nop_();_nop_();_nop_();_nop_();
132 2 Scl=1;
133 2 _nop_();_nop_();_nop_();_nop_();_nop_();
134 2 if(Sda) //如果Sda=1
135 2 temp=temp|0x01; //temp的最低位置1
136 2 else
137 2 temp=temp&0xfe; //否则temp的最低位清0
138 2 if(BitCounter-1)
139 2 {
140 3 temp1=temp<<1;
141 3 temp=temp1;
142 3 }
143 2 BitCounter--;
144 2 }
145 1 while(BitCounter);
146 1 return(temp);
147 1 }
148
149 void WrToROM(uchar Data[],uchar Address,uchar Num)
150 {
151 1 uchar i;
152 1 uchar *PData;
153 1 PData=Data;
154 1 for(i=0;i<Num;i++)
155 1 {
156 2 Start(); //发送启动信号
157 2 Send(0xa0); //发送SLA+W
158 2 Ack();
159 2 Send(Address+i); //发送地址
160 2 Ack();
161 2 Send(*(PData+i));
162 2 Ack();
163 2 Stop();
164 2 delay(2000);
165 2 }
166 1 }
167
168 void RdFromROM(uchar Data[],uchar Address,uchar Num)
169 {
170 1 uchar i;
171 1 uchar *PData;
172 1 PData=Data;
173 1 for(i=0;i<Num;i++)
174 1 {
175 2 Start();
176 2 Send(0xa0);
177 2 Ack();
178 2 Send(Address+i);
179 2 Ack();
C51 COMPILER V7.09 温度瞋量 06/23/2005 21:02:16 PAGE 4
180 2 Start();
181 2 Send(0xa1);
182 2 Ack();
183 2 *(PData+i)=Read();
184 2 Scl=0;
185 2 NoAck();
186 2 Stop();
187 2 }
188 1 }
189
190 void main()
191 {
192 1 EA=1; //开中断
193 1 TMOD=0x11; //设定时器0为计数,设定时器1定时
194 1 ET0=1; //定时器0中断允许
195 1 ET1=1; //定时器1中断允许
196 1 TH0=0xD8;
197 1 TL0=0xF0; //设定时值为20000us(20ms)
198 1 TH1=0x00;
199 1 TL1=0x00;
200 1 TR0=1;
201 1 buffer[0]=0x06;
202 1 buffer[1]=0x3F;
203 1 buffer[2]=0x4F;
204 1 d=0;
205 1 while(!d)
206 1 {
207 2 if (sec>2)
208 2 d=1;
209 2 scanLED();
210 2 }
211 1 RdFromROM(Number,0,5);
212 1 zzz=Number[0]*256+Number[1];
213 1 dz=Number[2];
214 1 jsz=Number[3]*256+Number[4];
215 1 LED1 = 1;
216 1 LED2 = 1;
217 1 LED3 = 1;
218 1 k12=1;
219 1 k22=1;
220 1 k31=1;
221 1 bj=1;
222 1 d=1;
223 1 jy();
224 1 while(1)
225 1 {
226 2 adzhh();
227 2 timeToBuffer(); //调用转换段码功能模块
228 2 scanLED(); //调用显示函数
229 2 jpcl();
230 2
231 2 }
232 1 }
233
234 void delay(i) //延时子程序
235 {
236 1 while(--i);
237 1 }
238
239 void scanLED() //显示功能模块
240 {
241 1 Dat=buffer[2];
C51 COMPILER V7.09 温度瞋量 06/23/2005 21:02:16 PAGE 5
242 1 Sen();
243 1 LED1=0;
244 1 delay(50);
245 1 LED1=1;
246 1 Dat=buffer[1];
247 1 Sen();
248 1 LED2=0;
249 1 delay(50);
250 1 LED2=1;
251 1 Dat=buffer[0];
252 1 Sen();
253 1 LED3=0;
254 1 delay(50);
255 1 LED3=1;
256 1 }
257
258
259
260 void timeToBuffer() //转换段码功能模块
261 {
262 1 xm0=jsz/100;
263 1 xm1=(jsz-xm0*100)/10;
264 1 xm2=jsz-xm0*100-xm1*10;
265 1 buffer[0]=convert[xm2];
266 1 buffer[1]=convert[xm1];
267 1 buffer[2]=convert[xm0];
268 1 if (buffer[2]==0x3F)
269 1 {
270 2 buffer[2]=0x00;
271 2 if (buffer[1]==0x3F)
272 2 buffer[1]=0x00;
273 2 }
274 1 }
275
276 void Sen() //74Ls164串并转换
277 {
278 1 for( i=0; i<8;i++) //循环8次,转换一位
279 1 {
280 2 sclk=0;
281 2 if((Dat&0x80)==0x80) //依次转换各位数
282 2 stada=1;
283 2 else stada=0;
284 2 sclk=1;
285 2 delay(3);
286 2 sclk=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -