📄 text1.lst
字号:
C51 COMPILER V7.06 TEXT1 05/13/2008 11:27:15 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /******************************************/
2 #include "reg51.h"
3 #include "intrins.h" //_nop_();延时函数用
4 #define Disdata P1 //段码输出口
5 #define discan P3 //扫描口
6 #define uchar unsigned char
7 #define uint unsigned int
8 #define num 10
9 sbit DQ1=P3^4;
10 sbit DQ2=P3^5;
11 sbit DQ3=P3^7; //温度输入口
12 sbit speak=P1^7;
13 sbit P3_0=P3^0;
14 sbit P3_1=P3^1;
15 sbit P3_2=P3^2;
16 sbit P3_3=P3^3;
17
18 //**************温度小数部分用查表法***********//
19 uchar data temp_data[2]={0x00,0x00}; //读出温度暂放
20 uchar data display[5]={0x00,0x00,0x00,0x00,0x00}; //显示单元数据,共4个数据和一个运算暂用
21 uchar data min_max[3][2]={0,100,20,50,30,40}; ////修改温度的上下限
22 //
23
24 void check(uint i)
25 {
26 1 speak=0;
27 1 if(display[4]<min_max[i][0]||display[4]>min_max[i][1])
28 1 speak=1;
29 1 }
30 /*****************11us延时函数*************************/
31 //
32 void cc(uint i)
33 {
34 1 switch(i)
35 1 {
36 2 case 0: P3_0=1;P3_1=0;P3_2=0;P3_3=0;break;
37 2 case 1:P3_0=0;P3_1=1;P3_2=0;P3_3=0;break;
38 2 case 2: P3_0=0;P3_1=0;P3_2=1;P3_3=0;break;
39 2 case 3: P3_0=0;P3_1=0;P3_2=0;P3_3=1;break;
40 2 }
41 1 }
42 void delay(uint t)
43 {
44 1 for (;t>0;t--);
45 1 }
46 //
47 /****************显示扫描函数***************************/
48 void scan()
49 {
50 1 char k;uint y=0x80;
51 1 for(k=0;k<4;k++) //4位LED扫描控制
52 1 {
53 2 cc(k);
54 2 y=y&P1;
55 2 Disdata=y|display[k]; //数据显示
C51 COMPILER V7.06 TEXT1 05/13/2008 11:27:15 PAGE 2
56 2 delay(9000); //延时
57 2 }
58 1 }
59 //
60 //
61 /****************DS18B20复位函数************************/
62 ow_reset1()
63 {
64 1 char presence=1;
65 1 while(presence)
66 1 {
67 2 while(presence)
68 2 {
69 3 DQ1=1;_nop_();_nop_();//从高拉倒低
70 3 DQ1=0;
71 3 delay(50); //550 us
72 3 DQ1=1;
73 3 delay(6); //66 us
74 3 presence=DQ1; //presence=0 复位成功,继续下一步
75 3 }
76 2 delay(45); //延时500 us
77 2 presence=~DQ1;
78 2 }
79 1 DQ1=1; //拉高电平
80 1 }
81
82 ow_reset2()
83 {
84 1 char presence=1;
85 1 while(presence)
86 1 {
87 2 while(presence)
88 2 {
89 3 DQ2=1;_nop_();_nop_();//从高拉倒低
90 3 DQ2=0;
91 3 delay(50); //550 us
92 3 DQ2=1;
93 3 delay(6); //66 us
94 3 presence=DQ2; //presence=0 复位成功,继续下一步
95 3 }
96 2 delay(45); //延时500 us
97 2 presence=~DQ2;
98 2 }
99 1 DQ2=1; //拉高电平
100 1 }
101
102
103 ow_reset3()
104 {
105 1 char presence=1;
106 1 while(presence)
107 1 {
108 2 while(presence)
109 2 {
110 3 DQ3=1;_nop_();_nop_();//从高拉倒低
111 3 DQ3=0;
112 3 delay(50); //550 us
113 3 DQ3=1;
114 3 delay(6); //66 us
115 3 presence=DQ3; //presence=0 复位成功,继续下一步
116 3 }
117 2 delay(45); //延时500 us
C51 COMPILER V7.06 TEXT1 05/13/2008 11:27:15 PAGE 3
118 2 presence=~DQ3;
119 2 }
120 1 DQ3=1; //拉高电平
121 1 }
122 //
123 //
124 /****************DS18B20写命令函数************************/
125 //向1-WIRE 总线上写1个字节
126 void write_byte1(uchar val)
127 {
128 1 uchar i;
129 1 for(i=8;i>0;i--)
130 1 {
131 2 DQ1=1;_nop_();_nop_(); //从高拉倒低
132 2 DQ1=0;_nop_();_nop_();_nop_();_nop_(); //5 us
133 2 DQ1=val&0x01; //最低位移出
134 2 delay(6); //66 us
135 2 val=val/2; //右移1位
136 2 }
137 1 DQ1=1;
138 1 delay(1);
139 1 }
140
141 void write_byte2(uchar val)
142 {
143 1 uchar i;
144 1 for(i=8;i>0;i--)
145 1 {
146 2 DQ2=1;_nop_();_nop_(); //从高拉倒低
147 2 DQ2=0;_nop_();_nop_();_nop_();_nop_(); //5 us
148 2 DQ2=val&0x01; //最低位移出
149 2 delay(6); //66 us
150 2 val=val/2; //右移1位
151 2 }
152 1 DQ2=1;
153 1 delay(1);
154 1 }
155
156
157 void write_byte3(uchar val)
158 {
159 1 uchar i;
160 1 for(i=8;i>0;i--)
161 1 {
162 2 DQ3=1;_nop_();_nop_(); //从高拉倒低
163 2 DQ3=0;_nop_();_nop_();_nop_();_nop_(); //5 us
164 2 DQ3=val&0x01; //最低位移出
165 2 delay(6); //66 us
166 2 val=val/2; //右移1位
167 2 }
168 1 DQ3=1;
169 1 delay(1);
170 1 }
171 //
172 /****************DS18B20读1字节函数************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -