?? 溫度計.lst
字號:
C51 COMPILER V8.08 蝊度計 07/23/2008 16:59:22 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 蝊度計
OBJECT MODULE PLACED IN 溫度計.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 溫度計.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include <reg52.h>
3 #define uchar unsigned char
4 #define uint unsigned int
5 sbit DQ=P3^0;
6 uchar flag1;
7 uchar tempL=0;
8 uchar tempH=0;
9 uint tt;
10 float temperature;
11 unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
12 uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
13 uchar code scan_con[4]={0x01,0x02,0x04,0x08};
14 uchar data Dis_play[4]={0X00,0x00,0x00,0x00};
15
16 void delay(uint i)
17 {
18 1 while(i--);
19 1 }
20 Init_DS18B20(void)
21 {
22 1 uchar x=0;
23 1 DQ = 1; //DQ復位
24 1 delay(8);
25 1 DQ = 0; //單片機將DQ拉低
26 1 delay(80); //精確延時 大于 480us
27 1 DQ = 1;
28 1 delay(14);
29 1 x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗
30 1 delay(20);
31 1 }
32
33
34 // 讀字節子函數
35
36 ReadOneChar(void)
37 {
38 1 uchar i = 0;
39 1 uchar dat = 0;
40 1 for (i=8;i>0;i--)
41 1 {
42 2 DQ = 0;
43 2 dat>>=1; // 數據右移一位
44 2 DQ = 1;
45 2 if(DQ) // DQ為1
46 2 dat|=0x80; // 讀出數據
47 2 delay(4);
48 2 }
49 1 return(dat);
50 1 }
51
52 // 寫字節子函數
53
54 WriteOneChar(unsigned char dat)
55 {
C51 COMPILER V8.08 蝊度計 07/23/2008 16:59:22 PAGE 2
56 1 uchar i = 0;
57 1 for (i=8; i>0; i--)
58 1 {
59 2 DQ = 0;
60 2 DQ = dat&0x01; //寫入一位數據
61 2 delay(5);
62 2 DQ = 1;
63 2 dat>>=1;
64 2 }
65 1 }
66
67
68 // 發送溫度轉換命令
69 ReadTemperature(void)
70
71 {
72 1 Init_DS18B20();
73 1 WriteOneChar(0xcc);
74 1 WriteOneChar(0x44); //啟動溫度轉換
75 1 delay(125);
76 1 Init_DS18B20();
77 1 WriteOneChar(0xcc); //跳過讀序列號的操作
78 1 WriteOneChar(0xbe); //讀溫度寄存器(頭兩個值分別為溫度的低位和高位)
79 1 tempL=ReadOneChar();
80 1 tempH=ReadOneChar();
81 1 if(tempH>0xfd)
82 1 {
83 2 flag1=1;
84 2 temperature=(65536-((tempH*256)+tempL))*0.0625;
85 2 tt=temperature*10+0.5;
86 2 delay(200);
87 2 return(tt);
88 2 }
89 1 else
90 1 {
91 2 temperature=((tempH*256)+tempL)*0.0625;
92 2 tt=temperature*10+0.5;
93 2 delay(200);
94 2 return(tt);
95 2 }
96 1 }
97 void tem_deal(uint tem)
98
99 {
100 1 Dis_play[0]=0xff;
101 1 Dis_play[0]=tem/1000;
102 1 Dis_play[1]=tem/100%10;
103 1 Dis_play[2]=tem%100/10;
104 1 Dis_play[3]=tem%10;
105 1
106 1 if(!Dis_play[0])
107 1 {
108 2 Dis_play[0]=0x0a;
109 2 if(!Dis_play[1])
110 2 {
111 3 Dis_play[1]=0x0a;
112 3 }
113 2 }
114 1 if(flag1)
115 1 {
116 2 Dis_play[0]=0x0b;
117 2 }
C51 COMPILER V8.08 蝊度計 07/23/2008 16:59:22 PAGE 3
118 1 }
119
120 void display()
121 {
122 1 char k;
123 1 for(k=0;k<4;k++)
124 1 {
125 2 if (k==2)
126 2 {
127 3 P2=scan_con[k];
128 3 P0=table1[Dis_play[k]];
129 3 }
130 2 else
131 2 {
132 3 P2=scan_con[k];
133 3 P0=table[Dis_play[k]];
134 3 }
135 2 delay(500);
136 2 }
137 1 }
138
139
140
141 void main()
142 {
143 1 do
144 1 {
145 2 flag1=0;
146 2 tem_deal(ReadTemperature());
147 2 display();
148 2 }
149 1 while(1);
150 1 }
151
152
153
154
155
156
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 461 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 13 ----
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 + -