📄 ceshi.lst
字号:
C51 COMPILER V7.50 CESHI 08/08/2008 15:17:00 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE CESHI
OBJECT MODULE PLACED IN ceshi.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ceshi.c ROM(COMPACT) OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND
line 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 ss1=P3^4;
9 sbit ss2=P3^5;
10 sbit diola=P2^5;
11 sbit dula=P2^6;
12 sbit wela=P2^7;
13 sbit csda=P3^2;
14 sbit dawr=P3^6;
15 unsigned char j,k;
16 unsigned char a,b;
17 sbit DS=P2^2; //define interface
18 uint temp; // variable of temperature
19 uchar flag1; // sign of the result positive or negative
20 sbit beep=P2^3;
21 void dazhuanhuan();
22 void adzhuanhuan();
23 void jianpan();
24 void display1(unsigned char);
25 uchar code table[]=
26 {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, //数码管编码
27 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
28 unsigned char code table1[]=
29 {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,
30 0x87,0xff,0xef};
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 V7.50 CESHI 08/08/2008 15:17:00 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 V7.50 CESHI 08/08/2008 15:17:00 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 void delay10ms1() //delay
151 {
152 1 uchar a,b;
153 1 for(a=10;a>0;a--)
154 1 for(b=60;b>0;b--);
155 1 }
156 void display2(uint temp) //显示程序
157 {
158 1 uchar A1,A2,A2t,A3,ser;
159 1 ser=temp/10;
160 1 SBUF=ser;
161 1 A1=temp/100;
162 1 A2t=temp%100;
163 1 A2=A2t/10;
164 1 A3=A2t%10;
165 1 dula=0;
166 1 P0=table[A1]; //显示百位
167 1 dula=1;
168 1 dula=0;
169 1
170 1 wela=0;
171 1 P0=0x7e;
172 1 wela=1;
173 1 wela=0;
174 1 delay1(1);
175 1
176 1 dula=0;
177 1 P0=table1[A2]; //显示十位
178 1 dula=1;
179 1 dula=0;
C51 COMPILER V7.50 CESHI 08/08/2008 15:17:00 PAGE 4
180 1
181 1 wela=0;
182 1 P0=0x7d;
183 1 wela=1;
184 1 wela=0;
185 1 delay1(1);
186 1
187 1 P0=table[A3]; //显示个位
188 1 dula=1;
189 1 dula=0;
190 1
191 1 P0=0x7b;
192 1 wela=1;
193 1 wela=0;
194 1 delay1(1);
195 1 }
196 void wendu()
197 {
198 1 uchar a,c;
199 1 Init_Com();
200 1 for(c=0;c<20;c++)
201 1 {
202 2 tmpchange();
203 2 // delay(200);
204 2 for(a=10;a>0;a--)
205 2 { display2(tmp());
206 3 }
207 2 }
208 1 }
209 void delay10ms()
210 {
211 1 for(a=100;a>0;a--)
212 1 for(b=225;b>0;b--);
213 1 }
214
215 //拧动AD旁边的电位器,会在数码管的前三位显示0-255之间的数值。这就是把模拟电压转换成数字信号。
216
217 void delay(unsigned char i) //延时程序
218 {
219 1 for(j=i;j>0;j--)
220 1 for(k=125;k>0;k--);
221 1 }
222 void display(uchar bai_c,uchar sh_c,uchar g_c) //显示程序
223 {
224 1 dula=0;
225 1 P0=table[bai_c]; //显示百位
226 1 dula=1;
227 1 dula=0;
228 1
229 1 wela=0;
230 1 P0=0x7e;
231 1 wela=1;
232 1 wela=0;
233 1 delay(5);
234 1
235 1 dula=0;
236 1 P0=table[sh_c]; //显示十位
237 1 dula=1;
238 1 dula=0;
239 1
240 1 wela=0;
241 1 P0=0x7d;
C51 COMPILER V7.50 CESHI 08/08/2008 15:17:00 PAGE 5
242 1 wela=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -