📄 1820.lst
字号:
C51 COMPILER V7.50 1820 08/30/2006 10:22:09 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 1820
OBJECT MODULE PLACED IN 1820.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1820.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************************************************************************************/
2 /* 程序名:DS18B20测温程序 */
3 /* */
4 /* 晶振:12.0 M CPU型号:AT89S52 */
5 /* */
-
6 /* */
7 /* 功能描述: 将实验板上J6的5脚和J7的5脚(均自上往下数)用短路帽连接! */
8 /* 用数字温度传感器DS18B20就可以实时检测室温值 */
9 /* */
10 /* http://www.mculover.net */
11 /* http://www.mculover.net/bbs */
12 /* */
13 /* */
14 /* 湘灵电子工作室 版权所有 */
-
15 /* 2006-03-20 */
16 /************************************************************************************/
17 #include <reg51.h>
18
19 sbit DQ = P1 ^ 4; //定义端口DQ
20 sbit P2_4 =P2 ^ 4;
21 sbit P2_5 =P2 ^ 5;
22 sbit P2_6 =P2 ^ 6;
23 sbit P2_7 =P2 ^ 7;
24
25 unsigned char code LEDData1 [ ] = {0xc0, 0xf9, 0xa4,
26 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字
27 unsigned char code LEDData2 [ ] = {0x40, 0x79, 0x24,
28 0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //0.-9.LED数值
29
30 /**********************************************************************************/
31 void Delay(unsigned int num)//延时函数
32 {
33 1 while( num-- );
34 1 }
35
36 /**********************************************************************************/
37 Init_DS18B20(void)//初始化ds1820
38 {
39 1 unsigned char x = 0;
40 1
41 1 DQ = 1; //DQ复位
42 1 Delay(8); //稍做延时
43 1
44 1 DQ = 0; //单片机将DQ拉低
45 1 Delay(80); //精确延时 大于 480us
46 1
47 1 DQ = 1; //拉高总线
48 1 Delay(14);
49 1
50 1 x = DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
51 1 Delay(20);
52 1 }
53
C51 COMPILER V7.50 1820 08/30/2006 10:22:09 PAGE 2
54 /**********************************************************************************/
55 ReadOneChar(void)//读一个字节
56 {
57 1 unsigned char i = 0;
58 1 unsigned char dat = 0;
59 1
60 1 for (i = 8; i > 0; i--)
61 1 {
62 2 DQ = 0; // 给脉冲信号
63 2 dat >>= 1;
64 2 DQ = 1; // 给脉冲信号
65 2
66 2 if(DQ)
67 2 dat |= 0x80;
68 2 Delay(4);
69 2 }
70 1
71 1 return (dat);
72 1 }
73
74 /**********************************************************************************/
75 WriteOneChar(unsigned char dat)//写一个字节
76 {
77 1 unsigned char i = 0;
78 1 for (i = 8; i > 0; i--)
79 1 {
80 2 DQ = 0;
81 2 DQ = dat&0x01;
82 2 Delay(5);
83 2
84 2 DQ = 1;
85 2 dat>>=1;
86 2 }
87 1 }
88
89 /**********************************************************************************/
90 Read_Disp_Temperature(void)//读取并显示温度
91 {
92 1 unsigned int a = 0, b = 0, c = 0, t = 0;
93 1 float tt = 0;
94 1
95 1 Init_DS18B20();
96 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
97 1 WriteOneChar(0x44); // 启动温度转换
98 1
99 1 Init_DS18B20();
100 1 WriteOneChar(0xCC); //跳过读序号列号的操作
101 1 WriteOneChar(0xBE); //读取温度寄存器
102 1
103 1 a = ReadOneChar();
104 1 b = ReadOneChar();
105 1
106 1 t = b;
107 1 t <<= 8;
108 1 t = t | a;
109 1
110 1 tt = t * 0.0625;
111 1 t = tt * 10 + 0.5; //放大10倍输出并四舍五入
112 1
113 1 a = t / 100; //十位
114 1 b = t / 10 - a * 10; //个位
115 1 c = t - a * 100 - b * 10; //小数位
C51 COMPILER V7.50 1820 08/30/2006 10:22:09 PAGE 3
116 1
117 1 P0 = 0xc6; //显示"C"字符
118 1 P2_4 = 0;
119 1 Delay(300);
120 1 P2 =0xff;
121 1
122 1 P0 = LEDData1[c]; //显示小数位
123 1 P2_5 = 0;
124 1 Delay(400);
125 1 P2 =0xff;
126 1
127 1 P0 = LEDData2[b]; //显示个位
128 1 P2_6 = 0;
129 1 Delay(400);
130 1 P2 =0xff;
131 1
132 1 P0 = LEDData1[a]; //显示十位
133 1 P2_7 = 0;
134 1 Delay(400);
135 1 P2 =0xff;
136 1 }
137
138 /**********************************************************************************/
139 void main(void)
140 {
141 1 while(1)
142 1 {
143 2 Read_Disp_Temperature();
144 2 }
145 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 388 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -