📄 wsd1.lst
字号:
C51 COMPILER V7.20 WSD1 11/03/2004 13:56:11 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE WSD1
OBJECT MODULE PLACED IN wsd1.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE wsd1.c BROWSE DEBUG OBJECTEXTEND SRC(.\wsd1.SRC)
line level source
1 /*-----------------------------------------
2 编者:吴威 04.09.16
3 -----------------------------------------*/
4 #include <REGX52.H>
5 #define uchar unsigned char
6 #define fchar signed char
7 #define uint unsigned int
8 #define dat 30
9 #define dat1 60
10 #define dat2 30
11 /*--------------------------------*/
12 sbit K1=P0^5;
13 sbit K2=P0^6;
14 sbit K3=P0^7;
15 sbit K4=P0^4;
16
17 sbit WOUTH=P0^0;
18 sbit WOUTL=P0^1;
19 sbit SOUTH=P0^2;
20 sbit SOUTL=P0^3;
21
22 sbit SER=P1^4; //14,8位串行输入
23 sbit SRCLK=P1^6; //12琐存
24 sbit CLK=P1^5; //11时钟
25
26 sbit ds1820=P3^4;
27 sbit beep=P2^1;
28 //-----------------------------
29 uchar bdata x;
30 sbit x0 =x^7;
31 sbit db =x^6; //小数点控制位
32 sbit db1 =x^5;
33 sbit x3 =x^4;
34 //-----------------------------
35 uchar data TAB[18],xs1[8],msn=50;
36 uint SOUT,plz,wdz;
37 //-----------------------------
38 extern void d25045(uchar x);
39 /*-----------------------------------*/
40 uchar code DAT[11]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}; //位驱动数组
41
42 uchar code DAT1[18]={0xeb,0x0a,0x79,0x5b,0x9a,
43 0xd3,0xf3,0x4a,0xfb,0xdb,
44 0x40,0x10,0x01,0x3b,0x00,
45 0xf0,0xba,0x00};
46 uint code SDTAB[101]=
47 /*
48 {
49 7285,7276,7264,7252,7240,7228,7216,7204,7192,7180,
50 7168,7156,7144,7132,7120,7108,7096,7084,7072,7060,
51 7048,7036,7024,7012,7000,6988,6976,6964,6952,6940,
52 6928,6916,6904,6892,6880,6868,6856,6844,6832,6820,
53 6808,6796,6784,6772,6760,6748,6736,6724,6712,6700,
54 6688,6675,6664,6652,6640,6628,6616,6604,6592,6580,
55 6568,6556,6544,6532,6520,6508,6496,6484,6472,6460,
C51 COMPILER V7.20 WSD1 11/03/2004 13:56:11 PAGE 2
56 6448,6436,6424,6412,6400,6388,6376,6364,6352,6340,
57 6328,6316,6304,6292,6280,6268,6256,6244,6232,6220,
58 6088,6076,6064,6052,6040,6028,6016,6004,5992,5980,
59 };
60 */
61 {
62 7285,7245,7233,7221,7219,7207,7195,7183,7171,7159,
63 7153,7141,7129,7117,7095,7083,7071,7059,7047,7035,
64 7021,7009,6997,6985,6973,6961,6949,6937,6925,6913,
65 6899,6887,6875,6863,6851,6839,6827,6815,6803,6791,
66 6775,6763,6751,6739,6727,6715,6703,6691,6679,6667,
67 6648,6636,6624,6612,6600,6588,6576,6564,6552,6540,
68 6507,6495,6483,6471,6469,6447,6435,6423,6411,6409,
69 6381,6369,6357,6345,6333,6321,6309,6297,6285,6273,
70 6238,6226,6214,6202,6190,6178,6166,6154,6142,6130,
71 6068,6056,6044,6032,6020,6018,6006,5994,5982,5970,
72 };
73 /*
74 {
75 5970,5982,5994,6006,6018,6020,6032,6044,6056,6068,
76 6130,6142,6154,6166,6178,6190,6202,6214,6226,6238,
77 6273,6285,6297,6309,6321,6333,6345,6357,6369,6381,
78 6409,6411,6423,6435,6447,6469,6471,6483,6495,6507,
79 6540,6552,6564,6576,6588,6600,6612,6624,6636,6648,
80 6667,6679,6691,6703,6715,6727,6739,6751,6763,6775,
81 6791,6803,6815,6827,6839,6851,6863,6875,6887,6899,
82 6913,6925,6937,6949,6961,6973,6985,6997,7009,7021,
83 7035,7047,7059,7071,7083,7095,7117,7129,7141,7153,
84 7159,7171,7183,7195,7207,7219,7221,7233,7245,7285,
85 };
86 */
87 //-----------------------------
88 void delay1(uint ms)
89 {
90 1 uint i;
91 1 for(i=0;i<ms;i++); //Feed the dog
92 1 }
93 //*******************************************
94 void d595(uchar x)
95 {
96 1 uchar temp,j;
97 1 temp=x;
98 1 if(db==1)
99 1 {
100 2 if(db1==1){temp=temp|4;}
101 2 }
102 1 for (j=0;j<8;j++){
103 2 temp=temp>>1; SER=CY; CLK=1; CLK=0;
104 2 }
105 1 }
106 /*-------------------------------*/
107 uint cjtemp(void)
108 {uint z;
109 1
110 1 #pragma asm
111 1 GET_TEMP:
112 1 //CLR EA ;使用ds1820一定要禁止任何中断产生
113 1 ACALL INT ;调用初使化子程序
114 1 MOV A,#0CCH
115 1 ACALL WRITE ;送入跳过ROM命令
116 1 MOV A, #44H
117 1 ACALL WRITE ;送入温度转换命令
C51 COMPILER V7.20 WSD1 11/03/2004 13:56:11 PAGE 3
118 1 ACALL INT ;温度转换完全,再次初使化ds1820
119 1 MOV A,#0CCH
120 1 ACALL WRITE ;送入跳过ROM命令
121 1 MOV A,#0BEH
122 1 ACALL WRITE ;送入读温度暂存器命令
123 1 ACALL READ
124 1 mov r7,a ;读出温度值低字节存入R7
125 1 ACALL READ
126 1 ;lr ACC.7
127 1 mov r6,a ;读出谩度值高字节存入R6
128 1 SETB EA
129 1 RET
130 1 INT:
131 1 CLR EA ;初始化ds1820子程序
132 1 L0:CLR ds1820 ;ds1820总线为低复位电平87460452
133 1 MOV R2,#200
134 1 L1:CLR ds1820
135 1 DJNZ R2,L1 ;总线复位电平保持400us
136 1 SETB ds1820 ;释放ds1820总线
137 1 MOV R2,#30
138 1 L4:DJNZ R2,L4 ;释放ds1820总线保持60us
139 1 CLR C ;清存在信号(存在C=0,不存在C=1)
140 1 ORL C,ds1820
141 1 ;JC L0
142 1 MOV R6,#80
143 1 L5:ORL C,ds1820
144 1 JC L3
145 1 DJNZ R6,L5
146 1 ;AJMP L0
147 1 L3:MOV R2,#240
148 1 L2:DJNZ R2,L2
149 1 SETB EA
150 1 RET
151 1 WRITE: ;向ds1820写操作命令子程序
152 1 CLR EA
153 1 MOV R3,#8 ;写入ds1820的bit数,一个字节8个bit
154 1 WR1:SETB ds1820
155 1 MOV R4,#8
156 1 RRC A ;把一个字节data(A)分成8个bit环移给 C
157 1 CLR ds1820 ;开始写入ds1820总线要处于复位(低)状态
158 1 WR2:DJNZ R4,WR2 ;ds1820总线复位保持16us
159 1 MOV ds1820,C ;写入一个bit
160 1 MOV R4,#20
161 1 WR3:DJNZ R4,WR3 ;等待40us
162 1 DJNZ R3,WR1 ;写入下一个bit
163 1 SETB ds1820 ;重新释放ds1820总线
164 1 SETB EA
165 1 RET
166 1 READ:
167 1 CLR EA
168 1 MOV R6,#8 ;连续读8个bit
169 1 RE1:CLR ds1820 ;读前总线保持为低
170 1 MOV R4,#4
171 1 NOP
172 1 SETB ds1820 ;开始读,总线释放
173 1 RE2:DJNZ R4,RE2 ;持续8us
174 1 MOV C,ds1820 ;从ds1820总线读得一个bit
175 1 RRC A ;把读得的位值环移给 A
176 1 MOV R5,#30
177 1 RE3:DJNZ R5,RE3 ;持续60us
178 1 DJNZ R6,RE1 ;读下一个bit
179 1 SETB ds1820 ;重新释放ds1820总线
C51 COMPILER V7.20 WSD1 11/03/2004 13:56:11 PAGE 4
180 1 SETB EA
181 1 RET
182 1 #pragma endasm
183 1
184 1 return z;
185 1 }
186 //--------------------------------
187 uint wdcl(void)
188 {
189 1 wdz=cjtemp();
190 1 if((wdz>>15)==1)
191 1 {wdz=~wdz;}
192 1 wdz=((0x0ff0&wdz)>>4)*10+((0x0f&wdz)*6/10);
193 1 if(wdz>1260){wdz=0;}
194 1 return wdz;
195 1 }
196 /*-------------------------------*/
197 uchar RDSDZ(void)
198 {uchar i=0,z=0;
199 1 static uchar a,S1,S2,S3;
200 1 while(z<100)
201 1 {
202 2 if(plz<SDTAB[i]){i++;}
203 2 else{z=101;}
204 2 }
205 1 /*
206 1 if(msn==50)
207 1 {
208 1 a++;
209 1 if(a>4){a=1;}
210 1 switch(a)
211 1 {
212 1 case 1: S1=i; break; //
213 1 case 2: S2=i; break; //
214 1 case 3: S3=i; break; //
215 1 default:
216 1 SOUT=((S1+S2+S3)/3);
217 1 break; //
218 1 }
219 1 */
220 1 return i;
221 1 }
*** WARNING C280 IN LINE 199 OF WSD1.C: 'a': unreferenced local variable
*** WARNING C280 IN LINE 199 OF WSD1.C: 'S1': unreferenced local variable
*** WARNING C280 IN LINE 199 OF WSD1.C: 'S2': unreferenced local variable
*** WARNING C280 IN LINE 199 OF WSD1.C: 'S3': unreferenced local variable
222 //-----------------------------
223 void AJ(void)
224 {uchar a,b,c;
225 1 uint Collect;
226 1 if(K1=1,K1==0)
227 1 {
228 2 db1=0; //关闭小数点
229 2 while(~K1)
230 2 {
231 3 if(K4=1,K4==0){db1=1;d25045(2);x0=0;}
232 3 else x0=1;
233 3 }
234 2 b++;
235 2 if(b>6){b=1;}
236 2 switch(b)
237 2 {
C51 COMPILER V7.20 WSD1 11/03/2004 13:56:11 PAGE 5
238 3 case 1: a=xs1[0]; break;
239 3 case 2: a=xs1[1]; break;
240 3 case 3: a=xs1[2]; break;
241 3 case 4: a=xs1[3];c=xs1[6]; break;
242 3 case 5: a=xs1[4];c=xs1[7]; break;
243 3 case 6: a=xs1[5]; break;
244 3 }
245 2 delay1(300);
246 2 }
247 1 if(x0==1)
248 1 {
249 2 if(K2=1,K2==0)
250 2 {
251 3 a++;
252 3 x0=1;
253 3 delay1(80);
254 3 }
255 2 if(K3=1,K3==0)
256 2 {
257 3 a--;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -