📄 数字温度计.lst
字号:
C51 COMPILER V8.08 数譥蝊度计 07/24/2007 16:19:19 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE 数譥蝊度计
OBJECT MODULE PLACED IN 数字温度计.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 数字温度计.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2 #include "reg52.h"
3 #include "intrins.h"
4 #define Disdata P1
5 #define discan P3
6 #define uchar unsigned char
7 #define uint unsigned int
8 sbit DQ=P3^7;
9 sbit DIN=P1^7;
10 uint h;
11
12 uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
13 uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
14 uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7};
15 uchar data temp_data[2]={0x00,0x00};
16 uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
17
18 void delay(uint t)
19 {
20 1 for(;t>0;t--);
21 1 }
22
23 scan()
24 {
25 1 char k;
26 1 for(k=0;k<4;k++)
27 1 {
28 2 Disdata=dis_7[display[k]];
29 2 if(k==1){DIN=0;}
30 2 discan=scan_con[k];
31 2 delay(90);
32 2 discan=0xff;
33 2 }
34 1 }
35 ow_reset(void)
36 {
37 1 char presence=1;
38 1 while(presence)
39 1 {
40 2 while(presence)
41 2 {
42 3 DQ=1;_nop_();_nop_();
43 3 DQ=0;
44 3 delay(50);
45 3 DQ=1;
46 3 delay(6);
47 3 presence=DQ;
48 3 }
49 2 delay(45);
50 2 presence=~DQ;
51 2 }
52 1 DQ=1;
53 1 }
54
55 void write_byte(uchar val)
C51 COMPILER V8.08 数譥蝊度计 07/24/2007 16:19:19 PAGE 2
56 {
57 1 uchar i;
58 1 for(i=8;i>0;i--)
59 1 {
60 2 DQ=1;_nop_();_nop_();
61 2 DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
62 2 DQ=val&0x01;
63 2 delay(6);
64 2 val=val/2;
65 2 }
66 1 DQ=1;
67 1 delay(1);
68 1 }
69
70 uchar read_byte(void)
71 {
72 1 uchar i;
73 1 uchar value=0;
74 1 for(i=8;i>0;i--)
75 1 {
76 2 DQ=1;_nop_();_nop_();
77 2 value>>=1;
78 2 DQ=0;
79 2 _nop_();_nop_();_nop_();_nop_();
80 2 DQ=1;_nop_();_nop_();_nop_();_nop_();
81 2 if(DQ)value|=0x80;
82 2 delay(6);
83 2 }
84 1 DQ=1;
85 1 return(value);
86 1 }
87 //
88 read_temp()
89 {
90 1 ow_reset();
91 1 write_byte(0xcc);
92 1 write_byte(0xbe);
93 1 temp_data[0]=read_byte();
94 1 temp_data[1]=read_byte();
95 1 ow_reset();
96 1 write_byte(0xcc);
97 1 write_byte(0x44);
98 1 }
99
100 work_temp()
101 {
102 1 uchar n=0;
103 1 if(temp_data[1]>127)
104 1 {temp_data[1]=(256-temp_data[1]);
105 2 temp_data[0]=(256-temp_data[0]);n=1;}
106 1 display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];
107 1 display[4]=((temp_data[0]&0xf0) >> 4)|((temp_data[1]&0x0f)<<4);
108 1 display[3]=display[4] / 100;
109 1 display[1]=display[4] % 100;
110 1 display[2]=display[1] / 10;
111 1 display[1]=display[1] % 10;
112 1 if(!display[3]){display[3]=0x0a;if(!display[2]){display[2]=0x0a;}}
113 1 if(n){display[3]=0x0b;}
114 1 }
115 main()
116 {
117 1 Disdata=0xff;
C51 COMPILER V8.08 数譥蝊度计 07/24/2007 16:19:19 PAGE 3
118 1 discan=0xff;
119 1 for(h=0;h<4;h++){display[h]=8;}
120 1 ow_reset();
121 1 write_byte(0xcc);
122 1 write_byte(0x44);
123 1 for(h=0;h<500;h++)
124 1 {scan();}
125 1 while(1)
126 1 {
127 2 read_temp();
128 2 work_temp();
129 2 for(h=0;h<500;h++)
130 2 {scan();}
131 2 }
132 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 436 ----
CONSTANT SIZE = 32 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
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 + -