📄 7.lst
字号:
C51 COMPILER V6.12 7 11/29/2008 16:09:39 PAGE 1
C51 COMPILER V6.12, COMPILATION OF MODULE 7
OBJECT MODULE PLACED IN H:\13\7.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE H:\13\7.C DB SB OE
stmt level source
1 /*********************************************************************
2 实验:温度和压力的测量实验
3 接线方法:
4 YS0----CS40
5 YS2----CS13
6 YS0----CS40
7 CLOCK--0.5M
8 IN0----AN0 (压力)
9 IN1----AN1 (温度)
10 **********************************************************************/
11 #include<reg52.h>
12 #include<stdio.h>
13 #include <absacc.h>
14 #include <intrins.h>
15 #include <ctype.h>
16
17
18 xdata unsigned char OUTBIT _at_ 0x8002; // 位控制口
19 xdata unsigned char OUTSEG _at_ 0x8004; // 段控制口
20 xdata unsigned char IN _at_ 0x8001; // 键盘读入口
21
22 xdata unsigned char CS0809 _at_ 0xa000; //定义第一通道
23
24 xdata unsigned char CSIN _at_ 0xa001;//定义第二通道
25
26 sbit DQ =P3^3; //定义p3.3口
27
28 #define uchar unsigned char
29 #define uint unsigned int
30 #define Debugging 50
31 #define Debug 100
32
33 unsigned int MAP[Debugging+1];
34
35 void delay(uint useconds);
36 uchar ow_reset(void);
37 uchar read_byte(void);
38 void write_byte(uchar val);
39 uint Read_Temperature(void);
40 void Dis_LED(unsigned char n);
41
42
43
44 void Array (void)
45 {
46 1 int i,j=0;//j=Debugging;
47 1 for(i=0;i<=Debugging+1;i++)
48 1 {
49 2
50 2 MAP[i]=j;
51 2 //j--;
52 2 j++;
53 2 }
54 1 }
55
C51 COMPILER V6.12 7 11/29/2008 16:09:39 PAGE 2
56
57
58
59
60 code unsigned char LEDMAP[] = { // 八段管显示码
61 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,
62 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71
63 };
64
65 void Delay(unsigned char CNT) //压力与变阻式温度的延时
66 {
67 1 unsigned char i;
68 1
69 1 while (CNT-- !=0)
70 1 for (i=100; i !=0; i--);
71 1 }
72
73 ///=====================
74 void delay1(uint useconds) //数字温度的 延时
75 {
76 1 for(;useconds>0;useconds--);
77 1 }
78
79 //=========================
80
81 unsigned char Read0809() //变阻式温度的转换
82 {
83 1 unsigned char i;
84 1
85 1 CS0809 = 0; // 起动 A/D ,并选中通道
86 1 for (i=0; i<0x00; i++) ; // 延时 > 100us 延时等待
87 1 return(CS0809); // 读入结果
88 1 }
89
90
91 unsigned char Pressure() //压力的转换
92 {
93 1 unsigned char i;
94 1
95 1 CSIN = 0; //选中通道
96 1 for (i=0; i<0x00; i++) ; //延时等待
97 1 return(CSIN); //读入结果
98 1 }
99
100
101 void Dis_LED(unsigned char n) //显示变阻式温度
102 {
103 1 unsigned char temp;
104 1
105 1 temp = n;
106 1
107 1 temp = n / 16;
108 1 OUTSEG = LEDMAP[temp]; // 显示AD采样值的十位
109 1 OUTBIT = 0x08; //十位显示在第三个数码管
110 1 Delay(5);
111 1
112 1 temp = n % 16;
113 1 OUTSEG = LEDMAP[temp]; // 显示AD采样值的个位
114 1 OUTBIT = 0x04; //个位显示在第四个数码管
115 1 Delay(5);
116 1
117 1 }
C51 COMPILER V6.12 7 11/29/2008 16:09:39 PAGE 3
118
119 void Dis_LED1(unsigned char n) //显示压力
120 {
121 1 unsigned char temp;
122 1
123 1 temp = n;
124 1 // temp = n / 10;
125 1
126 1 // n = n % 100;
127 1 temp = n / 16;
128 1 OUTSEG = LEDMAP[temp]; // 显示AD采样值的十位
129 1 OUTBIT = 0x02; //十位显示在第五个数码管
130 1 Delay(5);
131 1
132 1 temp = n % 16;
133 1 OUTSEG = LEDMAP[temp]; // 显示AD采样值的个位
134 1 OUTBIT = 0x01; //个位显示在第六个数码管
135 1 Delay(5);
136 1
137 1 }
138 ////////////=====================================
139 void Dis_LED2(unsigned char n)
140 {
141 1 unsigned char temp;
142 1
143 1
144 1 temp = n / 10; // 显示十进制温度值
145 1 OUTSEG = LEDMAP[temp];
146 1 OUTBIT = 0x20; //十位显示在第一个数码管
147 1 delay1(150);
148 1
149 1 temp = n % 10;
150 1 OUTSEG = LEDMAP[temp];
151 1 OUTBIT = 0x10; //个位显示在第二个数码管
152 1 delay1(1);
153 1
154 1 }
155 uchar ow_reset(void) // 信号复位进行初始化
156 {
157 1 uchar presence;
158 1 DQ = 0; // DQ置低电平
159 1 delay1(29); // 等待 480us
160 1 DQ = 1; //
161 1 delay1(3); // 延时等待
162 1 presence = DQ; // DS18b20等待过后发送存在的脉冲持续
163 1 delay1(25); // wait for end of timeslot
164 1 return(presence); // 返回值
165 1 // 0=presence, 1 = no part
166 1 }
167 uchar read_byte(void)
168 {
169 1 uchar i;
170 1 uchar value = 0;
171 1 for (i=8;i>0;i--)
172 1 {
173 2 value>>=1;
174 2 DQ = 0; // pull DQ low to start timeslot
175 2 DQ = 1; // then return high
176 2 delay1(1);
177 2 if(DQ)value|=0x80;
178 2 delay1(6); // wait for rest of timeslot
179 2 }
C51 COMPILER V6.12 7 11/29/2008 16:09:39 PAGE 4
180 1 return(value);
181 1 }
182 void write_byte(uchar val)
183 {
184 1 uchar i;
185 1 for (i=8; i>0; i--) // writes byte, one bit at a time
186 1 {
187 2 DQ = 0; // pull DQ low to start timeslot
188 2 DQ = val&0x01;
189 2 delay1(5); // hold value for remainder of timeslot
190 2 DQ = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -