?? zhts.lst
字號:
C51 COMPILER V6.12 ZHTS 11/28/2006 16:29:48 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE ZHTS
OBJECT MODULE PLACED IN .\zhts.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE .\zhts.c DEBUG OBJECTEXTEND
stmt level source
1 //flow light and beep
2 #include <reg51.h>
3 #include <intrins.h>
4 #define uint unsigned int
5 #define uchar unsigned char
6 sbit adrd=P3^7; //IO口定義
7 sbit adwr=P3^6;
8 sbit diola=P2^5;
9 sbit dula=P2^6;
10 sbit wela=P2^7;
11 sbit csda=P3^2;
12
13
14 sbit dawr=P3^6;
15
16 unsigned char j,k;
17 unsigned char a,b;
18 sbit DS=P2^2; //define interface
19 uint temp; // variable of temperature
20 uchar flag1; // sign of the result positive or negative
21 sbit beep=P2^3;
22 void dazhuanhuan();
23 void adzhuanhuan();
24 void jianpan();
25 void display1(unsigned char);
26 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //數碼管編碼
27 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
28 unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
29 0x87,0xff,0xef};
30
31
32 void delay1(uint count) //delay
33 {
34 1 uint i;
35 1 while(count)
36 1 {
37 2 i=200;
38 2 while(i>0)
39 2 i--;
40 2 count--;
41 2 }
42 1 }
43 ///////功能:串口初始化,波特率9600,方式1///////
44 void Init_Com(void)
45 {
46 1 TMOD = 0x20;
47 1 PCON = 0x00;
48 1 SCON = 0x50;
49 1 TH1 = 0xFd;
50 1 TL1 = 0xFd;
51 1 TR1 = 1;
52 1 }
53
54 void dsreset(void) //send reset and initialization command
55 {
C51 COMPILER V6.12 ZHTS 11/28/2006 16:29:48 PAGE 2
56 1 uint i;
57 1 DS=0;
58 1 i=103;
59 1 while(i>0)i--;
60 1 DS=1;
61 1 i=4;
62 1 while(i>0)i--;
63 1 }
64
65 bit tmpreadbit(void) //read a bit
66 {
67 1 uint i;
68 1 bit dat;
69 1 DS=0;i++; //i++ for delay
70 1 DS=1;i++;i++;
71 1 dat=DS;
72 1 i=8;while(i>0)i--;
73 1 return (dat);
74 1 }
75
76 uchar tmpread(void) //read a byte date
77 {
78 1 uchar i,j,dat;
79 1 dat=0;
80 1 for(i=1;i<=8;i++)
81 1 {
82 2 j=tmpreadbit();
83 2 dat=(j<<7)|(dat>>1); //讀出的數據最低位在最前面,這樣剛好一個字節在DAT里
84 2 }
85 1 return(dat);
86 1 }
87
88 void tmpwritebyte(uchar dat) //write a byte to ds18b20
89 {
90 1 uint i;
91 1 uchar j;
92 1 bit testb;
93 1 for(j=1;j<=8;j++)
94 1 {
95 2 testb=dat&0x01;
96 2 dat=dat>>1;
97 2 if(testb) //write 1
98 2 {
99 3 DS=0;
100 3 i++;i++;
101 3 DS=1;
102 3 i=8;while(i>0)i--;
103 3 }
104 2 else
105 2 {
106 3 DS=0; //write 0
107 3 i=8;while(i>0)i--;
108 3 DS=1;
109 3 i++;i++;
110 3 }
111 2
112 2 }
113 1 }
114
115 void tmpchange(void) //DS18B20 begin change
116 {
117 1 dsreset();
C51 COMPILER V6.12 ZHTS 11/28/2006 16:29:48 PAGE 3
118 1 delay1(1);
119 1 tmpwritebyte(0xcc); // address all drivers on bus
120 1 tmpwritebyte(0x44); // initiates a single temperature conversion
121 1 }
122
123 uint tmp() //get the temperature
124 {
125 1 float tt;
126 1 uchar a,b;
127 1 dsreset();
128 1 delay1(1);
129 1 tmpwritebyte(0xcc);
130 1 tmpwritebyte(0xbe);
131 1 a=tmpread();
132 1 b=tmpread();
133 1 temp=b;
134 1 temp<<=8; //two byte compose a int variable
135 1 temp=temp|a;
136 1 tt=temp*0.0625;
137 1 temp=tt*10+0.5;
138 1 return temp;
139 1 }
140
141 void readrom() //read the serial
142 {
143 1 uchar sn1,sn2;
144 1 dsreset();
145 1 delay1(1);
146 1 tmpwritebyte(0x33);
147 1 sn1=tmpread();
148 1 sn2=tmpread();
149 1 }
150
151
152 void delay10ms1() //delay
153 {
154 1 uchar a,b;
155 1 for(a=10;a>0;a--)
156 1 for(b=60;b>0;b--);
157 1 }
158
159 void display2(uint temp) //顯示程序
160 {
161 1 uchar A1,A2,A2t,A3,ser;
162 1 ser=temp/10;
163 1 SBUF=ser;
164 1 A1=temp/100;
165 1 A2t=temp%100;
166 1 A2=A2t/10;
167 1 A3=A2t%10;
168 1 dula=0;
169 1 P0=table[A1]; //顯示百位
170 1 dula=1;
171 1 dula=0;
172 1
173 1 wela=0;
174 1 P0=0x7e;
175 1 wela=1;
176 1 wela=0;
177 1 delay1(1);
178 1
179 1 dula=0;
C51 COMPILER V6.12 ZHTS 11/28/2006 16:29:48 PAGE 4
180 1 P0=table1[A2]; //顯示十位
181 1 dula=1;
182 1 dula=0;
183 1
184 1 wela=0;
185 1 P0=0x7d;
186 1 wela=1;
187 1 wela=0;
188 1 delay1(1);
189 1
190 1 P0=table[A3]; //顯示個位
191 1 dula=1;
192 1 dula=0;
193 1
194 1 P0=0x7b;
195 1 wela=1;
196 1 wela=0;
197 1 delay1(1);
198 1 }
199
200
201 void wendu()
202 {
203 1 uchar a,c;
204 1 Init_Com();
205 1 for(c=0;c<20;c++)
206 1 {
207 2 tmpchange();
208 2 // delay(200);
209 2 for(a=10;a>0;a--)
210 2 { display2(tmp());
211 3 }
212 2 }
213 1 }
214
215
216 void delay10ms()
217 {
218 1 for(a=100;a>0;a--)
219 1 for(b=225;b>0;b--);
220 1 }
221
222 //擰動AD旁邊的電位器,會在數碼管的前三位顯示0-255之間的數值。這就是把模擬電壓轉換成數字信號。
223
224 void delay(unsigned char i) //延時程序
225 {
226 1 for(j=i;j>0;j--)
227 1 for(k=125;k>0;k--);
228 1 }
229
230
231 void display(uchar bai_c,uchar sh_c,uchar g_c) //顯示程序
232 {
233 1 dula=0;
234 1 P0=table[bai_c]; //顯示百位
235 1 dula=1;
236 1 dula=0;
237 1
238 1 wela=0;
239 1 P0=0x7e;
240 1 wela=1;
241 1 wela=0;
C51 COMPILER V6.12 ZHTS 11/28/2006 16:29:48 PAGE 5
242 1 delay(5);
243 1
244 1 dula=0;
245 1 P0=table[sh_c]; //顯示十位
246 1 dula=1;
247 1 dula=0;
248 1
249 1 wela=0;
250 1 P0=0x7d;
251 1 wela=1;
252 1 wela=0;
253 1 delay(5);
254 1
255 1 P0=table[g_c]; //顯示個位
256 1 dula=1;
257 1 dula=0;
258 1
259 1 P0=0x7b;
260 1 wela=1;
261 1 wela=0;
262 1 delay(5);
263 1 }
264
265 da();//DA
266 void main()
267 { uchar liushui;
268 1 k=0xfe;
269 1 for(liushui=0;liushui<8;liushui++)
270 1 {
271 2 delay10ms();
272 2 beep=0;
273 2 delay10ms();
274 2 beep=1;
275 2 j=_crol_(k,1);
276 2 k=j;
277 2 P1=j;
278 2 }
279 1 dazhuanhuan();
280 1 wendu();
281 1 adzhuanhuan();
282 1 jianpan();
283 1
284 1
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -