📄 1820.lst
字号:
C51 COMPILER V7.50 1820 03/21/2006 21:36:06 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 1820
OBJECT MODULE PLACED IN 1820.OBJ
COMPILER INVOKED BY: e:\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 ^ 2; //定义端口DQ
20
21 unsigned char code LEDData1 [ ] = {0x41, 0xf5, 0x29,
22 0x31, 0x95, 0x13, 0x03, 0x75, 0x01, 0x11};//0-9数字
23 unsigned char code LEDData2 [ ] = {0x40, 0xf5, 0x28,
24 0x30, 0x94, 0x12, 0x02, 0x74, 0x00, 0x10}; //0.-9.LED数值
25
26 /**********************************************************************************/
27 void Delay(unsigned int num)//延时函数
28 {
29 1 while( num-- );
30 1 }
31
32 /**********************************************************************************/
33 Init_DS18B20(void)//初始化ds1820
34 {
35 1 unsigned char x = 0;
36 1
37 1 DQ = 1; //DQ复位
38 1 Delay(8); //稍做延时
39 1
40 1 DQ = 0; //单片机将DQ拉低
41 1 Delay(80); //精确延时 大于 480us
42 1
43 1 DQ = 1; //拉高总线
44 1 Delay(14);
45 1
46 1 x = DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
47 1 Delay(20);
48 1 }
49
50 /**********************************************************************************/
51 ReadOneChar(void)//读一个字节
52 {
53 1 unsigned char i = 0;
C51 COMPILER V7.50 1820 03/21/2006 21:36:06 PAGE 2
54 1 unsigned char dat = 0;
55 1
56 1 for (i = 8; i > 0; i--)
57 1 {
58 2 DQ = 0; // 给脉冲信号
59 2 dat >>= 1;
60 2 DQ = 1; // 给脉冲信号
61 2
62 2 if(DQ)
63 2 dat |= 0x80;
64 2 Delay(4);
65 2 }
66 1
67 1 return (dat);
68 1 }
69
70 /**********************************************************************************/
71 WriteOneChar(unsigned char dat)//写一个字节
72 {
73 1 unsigned char i = 0;
74 1 for (i = 8; i > 0; i--)
75 1 {
76 2 DQ = 0;
77 2 DQ = dat&0x01;
78 2 Delay(5);
79 2
80 2 DQ = 1;
81 2 dat>>=1;
82 2 }
83 1 }
84
85 /**********************************************************************************/
86 Read_Disp_Temperature(void)//读取并显示温度
87 {
88 1 unsigned int a = 0, b = 0, c = 0, t = 0;
89 1 float tt = 0;
90 1
91 1 Init_DS18B20();
92 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
93 1 WriteOneChar(0x44); // 启动温度转换
94 1
95 1 Init_DS18B20();
96 1 WriteOneChar(0xCC); //跳过读序号列号的操作
97 1 WriteOneChar(0xBE); //读取温度寄存器
98 1
99 1 a = ReadOneChar();
100 1 b = ReadOneChar();
101 1
102 1 t = b;
103 1 t <<= 8;
104 1 t = t | a;
105 1
106 1 tt = t * 0.0625;
107 1 t = tt * 10 + 0.5; //放大10倍输出并四舍五入
108 1
109 1 a = t / 100; //十位
110 1 b = t / 10 - a * 10; //个位
111 1 c = t - a * 100 - b * 10; //小数位
112 1
113 1 P0 = 0x4b; //显示"C"字符
114 1 P2 = 0xfd;
115 1 Delay(300);
C51 COMPILER V7.50 1820 03/21/2006 21:36:06 PAGE 3
116 1
117 1 P0 = LEDData1[c]; //显示小数位
118 1 P2 = 0xfb;
119 1 Delay(400);
120 1
121 1 P0 = LEDData2[b]; //显示个位
122 1 P2 = 0xfe;
123 1 Delay(400);
124 1
125 1 P0 = LEDData1[a]; //显示十位
126 1 P2 = 0xf7;
127 1 Delay(400);
128 1 }
129
130 /**********************************************************************************/
131 void main(void)
132 {
133 1 while(1)
134 1 {
135 2 Read_Disp_Temperature();
136 2 }
137 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 387 ----
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 + -