📄 main.lst
字号:
C51 COMPILER V8.01 MAIN 07/14/2008 15:57:31 PAGE 1
C51 COMPILER V8.01, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\安装程序\keil_801\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /************DS18B20温度测量程序+ 红外线解码程序***********/
2 /*功能改进:对温度显示进行了削隐处理,例如:028.7C显示为 28.7C
3 还继承了上次的改进效果,0度以下或拔下传感器,显示00000
4 10s显示一次温度值,减小了处理器的负担;
5 */
6 /*问题:当传感器拔下时,最后一位,保留并不消隐*/
7 /****硬件平台:中山51单片机开发板,DS18B20单总线温度传感器***********/
8 /****硬件连接:P2_2接DQ(信号线2pin),电源3in,地1pin****************/
9 /****程序功能:显示实时温度,温度范围:0-125C,精度:0.1C************/
10 /****编程流程:初始化--写指令--读数据--数据处理--显示温度************/
11 #include <at89x52.h>
12 #include <DS18B20.h>
13 #include <display.h>
14 #include <IR.h>
15
16 unsigned int temperature,count;
17 bit TemperatureSign;
18
19 main()
20 {
21 1 TMOD=0x01;
22 1 TH0=0xd1; //晶振为11.0592MHz;定时为~13ms
23 1 TL0=0x33;
24 1 EA=1;
25 1 ET0=1;
26 1 TR0=1;
27 1 EX0=1; //允许外部中断0
28 1 IT0=1; //外部中断触发方式下降沿触发
29 1 temperature=0;
30 1 while(1)
31 1 {
32 2 /****************红外线操作************************/
33 2
34 2 P1=Decode;//把数据反码送给P1口
35 2 /****************10s读取一次温度*******************/
36 2 if(TemperatureSign==0) //10s到了吗,TemperatureSign=0有效
37 2 {
38 3 temperature=ReadTemperature();//此段程序不能放在定时器里面,因为此函数运行需要的时间比较长
39 3 TemperatureSign=1;
40 3 }
41 2
42 2 }
43 1 }
44 /********刷新显示,定时读取温度**********/
45 timer0() interrupt 1
46 {
47 1 TH0=0xd1; //晶振为11.0592MHz;定时为~13ms,刷新频率~75Hz;
48 1 TL0=0x33;
49 1 display(temperature); //显示温度
50 1 count++;
51 1 if(count>=769) //10s读一次数据,769*13ms=10s
52 1 {
53 2 TemperatureSign=0;
54 2 count=0;
55 2 }
C51 COMPILER V8.01 MAIN 07/14/2008 15:57:31 PAGE 2
56 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 653 ----
CONSTANT SIZE = 26 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
IDATA SIZE = 4 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -