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