?? 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 + -