📄 main.lst
字号:
C51 COMPILER V7.06 MAIN 05/11/2008 18:49:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE main.C BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*这是一个温度计的源代码,它能实时测量当前温度,并可以根据需要将一段时间的温度
2 数值保存下来温度数值通过LCD屏幕显示。它还包括一个时钟。用它可以定时测量温度值,
3 本温度计可用于大篷蔬菜的温度控制中,系统还可以通过需要可以扩展.下面位这一温度计
4 的源代码。*/
5
6 #include <config.h>
7
8 //外部函数
9 //-------------------delay.c--------------------------------
10 extern void delay(unsigned int delay_time); //延时子程序
11 //------------------LPH7366.c--------------------------------
12 #define COM 0 //指令
13 #define DAT 1 //数据
14 #define STR 1 //字符
15 extern void LPH7366_init(); //LPH7366初始化
16 extern void LPH7366_flash(unsigned int delay_time); //LPH7366闪屏函数
17 extern void LPH7366_write(unsigned char type,unsigned char in_data); //LPH7366写函数
18 extern void LPH7366_clr(); //显示屏幕清屏
19 extern void LPH7366_write_str(unsigned char line,unsigned char row,unsigned char str); //LPH7366任意写入字
-符函数
20 extern void LPH7366_write_han(unsigned char symbol_line,unsigned char symbol_row,unsigned char han); //任
-意写入汉字函数
21 extern void LPH7366_write_doc(unsigned char symbol_line,unsigned char symbol_row,unsigned char doc); //任
-意写入一个字节函数
22 extern void data_tick(unsigned char i_data); //数据拆分函数
23 extern unsigned char row(unsigned char stye,unsigned char i); //计算屏幕的列地址 类型
24 extern unsigned char ge,shi; //数据拆分
25 extern bit data_flag; //是否动态显示数据标志位 0:不动态 1:动态
26 //------------------------time.c--------------------------------
27 extern void time_init(); //时间初始化
28 extern struct time
29 {
30 unsigned char hour;
31 unsigned char minute;
32 unsigned char second;
33 }local_time,alarm_time,temp_time;
34 extern bit second_flag; //秒信号标志
35 //------------------------温度图.c------------------------------
36 extern void pic_temp(); //温度主画面
37 extern void pic_temp_face_move(); //脸部表情选择
38 extern unsigned char face_flag; //人脸表情标志位 1:笑脸 2:闭嘴 3:苦恼 4:讲话 5:伤心 6:惊讶 7:沉默
39 //-------------DS18B20.C-------------------
40 extern void DS18B20_init(); //DS18B20初始化
41 extern void DS18B20_send(unsigned char in_data); //DS18B20发送数据
42 extern void ReadTemperature(); //DS18B20读取温度转换好的数据
43 extern void temp_data_turn(float in_data); //DS18B20读取温度转换
44 extern bit T_sign; //温度正负符号
45 extern float temp; //转换好的温度数值
46 extern unsigned char t_bai,t_shi,t_ge,t_feng; //温度转换好的各个位
47 extern signed char temp_TH,temp_TL; //温度上下限
48 //------------DS18B20控制命令-----------------------------
49 #define T_CONVER 0x44 //开始温度转换
50 #define T_CONFIG 0x5f //11位转换
51 #define T_READ 0xbe //读暂存器
52 #define T_WRITE 0x4e //写暂存器
C51 COMPILER V7.06 MAIN 05/11/2008 18:49:25 PAGE 2
53 #define T_ROM_JMP 0xcc //忽略64ROM地址
54 #define T_COPY_E2 0x48 //将温度上下限数值写到E2ROM
55 #define T_RECALL_E2 0xb8 //将E2中存储的温度上下限数值复制到上下限寄存器中。
56 #define T_cont 0.0625 //温度转换常数
57 //---------------keyB.c---------------------------
58 extern key_main(); //主键盘
59 //------------------------------------------------
60 //内部函数
61 void time_move(); //时间部分动画
62 void temp_move(); //温度部分动画
63 void temp_display(); //温度显示
64 void temp_bar_move(); //温度条部分动画
65 void data_clr(); //行33-58清零函数
66 void tick_time_temp(); //检查设置参数
67 bit sign_cross=0; //正负符号交叉标志位
68 bit ring_flag=1; //闹铃
69 unsigned char alarm_tick_time=0; //警报对比次数
70 sbit LED=P1^5;
71 sbit SPK=P1^6;
72 unsigned char temp_bar[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; //温度条显示
73
74
75 /****************************主函数**************************/
76 /*函数原型:void main()
77 /*函数功能:程序起始
78 /*输入参数:无
79 /*输出参数:无
80 /*调用模块:LPH7366_init(),LPH7366_clr(),time_init(),pic_temp(),LPH7366_write_str(),LPH7366_write_han(),LPH
-7366_write_doc()
81 pic_temp_face_move(),time_move(),temp_bar_move(),key_main()
82 /*建立时间:2005/11/16
83 /*作者:丁霄
84 /************************************************************/
85 void main()
86 {
87 1 LPH7366_init(); //显示屏幕初始化
88 1 LPH7366_clr(); //屏幕白屏
89 1 time_init(); //定时器0初始化
90 1
91 1 pic_temp(); //温度主画面
92 1
93 1 LPH7366_write_str(1,4,'D'); //设计标题 DX Temp
94 1 LPH7366_write_str(1,5,'X');
95 1 LPH7366_write_str(1,6,' ');
96 1 LPH7366_write_str(1,7,'T');
97 1 LPH7366_write_str(1,8,'e');
98 1 LPH7366_write_str(1,9,'m');
99 1 LPH7366_write_str(1,10,'p');
100 1
101 1 LPH7366_write_han(2,1,0); //显示 气温: C
102 1 LPH7366_write_han(2,2,1);
103 1 LPH7366_write_doc(4,25,0x36); //:
104 1 LPH7366_write_doc(4,26,0x36);
105 1
106 1 time_init(); //定时器0初始化
107 1
108 1 while(1) //温度图动画部分
109 1 {
110 2 data_flag=1; //动画显示 影响LPH7366_write_str()函数
111 2
112 2 pic_temp_face_move(); //人脸表情
113 2
C51 COMPILER V7.06 MAIN 05/11/2008 18:49:25 PAGE 3
114 2 time_move(); //时间部分动画
115 2
116 2 temp_move(); //温度部分动画
117 2
118 2 temp_bar_move(); //温度条部分动画
119 2
120 2 key_main(); //主键盘
121 2
122 2 tick_time_temp(); //查询各个参数是否到了设定数值
123 2
124 2 if(temp_TL<temp&&temp<temp_TH) //室温在正常范围内
125 2 {
126 3 LED=1;
127 3 face_flag=1; //笑脸
128 3 }
129 2 }
130 1 }
131
132 /***********************时间部分动画函数*********************/
133 /*函数原型:void time_move()
134 /*函数功能:时间部分动画
135 /*输入参数:无
136 /*输出参数:无
137 /*调用模块:data_tick(),LPH7366_write_str()
138 /*建立时间:2005/11/16
139 /*作者:丁霄
140 /************************************************************/
141 void time_move()
142 {
143 1 data_tick(local_time.hour);
144 1 LPH7366_write_str(6,1,(shi+16));
145 1 LPH7366_write_str(6,2,(ge+16));
146 1
147 1 if(second_flag==1)
148 1 LPH7366_write_str(6,3,26); //:
149 1 else
150 1 LPH7366_write_str(6,3,0); //
151 1
152 1 data_tick(local_time.minute);
153 1 LPH7366_write_str(6,4,(shi+16));
154 1 LPH7366_write_str(6,5,(ge+16));
155 1
156 1 if(second_flag==1)
157 1 LPH7366_write_str(6,6,26); //:
158 1 else
159 1 LPH7366_write_str(6,6,0); //
160 1
161 1 data_tick(local_time.second);
162 1 LPH7366_write_str(6,7,(shi+16));
163 1 LPH7366_write_str(6,8,(ge+16));
164 1
165 1 if(ring_flag==1)
166 1 {
167 2 LPH7366_write_str(6,9,0x00); //显示空格
168 2 LPH7366_write_str(6,10,10); //显示* 闹铃标志
169 2 }
170 1 else
171 1 {
172 2 LPH7366_write_str(6,9,0x00); //显示空格
173 2 LPH7366_write_str(6,10,0); //显示空格
174 2 }
175 1
C51 COMPILER V7.06 MAIN 05/11/2008 18:49:25 PAGE 4
176 1 }
177
178 /****************************温度部分动画函数*****************/
179 /*函数原型:void temp_move()
180 /*函数功能:温度部分动画
181 /*输入参数:无
182 /*输出参数:无
183 /*调用模块:ReadTemperature(),temp_data_turn(),temp_display()
184 /*建立时间:2005/11/16
185 /*作者:丁霄
186 /************************************************************/
187 void temp_move()
188 {
189 1 data_flag=1; //动态显示
190 1
191 1 ReadTemperature(); //读温度
192 1
193 1 temp_data_turn(temp); //转换温度数值
194 1
195 1 temp_display();
196 1 }
197
198 /**************************温度显示函数**********************/
199 /*函数原型:void temp_move()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -