📄 wsd.lst
字号:
C51 COMPILER V7.20 WSD 10/19/2004 21:04:48 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE WSD
OBJECT MODULE PLACED IN wsd.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE wsd.c BROWSE DEBUG OBJECTEXTEND SRC(.\wsd.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 /*--------------------------------*/
9 sbit K1=P1^0;
10 sbit K2=P1^1;
11 sbit K3=P1^2;
12 sbit K4=P1^3;
13
14 sbit SER=P2^5; //14,8位串行输入
15 sbit RCLK1=P2^6; //12琐存
16 sbit SRCLK=P2^7; //11时钟
17
18 sbit LED1=P0^0;
19 sbit LED2=P0^1;
20 sbit LED3=P0^2;
21 sbit LED4=P0^3;
22 sbit LED5=P0^4;
23 sbit LED6=P0^5;
24 sbit LED7=P0^6;
25 sbit LED8=P0^7;
26 sbit ds1820=P2^0;
27 //-----------------------------
28 uchar bdata x;
29 sbit x0 =x^7;
30 sbit x1 =x^6;
31 sbit x2 =x^5;
32 sbit x3 =x^4;
33 //-----------------------------
34 uchar data TAB[10],xs1[8],msn=50;
35 uint plz,wdz;
36 //-----------------------------
37 extern void d25045(uchar x);
38 //-----------------------------
39 uchar code lcd1[17]={0x14,0xB7,0x2C,0x25,0x87,
40 0x45,0x44,0x37,0x04,0x05,
41 0x7F,0xEF,0xFD,0xc4,0xFF};
42 //显示0--F
43 uint code SDTAB[101]=
44 {
45 7285,7276,7264,7252,7240,7228,7216,7204,7192,7180,
46 7168,7156,7144,7132,7120,7108,7096,7084,7072,7060,
47 7048,7036,7024,7012,7000,6988,6976,6964,6952,6940,
48 6928,6916,6904,6892,6880,6868,6856,6844,6832,6820,
49 6808,6796,6784,6772,6760,6748,6736,6724,6712,6700,
50 6688,6675,6664,6652,6640,6628,6616,6604,6592,6580,
51 6568,6556,6544,6532,6520,6508,6496,6484,6472,6460,
52 6448,6436,6424,6412,6400,6388,6376,6364,6352,6340,
53 6328,6316,6304,6292,6280,6268,6256,6244,6232,6220,
54 6088,6076,6064,6052,6040,6028,6016,6004,5992,5980,
55 };
C51 COMPILER V7.20 WSD 10/19/2004 21:04:48 PAGE 2
56 //-----------------------------
57 void delay1(uint ms)
58 {
59 1 uint i;
60 1 for(i=0;i<ms;i++); //Feed the dog
61 1 }
62 //****************************/
63 void d595(uchar temp)
64 {
65 1 uchar j;
66 1 for (j=0;j<8;j++)
67 1 {
68 2 temp=temp>>1;
69 2 SER=CY;
70 2 SRCLK=1; SRCLK=0;
71 2 }
72 1 RCLK1=0; RCLK1=1;
73 1 }
74 /*-------------------------------*/
75 uint cjtemp(void)
76 {uint z;
77 1 #pragma asm
78 1 GET_TEMP:
79 1 //CLR EA ;使用ds1820一定要禁止任何中断产生
80 1 ACALL INT ;调用初使化子程序
81 1 MOV A,#0CCH
82 1 ACALL WRITE ;送入跳过ROM命令
83 1 MOV A, #44H
84 1 ACALL WRITE ;送入温度转换命令
85 1 ACALL INT ;温度转换完全,再次初使化ds1820
86 1 MOV A,#0CCH
87 1 ACALL WRITE ;送入跳过ROM命令
88 1 MOV A,#0BEH
89 1 ACALL WRITE ;送入读温度暂存器命令
90 1 ACALL READ
91 1 mov r7,a ;读出温度值低字节存入R7
92 1 ACALL READ
93 1 ;lr ACC.7
94 1 mov r6,a ;读出谩度值高字节存入R6
95 1 SETB EA
96 1 RET
97 1 INT:
98 1 CLR EA ;初始化ds1820子程序
99 1 L0:CLR ds1820 ;ds1820总线为低复位电平87460452
100 1 MOV R2,#200
101 1 L1:CLR ds1820
102 1 DJNZ R2,L1 ;总线复位电平保持400us
103 1 SETB ds1820 ;释放ds1820总线
104 1 MOV R2,#30
105 1 L4:DJNZ R2,L4 ;释放ds1820总线保持60us
106 1 CLR C ;清存在信号(存在C=0,不存在C=1)
107 1 ORL C,ds1820
108 1 ;JC L0
109 1 MOV R6,#80
110 1 L5:ORL C,ds1820
111 1 JC L3
112 1 DJNZ R6,L5
113 1 ;AJMP L0
114 1 L3:MOV R2,#240
115 1 L2:DJNZ R2,L2
116 1 SETB EA
117 1 RET
C51 COMPILER V7.20 WSD 10/19/2004 21:04:48 PAGE 3
118 1 WRITE: ;向ds1820写操作命令子程序
119 1 CLR EA
120 1 MOV R3,#8 ;写入ds1820的bit数,一个字节8个bit
121 1 WR1:SETB ds1820
122 1 MOV R4,#8
123 1 RRC A ;把一个字节data(A)分成8个bit环移给 C
124 1 CLR ds1820 ;开始写入ds1820总线要处于复位(低)状态
125 1 WR2:DJNZ R4,WR2 ;ds1820总线复位保持16us
126 1 MOV ds1820,C ;写入一个bit
127 1 MOV R4,#20
128 1 WR3:DJNZ R4,WR3 ;等待40us
129 1 DJNZ R3,WR1 ;写入下一个bit
130 1 SETB ds1820 ;重新释放ds1820总线
131 1 SETB EA
132 1 RET
133 1 READ:
134 1 CLR EA
135 1 MOV R6,#8 ;连续读8个bit
136 1 RE1:CLR ds1820 ;读前总线保持为低
137 1 MOV R4,#4
138 1 NOP
139 1 SETB ds1820 ;开始读,总线释放
140 1 RE2:DJNZ R4,RE2 ;持续8us
141 1 MOV C,ds1820 ;从ds1820总线读得一个bit
142 1 RRC A ;把读得的位值环移给 A
143 1 MOV R5,#30
144 1 RE3:DJNZ R5,RE3 ;持续60us
145 1 DJNZ R6,RE1 ;读下一个bit
146 1 SETB ds1820 ;重新释放ds1820总线
147 1 SETB EA
148 1 RET
149 1 #pragma endasm
150 1
151 1 return z;
152 1 }
153 //--------------------------------
154 uint wdcl(void)
155 {uint wdz;
156 1 wdz=cjtemp();
157 1 if((wdz>>15)==1)
158 1 {wdz=~wdz;}
159 1 wdz=((0x0ff0&wdz)>>4)*10+((0x0f&wdz)*6/10);
160 1 if(wdz>1260){wdz=0;}
161 1 return wdz;
162 1 }
163 /*-------------------------------*/
164 uint RDSDZ(void)
165 {uchar i=0,z=0;
166 1 while(z<100)
167 1 {
168 2 if(plz<SDTAB[i]){i++;}
169 2 else{z=101;}
170 2 }
171 1 return i;
172 1 }
173 //-----------------------------
174 void AJ(void)
175 {uchar a,b,c;
176 1 uint Collect;
177 1 if(K1=1,K1==0)
178 1 {
179 2 if(K4=1,K4==0){d25045(2);x0=0;}
C51 COMPILER V7.20 WSD 10/19/2004 21:04:48 PAGE 4
180 2 else x0=1;
181 2 b++;
182 2 if(b>6){b=1;}
183 2 switch(b)
184 2 {
185 3 case 1: a=xs1[0]; break;
186 3 case 2: a=xs1[1]; break;
187 3 case 3: a=xs1[2]; break;
188 3 case 4: a=xs1[3];c=xs1[6]; break;
189 3 case 5: a=xs1[4];c=xs1[7]; break;
190 3 case 6: a=xs1[5]; break;
191 3 }
192 2 delay1(800);
193 2 }
194 1 if(x0==1)
195 1 {
196 2 if(K2=1,K2==0)
197 2 {
198 3 a++;
199 3 x0=1;
200 3 delay1(200);
201 3 }
202 2 if(K3=1,K3==0)
203 2 {
204 3 a--;
205 3 x0=1;
206 3 delay1(200);
207 3 }
208 2 if(K4=1,K4==0)
209 2 {
210 3 c=~c;
211 3 delay1(200);
212 3 }
213 2 if(b==1)
214 2 {
215 3 if(a>100){a=0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -