?? tempc.lst
字號:
C51 COMPILER V7.06 TEMPC 04/13/2005 22:38:51 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE TEMPC
OBJECT MODULE PLACED IN tempc.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE tempc.c ROM(SMALL) BROWSE DEBUG OBJECTEXTEND CODE LISTINCLUDE SYMBOLS SRC(.
-\tempc.SRC)
stmt level source
1 #include <reg51.h>
1 =1 /*--------------------------------------------------------------------------
2 =1 REG51.H
3 =1
4 =1 Header file for generic 80C51 and 80C31 microcontroller.
5 =1 Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
6 =1 All rights reserved.
7 =1 --------------------------------------------------------------------------*/
8 =1
9 =1 #ifndef __REG51_H__
10 =1 #define __REG51_H__
11 =1
12 =1 /* BYTE Register */
13 =1 sfr P0 = 0x80;
14 =1 sfr P1 = 0x90;
15 =1 sfr P2 = 0xA0;
16 =1 sfr P3 = 0xB0;
17 =1 sfr PSW = 0xD0;
18 =1 sfr ACC = 0xE0;
19 =1 sfr B = 0xF0;
20 =1 sfr SP = 0x81;
21 =1 sfr DPL = 0x82;
22 =1 sfr DPH = 0x83;
23 =1 sfr PCON = 0x87;
24 =1 sfr TCON = 0x88;
25 =1 sfr TMOD = 0x89;
26 =1 sfr TL0 = 0x8A;
27 =1 sfr TL1 = 0x8B;
28 =1 sfr TH0 = 0x8C;
29 =1 sfr TH1 = 0x8D;
30 =1 sfr IE = 0xA8;
31 =1 sfr IP = 0xB8;
32 =1 sfr SCON = 0x98;
33 =1 sfr SBUF = 0x99;
34 =1
35 =1
36 =1 /* BIT Register */
37 =1 /* PSW */
38 =1 sbit CY = 0xD7;
39 =1 sbit AC = 0xD6;
40 =1 sbit F0 = 0xD5;
41 =1 sbit RS1 = 0xD4;
42 =1 sbit RS0 = 0xD3;
43 =1 sbit OV = 0xD2;
44 =1 sbit P = 0xD0;
45 =1
46 =1 /* TCON */
47 =1 sbit TF1 = 0x8F;
48 =1 sbit TR1 = 0x8E;
49 =1 sbit TF0 = 0x8D;
50 =1 sbit TR0 = 0x8C;
51 =1 sbit IE1 = 0x8B;
52 =1 sbit IT1 = 0x8A;
53 =1 sbit IE0 = 0x89;
C51 COMPILER V7.06 TEMPC 04/13/2005 22:38:51 PAGE 2
54 =1 sbit IT0 = 0x88;
55 =1
56 =1 /* IE */
57 =1 sbit EA = 0xAF;
58 =1 sbit ES = 0xAC;
59 =1 sbit ET1 = 0xAB;
60 =1 sbit EX1 = 0xAA;
61 =1 sbit ET0 = 0xA9;
62 =1 sbit EX0 = 0xA8;
63 =1
64 =1 /* IP */
65 =1 sbit PS = 0xBC;
66 =1 sbit PT1 = 0xBB;
67 =1 sbit PX1 = 0xBA;
68 =1 sbit PT0 = 0xB9;
69 =1 sbit PX0 = 0xB8;
70 =1
71 =1 /* P3 */
72 =1 sbit RD = 0xB7;
73 =1 sbit WR = 0xB6;
74 =1 sbit T1 = 0xB5;
75 =1 sbit T0 = 0xB4;
76 =1 sbit INT1 = 0xB3;
77 =1 sbit INT0 = 0xB2;
78 =1 sbit TXD = 0xB1;
79 =1 sbit RXD = 0xB0;
80 =1
81 =1 /* SCON */
82 =1 sbit SM0 = 0x9F;
83 =1 sbit SM1 = 0x9E;
84 =1 sbit SM2 = 0x9D;
85 =1 sbit REN = 0x9C;
86 =1 sbit TB8 = 0x9B;
87 =1 sbit RB8 = 0x9A;
88 =1 sbit TI = 0x99;
89 =1 sbit RI = 0x98;
90 =1
91 =1 #endif
2 #include <intrins.h>
1 =1 /*--------------------------------------------------------------------------
2 =1 INTRINS.H
3 =1
4 =1 Intrinsic functions for C51.
5 =1 Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
6 =1 All rights reserved.
7 =1 --------------------------------------------------------------------------*/
8 =1
9 =1 #ifndef __INTRINS_H__
10 =1 #define __INTRINS_H__
11 =1
12 =1 extern void _nop_ (void);
13 =1 extern bit _testbit_ (bit);
14 =1 extern unsigned char _cror_ (unsigned char, unsigned char);
15 =1 extern unsigned int _iror_ (unsigned int, unsigned char);
16 =1 extern unsigned long _lror_ (unsigned long, unsigned char);
17 =1 extern unsigned char _crol_ (unsigned char, unsigned char);
18 =1 extern unsigned int _irol_ (unsigned int, unsigned char);
19 =1 extern unsigned long _lrol_ (unsigned long, unsigned char);
20 =1 extern unsigned char _chkfloat_(float);
21 =1
22 =1 #endif
23 =1
C51 COMPILER V7.06 TEMPC 04/13/2005 22:38:51 PAGE 3
3
4 sbit P3_0=P3^0;
5 sbit P3_1=P3^1;
6 sbit P3_2=P3^2;
7 sbit P3_3= P3^3;
8 sbit P3_4= P3^4;
9 sbit P3_5= P3^5;
10 sbit P3_6= P3^6;
11 sbit P3_7= P3^7;
12
13 #define LEDPort P1 //LED控制口
14 #define LEDf P3_0 //LEDf
15 #define LED1 P3_1 //LED1
16 #define LED2 P3_2 //LED2
17 #define LED3 P3_3 //LED3
18 #define LED4 P3_4 //LED4
19 #define Key_jd P3_5 //上調溫度
20 #define TMPort P3_7 //DS1820 DataPort
21
22
23 unsigned char code LEDDis[]={0x5f,0x06,0x3b,0x2f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9的LED筆劃,0xFF為空,0
-xF7為負號
24
25 static unsigned char bdata StateREG; //可位尋址的狀態寄存器
26 sbit DS18B20ON = StateREG^0; //DS1820是否存在
27 sbit SetTF = StateREG^1; //是否是在溫度設置狀態
28
29 static signed char LED_f,LED_1,LED_2,LED_3,LED_4; //LED的顯示位 LED_One為十位,LED_Two為個位
30 static signed char L_1,L_2,L_3,L_4,L_5; //LED的顯示位 LED_One為十位,LED_Two為個位
31 static unsigned char Sign; //負號標識
32 static unsigned char sign_jd; //精度標識
33 static unsigned char KeyV,TempKeyV; //鍵值
34
35 static unsigned char bdata TLV _at_ 0x0029; //溫度變量高低位
36 static unsigned char bdata THV _at_ 0x0028;
37 static signed char TMV; //轉換后的溫度值
38 static signed char TM; //轉換后的溫度值
39 static signed int wd; //轉換后的溫度值
40 static signed int zd; //轉換后的溫度值
41
42 void Delay_10ms(void);
43 void InitDS1820(void);
44 void ROMDS1820(void);
45 void TMVDS1820(void);
46 void Delay_510(void);
47 void TMRDS1820(void);
48 void ReadDS1820(void);
49 void V2ToV(void);
50 void Delay_110(void);
51
52
53
54 void main(void)
55 {
56 1 THV = 0;
57 1 TLV = 0;
58 1 TMV = 0;
59 1 TM=0;
60 1 KeyV = 0;
61 1 TempKeyV = 0;
62 1 zd=50;
63 1
C51 COMPILER V7.06 TEMPC 04/13/2005 22:38:51 PAGE 4
64 1 InitDS1820(); //初始化
65 1 ROMDS1820(); //跳過ROM
66 1 TMRDS1820(); //讀出溫度指令
67 1 ReadDS1820(); //讀出溫度值和上限值
68 1
69 1 EA = 1; //允許CPU中斷
70 1 ET0 = 1; //定時器0中斷打開
71 1 TMOD = 0x1; //設定時器0為模式1,16位模式
72 1 TH0=0xB1;
73 1 TL0=0xDF; //設定時值為20000us(20ms)
74 1 TR0 = 1; //開始定時
75 1 while(1);
76 1 }
77
78 //定時器0中斷外理中鍵掃描和顯示
79 void KeyAndDis_Time0(void) interrupt 1 using 2
80 {
81 1 TH0=0xb1;
82 1 TL0=0xDF; //設定時值為20000us(20ms)
83 1 Key_jd=1;
84 1 LEDPort = 0x00;
85 1 zd++;
86 1 if (zd>50)
87 1 {
88 2 if (!Key_jd)
89 2 KeyV = 1;
90 2
91 2 if (KeyV != 0) //有鍵按下
92 2 {
93 3 Delay_10ms(); //延時防抖 按下10ms再測
94 3 if (!Key_jd)
95 3 TempKeyV = 1;
96 3 if (KeyV == TempKeyV) //兩次值相等為確定接下了鍵
97 3 {
98 4 sign_jd=!sign_jd;
99 4 zd=0;
100 4 }
101 3 }
102 2 }
103 1 KeyV = 0;
104 1 TempKeyV = 0; //清空變量準備下次鍵掃描
105 1
106 1 if (DS18B20ON)
107 1 {
108 2 InitDS1820(); //初始化
109 2 ROMDS1820(); //跳過ROM
110 2 TMVDS1820(); //溫度轉換指令
111 2
112 2 Delay_510();
113 2 Delay_510(); //延時等待轉換完成
114 2
115 2 InitDS1820(); //初始化
116 2 ROMDS1820(); //跳過ROM
117 2 TMRDS1820(); //讀出溫度指令
118 2 ReadDS1820(); //讀出溫度值
119 2 V2ToV();
120 2 if (LED_f==1)//轉換顯示值
121 2 LEDf=0;
122 2 else
123 2 LEDf=1;
124 2 LEDPort = ~LED_1;
125 2 LED1 = 0;
C51 COMPILER V7.06 TEMPC 04/13/2005 22:38:51 PAGE 5
126 2 Delay_510();
127 2 Delay_510();
128 2 LED1 = 1; //顯示百位數
129 2 LEDPort = ~LED_2;
130 2 LED2 = 0;
131 2 Delay_510();
132 2 Delay_510();
133 2 LED2 = 1; //顯示百位數
134 2 LEDPort = ~LED_3;
135 2 LED3 = 0;
136 2 Delay_510();
137 2 Delay_510();
138 2 LED3 = 1; //顯示百位數
139 2 LEDPort = ~LED_4;
140 2 LED4 = 0;
141 2 Delay_510();
142 2 Delay_510();
143 2 LED4 = 1; //顯示百位數
144 2
145 2 }
146 1 }
147
148
149
150
151
152 void V2ToV(void) //數值轉換
153 {
154 1 TM=TLV<<4;
155 1 TLV = TLV >> 4;
156 1 THV = THV << 4; //讀出的高低位數值移位
157 1 TMV = TLV | THV; //合并高低位放入TM為實際溫度值
158 1 Sign = 0;
159 1 Sign = TMV >> 7;
160 1 if (Sign)
161 1 {
162 2 L_1= (~(TMV-1)) / 100; //轉換百位值
163 2 L_2= ((~(TMV-1)) - L_1 * 100)/10;
164 2 L_3 = (~(TMV-1)) - L_1 * 100 - L_2 * 10;
165 2 }
166 1 else
167 1 {
168 2 L_1= (TMV) / 100; //轉換百位值
169 2 L_2= (TMV - L_1 * 100)/10;
170 2 L_3 = TMV - L_1 * 100 - L_2 * 10;
171 2 }
172 1 if (Sign)
173 1 {
174 2 TM=~(TM-1);
175 2 LED_f=1;
176 2 }
177 1 else
178 1 {
179 2
180 2 LED_f=0;
181 2 }
182 1 wd=0;
183 1 if (TM & 0x80){wd=wd+5000;}
184 1 if (TM & 0x40){wd=wd+2500;}
185 1 if (TM & 0x20){wd=wd+1250;}
186 1 if (TM & 0x10){wd=wd+625;}
187 1 L_4=wd/1000;
C51 COMPILER V7.06 TEMPC 04/13/2005 22:38:51 PAGE 6
188 1 L_5=(wd-L_4*1000)/100;
189 1 if (sign_jd)
190 1 {
191 2 LED_1=LEDDis[L_2];
192 2 LED_2=LEDDis[L_3]|0x80;
193 2 LED_3=LEDDis[L_4];
194 2 LED_4=LEDDis[L_5];
195 2 }
196 1 else
197 1 {
198 2 LED_1=LEDDis[L_1];
199 2 LED_2=LEDDis[L_2];
200 2 LED_3=LEDDis[L_3]|0x80;
201 2 LED_4=LEDDis[L_4];
202 2 }
203 1 }
204
205
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -