📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 04/15/2009 22:04:17 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.C BROWSE DEBUG OBJECTEXTEND
line 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 V8.05a MAIN 04/15/2009 22:04:17 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 /************************************************************/
83 void main()
84 {
85 1 LPH7366_init(); //显示屏幕初始化
86 1 LPH7366_clr(); //屏幕白屏
87 1 time_init(); //定时器0初始化
88 1
89 1 pic_temp(); //温度主画面
90 1
91 1 LPH7366_write_str(1,4,'D'); //设计标题 DX Temp
92 1 LPH7366_write_str(1,5,'X');
93 1 LPH7366_write_str(1,6,' ');
94 1 LPH7366_write_str(1,7,'T');
95 1 LPH7366_write_str(1,8,'e');
96 1 LPH7366_write_str(1,9,'m');
97 1 LPH7366_write_str(1,10,'p');
98 1
99 1 LPH7366_write_han(2,1,0); //显示 气温: C
100 1 LPH7366_write_han(2,2,1);
101 1 LPH7366_write_doc(4,25,0x36); //:
102 1 LPH7366_write_doc(4,26,0x36);
103 1
104 1 time_init(); //定时器0初始化
105 1
106 1 while(1) //温度图动画部分
107 1 {
108 2 data_flag=1; //动画显示 影响LPH7366_write_str()函数
109 2
110 2 pic_temp_face_move(); //人脸表情
111 2
112 2 time_move(); //时间部分动画
113 2
C51 COMPILER V8.05a MAIN 04/15/2009 22:04:17 PAGE 3
114 2 temp_move(); //温度部分动画
115 2
116 2 temp_bar_move(); //温度条部分动画
117 2
118 2 key_main(); //主键盘
119 2
120 2 tick_time_temp(); //查询各个参数是否到了设定数值
121 2
122 2 if(temp_TL<temp&&temp<temp_TH) //室温在正常范围内
123 2 {
124 3 LED=1;
125 3 face_flag=1; //笑脸
126 3 }
127 2 }
128 1 }
129
130 /***********************时间部分动画函数*********************/
131 /*函数原型:void time_move()
132 /*函数功能:时间部分动画
133 /*输入参数:无
134 /*输出参数:无
135 /*调用模块:data_tick(),LPH7366_write_str()
136
137 /************************************************************/
138 void time_move()
139 {
140 1 data_tick(local_time.hour);
141 1 LPH7366_write_str(6,1,(shi+16));
142 1 LPH7366_write_str(6,2,(ge+16));
143 1
144 1 if(second_flag==1)
145 1 LPH7366_write_str(6,3,26); //:
146 1 else
147 1 LPH7366_write_str(6,3,0); //
148 1
149 1 data_tick(local_time.minute);
150 1 LPH7366_write_str(6,4,(shi+16));
151 1 LPH7366_write_str(6,5,(ge+16));
152 1
153 1 if(second_flag==1)
154 1 LPH7366_write_str(6,6,26); //:
155 1 else
156 1 LPH7366_write_str(6,6,0); //
157 1
158 1 data_tick(local_time.second);
159 1 LPH7366_write_str(6,7,(shi+16));
160 1 LPH7366_write_str(6,8,(ge+16));
161 1
162 1 if(ring_flag==1)
163 1 {
164 2 LPH7366_write_str(6,9,0x00); //显示空格
165 2 LPH7366_write_str(6,10,10); //显示* 闹铃标志
166 2 }
167 1 else
168 1 {
169 2 LPH7366_write_str(6,9,0x00); //显示空格
170 2 LPH7366_write_str(6,10,0); //显示空格
171 2 }
172 1
173 1 }
174
175 /****************************温度部分动画函数*****************/
C51 COMPILER V8.05a MAIN 04/15/2009 22:04:17 PAGE 4
176 /*函数原型:void temp_move()
177 /*函数功能:温度部分动画
178 /*输入参数:无
179 /*输出参数:无
180 /*调用模块:ReadTemperature(),temp_data_turn(),temp_display()
181
182 /************************************************************/
183 void temp_move()
184 {
185 1 data_flag=1; //动态显示
186 1
187 1 ReadTemperature(); //读温度
188 1
189 1 temp_data_turn(temp); //转换温度数值
190 1
191 1 temp_display();
192 1 }
193
194 /**************************温度显示函数**********************/
195 /*函数原型:void temp_move()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -