📄 tem_test.lst
字号:
C51 COMPILER V8.01 TEM_TEST 11/08/2008 14:53:07 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE TEM_TEST
OBJECT MODULE PLACED IN tem_test.OBJ
COMPILER INVOKED BY: C:\Program Files\keilc\C51\BIN\C51.EXE tem_test.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*----------------------------------www.ucdev.cn-----------------------------------------
2 ╔=======================================╗
3 ┆ ICE51-100开发板配套实验学习例程 ┆
4 ┆ Version 0.0.1 ┆
5 ┆ ┆
6 ┆ 艾斯电子 ┆
7 ┆ ┆
8 ┆ http://www.ucdev.cn ┆
9 ┆ E-mail:sales@ucdev.cn ┆
10 ╚=======================================╝
11 *********************************** 程序功能说明 *******************************************
12 数码管显示当前温度
13 ********************************************************************************************/
14
15 #include <reg52.h>
16 #define uchar unsigned char
17
18 sbit DQ =P3^7; //18B20数据线引脚
19
20 //数码管显示的段码表
21 //uchar code table[] ={0x84,0xBD,0xE0,0xB0,0x99,0x92,0x82,0xBC,0x80,0x90};
22 uchar code table[] ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
23 // 0 1 2 3 4 5 6 7 8 9
24 //uchar code table_d[]={0x04,0x3D,0x60,0x30,0x19,0x12,0x02,0x3C,0x00,0x10};
25 uchar code table_d[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
26 // 0 1 2 3 4 5 6 7 8 9
27
28 uchar dispbuf[4]; //显示缓冲区
29 uchar temper[2];//存放温度的数组
30
31 void seg_scan();
32
33 /*****************************延时函数**************************/
34
35 void delay (unsigned int us)
36 {
37 1 while(us--);
38 1 }
39
40 void reset(void) //复位
41 {
42 1 uchar x=0;
43 1 DQ = 1;
44 1 delay(8); //稍做延时
45 1 DQ = 0;
46 1 delay(80); //精确延时 大于 480us
47 1 DQ = 1; //拉高总线
48 1 delay(14);
49 1 x=DQ;
50 1 delay(20);
51 1 }
52 /**********************从DS18B20读一字节***************/
53 uchar readbyte(void) //读1字节
54 {
55 1 uchar i=0;
C51 COMPILER V8.01 TEM_TEST 11/08/2008 14:53:07 PAGE 2
56 1 uchar dat=0;
57 1 for (i=8;i>0;i--)
58 1 {
59 2 DQ = 0;
60 2 dat>>=1;
61 2 DQ = 1;
62 2 if(DQ)
63 2 dat|=0x80;
64 2 delay(4);
65 2 }
66 1 return(dat);
67 1 }
68 /***********************向DS18B20写一字节***********************/
69 void writebyte(unsigned char dat) //写1字节
70 {
71 1 uchar i=0;
72 1 for (i=8; i>0; i--)
73 1 {
74 2 DQ = 0;
75 2 DQ = dat&0x01;
76 2 delay(5);
77 2 DQ = 1;
78 2 dat>>=1;
79 2 }
80 1 delay(4);
81 1 }
82 /***********************CPU读取温度值***************************/
83 void readtemp(void) //读取温度
84 {
85 1 uchar a=0,b=0;
86 1 reset();
87 1
88 1 seg_scan();
89 1
90 1 writebyte(0xCC); // 跳过序列号
91 1 writebyte(0x44); // 启动温度转换
92 1 reset();
93 1
94 1 seg_scan();
95 1
96 1 writebyte(0xCC);
97 1 writebyte(0xBE); //读9个寄存器,前两个为温度
98 1
99 1 seg_scan();
100 1
101 1 a=readbyte(); //低位
102 1 b=readbyte(); //高位
103 1
104 1 seg_scan();
105 1
106 1 temper[0]=a&0x0f;
107 1 a=a>>4; //低位右移4位,舍弃小数部分
108 1 temper[1]=b<<4; //高位左移4位,舍弃符号位
109 1 temper[1]=temper[1]|a;
110 1 }
111
112 /******************************显示*************************/
113
114 void seg_scan()
115 {
116 1 int i,j=0xFE;
117 1 int dispdata;
C51 COMPILER V8.01 TEM_TEST 11/08/2008 14:53:07 PAGE 3
118 1 for(i=0;i<4;i++)
119 1 {
120 2 P2=j;
121 2 dispdata=dispbuf[i];
122 2 if(i==1)
123 2 P0=table_d[dispdata];
124 2 else
125 2 P0=table[dispdata];
126 2 delay(500);
127 2 j=(j<<1)|0x01;
128 2 if(j==0xEF)j=0xFE;
129 2 }
130 1 }
131
132 /*******************************主函数***********************/
133
134 main()
135 { uchar i;
136 1 uchar temp;
137 1 float backbit;
138 1 for(i=0;i<4;i++)
139 1 dispbuf[i] = 0;
140 1 while(1){
141 2 readtemp();//读18B20
142 2 backbit = temper[0];//换成浮点数
143 2 backbit = backbit * 6.25;//乘以0.0625*100
144 2 temp = backbit;//取低2位整数部分
145 2 dispbuf[3] = temp%10 ;
146 2
147 2 temp = temp/10;
148 2 dispbuf[2] = temp%10 ;
149 2
150 2 temp = temper[1];//取整数部分
151 2 dispbuf[1] = temp%10;
152 2
153 2 temp = temp/10;
154 2 dispbuf[0]= temp%10;
155 2
156 2 seg_scan(); //显示扫描
157 2 }
158 1 }
159
160 /********************************结束************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 381 ----
CONSTANT SIZE = 20 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 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 + -