📄 温测b.lst
字号:
C51 COMPILER V8.05a 温测B 07/04/2008 19:10:02 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE 温测B
OBJECT MODULE PLACED IN 温测b.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 温测b.c DEBUG OBJECTEXTEND
line level source
1 #include "reg51.h"
2 #include "intrins.h"
3 #define uchar unsigned char
4 #define uint unsigned int
5 unsigned char discode[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff,0xbf,0xc6,0x89,0x9e};
6 unsigned char discode1[]={0x40,0x79,0x24,0x30,0x19,012,0x02,0x78,0x00,0x10};
7 unsigned char displaybuf[]={0,0,0,0,0};
8 unsigned char readdata[2]={0};
9 unsigned char k,timecount,n=0,count=0,second=0,minite=0,hour=1;
10 uint addr=0x00,addup,result,judgecount=0;
11 bit a=0;tmr1=0,d=0,dealen=0,sflag,b,judge=0,judgechange=0;
12 unsigned char i=0;
13 sbit DQ=P0^0;
14 sbit sda=P3^7;
15 sbit scl=P3^6;
16 sbit P05=P0^5;
17 //MCU初始化部分*************
18 void MCU_init();
19 //DS820************************
20 void DS1820_delay(unsigned int x);
21 void writecommandtods18b20( uchar command );
22 uchar readdatafromds18b20();
23 void resetpulse();
24 //IIC部分***************
25 void IIC_delay(uchar x);
26 void flash();
27 void x24c02_init();
28 void start();
29 void stop();
30 void writex(uchar j);
31 uchar readx();
32 void clock();
33 uchar x24c02_read(uchar address);
34 void x24c02_write(uchar address,uchar info);
35 void delay10ms(void);
36 //键盘处理函数
37 void keytr0_deal(uchar x)
38 {
39 1 while((P3&0x3f)!=0x3f);
40 1 switch(x)
41 1 {
42 2 case 0x3e: judgechange=1;b=1;displaybuf[0]=12;break;
43 2 case 0x3d: judgechange=0;displaybuf[0]=13;break;
44 2 case 0x3b: {
45 3 if(judgechange)
46 3 {
47 4 x24c02_write(2*addr,readdata[0]);
48 4 x24c02_write(2*addr+1,readdata[1]);
49 4 addr++;addup=addr;
50 4 }
51 3 break;
52 3 }
53 2 case 0x37:{ judgechange=0;
54 3 if(addr==0) break;
55 3 if(addup==addr)
C51 COMPILER V8.05a 温测B 07/04/2008 19:10:02 PAGE 2
56 3 {if(addr>10) displaybuf[0]=10;
57 4 else displaybuf[0]=addr;
58 4 k=displaybuf[0];}
59 3 if((addr-addup)<k)
60 3 {
61 4 addup--;
62 4 readdata[1]=x24c02_read(2*addup+1);
63 4 readdata[0]=x24c02_read(2*addup);
64 4
65 4 dealen=1;
66 4 displaybuf[0]--;
67 4 }
68 3 break;
69 3 }
70 2 case 0x2f:{
71 3 judgechange=0;
72 3 if(addr==0) break;
73 3 if(addup==(addr-1)) {break;}
74 3 if(addup<addr-1)
75 3 {
76 4 addup++;
77 4 displaybuf[0]++;
78 4 readdata[0]=x24c02_read(2*addup);
79 4 readdata[1]=x24c02_read(2*addup+1);
80 4 dealen=1;
81 4 }
82 3 break;
83 3 }
84 2 case 0x1f: tmr1=1;judgechange=1;b=1;judgecount=0;addr=0;displaybuf[0]=14;break;
85 2 default: break;
86 2 }
87 1 }
88 void change_deal(void)
89 {
90 1 if(judgechange&&(!b))
91 1 {
92 2 timecount++;
93 2 if(timecount==50)
94 2 {
95 3 b=1;
96 3 timecount=0;
97 3 resetpulse();
98 3 writecommandtods18b20(0xcc);
99 3 writecommandtods18b20(0xbe);
100 3 readdata[0]=readdatafromds18b20();
101 3 readdata[1]=readdatafromds18b20();
102 3 dealen=1;
103 3 }
104 2 }
105 1 if(dealen==1)
106 1 {
107 2 sflag=1;
108 2 if((readdata[1] & 0xf8)!=0x00)
109 2 {
110 3 sflag=0;
111 3 readdata[1]=~readdata[1];
112 3 readdata[0]=~readdata[0];
113 3 result=readdata[0]+1;
114 3 readdata[0]=result;
115 3 if(result>255)
116 3 {
117 4 readdata[1]+=1;
C51 COMPILER V8.05a 温测B 07/04/2008 19:10:02 PAGE 3
118 4 }
119 3 }
120 2 if(sflag) displaybuf[1]=10;
121 2 else displaybuf[1]=11;
122 2 result=((readdata[1]*256+readdata[0])*0.0625)*10;
123 2 dealen=0;
124 2 }
125 1 displaybuf[2]=result/100;
126 1 displaybuf[3]=result/10%10;
127 1 displaybuf[4]=result%10;
128 1 }
129 void keytr1_deal(uchar x)
130 {
131 1 while((P3&0x3f)!=0x3f);
132 1 switch(x)
133 1 {
134 2 case 0x3d: judgechange=0;displaybuf[0]=13;tmr1=0;break;
135 2 default: break;
136 2 }
137 1 }
138 void display(void)
139 {
140 1 P1=(0x08<<n);
141 1 P2=discode[displaybuf[n]];
142 1 n++;
143 1 if(n==6) n=0;
144 1 }
145
146 void main(void)
147 {
148 1 MCU_init();
149 1 x24c02_init();
150 1 while(1)
151 1 {
152 2 if(tmr1) {TR0=0;TR1=1;}
153 2 else {TR0=1;TR1=0;}
154 2 if(judgechange&&b)
155 2 {
156 3 resetpulse();
157 3 writecommandtods18b20(0xcc);
158 3 writecommandtods18b20(0x44);
159 3 b=0;
160 3 }
161 2 }
162 1 }
163 void t0(void) interrupt 1
164 {
165 1 TH0=(65536-4000)/256;
166 1 TL0=(65536-4000)%256;
167 1 display();
168 1 if((P3&0x3f)!=0x3f) judgecount++;
169 1 if((judgecount==25))
170 1 {
171 2 judgecount=0;
172 2 keytr0_deal(P3&0x3f);
173 2 }
174 1 change_deal();
175 1 }
176 void t1(void) interrupt 3
177 {
178 1 TH1=(65536-4000)/256;
179 1 TL1=(65536-4000)%256;
C51 COMPILER V8.05a 温测B 07/04/2008 19:10:02 PAGE 4
180 1 display();
181 1 count++;
182 1 if(count==250) /*{second++;count=0;}
183 1 if(second==1) {minite++;second=0;}
184 1 if(minite==1) {hour++;minite=0;}
185 1 if(hour==1)*/
186 1 { x24c02_write(2*addr,readdata[0]);
187 2 x24c02_write(2*addr+1,readdata[1]);
188 2 addr++;addup=addr;
189 2 hour=0;
190 2 }
191 1 if((P3&0x3f)!=0x3f) judgecount++;
192 1 if((judgecount==25))
193 1 {
194 2 judgecount=0;
195 2 keytr1_deal(P3&0x3f);
196 2 }
197 1 change_deal();
198 1 }
199 //////////////////////////////////////////////////////////////////////////////////////////////////////
200 void DS1820_delay( unsigned int x )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -