📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND TABS(3)
line level source
1 /*********************************************************/
2 /*主要设计者: */
3 /*完成日期:2010年5月15日 */
4 /*********************************************************/
5 #include <reg52.h>
6
7 #include "12864.h"
*** WARNING C275 IN LINE 587 OF 12864.H: expression with possibly no effect
*** WARNING C275 IN LINE 607 OF 12864.H: expression with possibly no effect
*** WARNING C275 IN LINE 627 OF 12864.H: expression with possibly no effect
*** WARNING C275 IN LINE 647 OF 12864.H: expression with possibly no effect
8 #include "model.h"
9 #include "ds1302.h"
10 #include "one-wire.h"
11 #include "lunar.h"
12 #include "input_080627.h"
13 //#include "yinli.h"
14
15 #define uchar unsigned char
16 #define uint unsigned int
17
18 #define NoUpLine 1
19 #define UpLine 0
20 #define NoUnderLine 1
21 #define UnderLine 0
22
23 #define FALSE 0
24 #define TRUE 1
25
26
27 uchar bdata gTmp;
28 sbit t0 = gTmp^0;
29 sbit t1 = gTmp^1;
30 sbit t2 = gTmp^2;
31 sbit t3 = gTmp^3;
32 sbit t4 = gTmp^4;
33 sbit t5 = gTmp^5;
34 sbit t6 = gTmp^6;
35 sbit t7 = gTmp^7;
36
37
38 uchar dispBuf[7];
39 uchar T0_Count=0,Tmp_Count=0;
40 bit T0_Flag,Tmp_Flag,Flash_Flag;
41
42 SYSTIME sys; //系统日期
43 SPDATE SpDat; //农历日期
44
45 //设置时间的标志
46 bit Hour_Flag=TRUE,Min_Flag=TRUE,Sec_Flag=TRUE;
47 bit Year_Flag=TRUE,Mon_Flag=TRUE,Day_Flag=TRUE;
48
49 uchar State_Set=0; //设置状态 (用来区分此时是在设置时,分,秒,日,月,年)
50
51 bit State_Flag=FALSE,Inc_Flag=FALSE,Dec_Flag=FALSE; //用来标志三个按键是否按下。
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 2
52
53 uchar code Mon2[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,
54 0,31,29,31,30,31,30,31,31,30,31,30,31};
55
56 /***********************************************************
57 cDat: 要显示的数
58 X: 行数 0~7
59 Y: 列数 0~127
60 show_flag: 是否反白显示,0反白,1不反白
61 upline: 上划线, 0表示带上划线
62 underline: 下划线, 0表示带下划线
63 返回: 无
64 ************************************************************/
65 void LCD_ShowTime(char cDat,uchar X,uchar Y,bit show_flag,bit up,bit under)
66 {
67 1 uchar s[2];
68 1 s[0]=cDat/10+'0';
69 1 s[1]=cDat%10+'0';
70 1 en_disp(X,Y,2,Asc,s,show_flag,up,under);
71 1 }
72
73 /***********************************************************
74 // 函数名: Show_YMD()
75 // 入口参数: void
76 // 出口参数: void
77 // 功能: 显示公历与农历的年、月、日、星期
78 // 说明: 普通模式每天刷新一次
79 // 设置模式每次循环刷新一次
80
81 ***********************************************************/
82 void Show_YMD() //显示年月日星期
83 {
84 1 uchar uiTempDat;
85 1 uiTempDat=RDS1302(0x88|0x01);
86 1 sys.cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);
87 1 LCD_ShowTime(sys.cMon,2,5,Mon_Flag,NoUpLine,NoUnderLine); //月
88 1 hz_disp(4,5,1,uMod[1],1,NoUpLine,NoUnderLine);
89 1 Show16X32(2,27,ucNum3216[sys.cDay/10],Day_Flag);
90 1 Show16X32(2,43,ucNum3216[sys.cDay%10],Day_Flag); //年
91 1
92 1 /////////////////////////////////////////////////////////////////////
93 1
94 1 hz_disp(6,8,2,ucLunar[13],1,UpLine,UnderLine);
95 1 if(sys.cWeek==7)
96 1 hz_disp(6,40,1,uMod[2],1,UpLine,UnderLine); //星期日
97 1 else
98 1 hz_disp(6,40,1,ucLunar[sys.cWeek],1,UpLine,UnderLine); //星期
99 1
100 1 /////////////////////////////////////////////////////////////////////
101 1
102 1 LCD_ShowTime(20,0,9,1,UpLine,UnderLine);
103 1 LCD_ShowTime(sys.cYear,0,25,Year_Flag,UpLine,UnderLine);
104 1 hz_disp(0,41,1,uMod[0],1,UpLine,UnderLine); //年
105 1
106 1
107 1 ////////////////////////////////////////////////////
108 1
109 1 SpDat=GetSpringDay(sys.cYear,sys.cMon,sys.cDay); //得到农历日期
110 1
111 1 //显示农历日期
112 1 if(SpDat.cMon==1) //农历月
113 1 hz_disp(4,64,1,ucLunar[15],1,UpLine,NoUnderLine); //"正"
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 3
114 1 else if(SpDat.cMon==11)
115 1 hz_disp(4,64,1,ucLunar[16],1,UpLine,NoUnderLine); //"冬"
116 1 else if(SpDat.cMon==12)
117 1 hz_disp(4,64,1,ucLunar[17],1,UpLine,NoUnderLine); //"腊"
118 1 else
119 1 hz_disp(4,63,1,ucLunar[SpDat.cMon],1,UpLine,NoUnderLine); //"二"~"十"
120 1
121 1
122 1
123 1 if(SpDat.cDay/10==1 && SpDat.cDay%10>0) //显示"十" 例如"十四"而不是"一四"
124 1 hz_disp(4,95,1,ucLunar[10],1,UpLine,NoUnderLine);
125 1 else if(SpDat.cDay/10==2 && SpDat.cDay%10>0) //显示"廿" 例如"廿三"而不是"二四"
126 1 hz_disp(4,95,1,ucLunar[19],1,UpLine,NoUnderLine);
127 1 else
128 1 hz_disp(4,95,1,ucLunar[SpDat.cDay/10],1,UpLine,NoUnderLine); //正常显示数字
129 1
130 1 if(!(SpDat.cDay%10)) // //"十"
131 1 hz_disp(4,111,1,ucLunar[10],1,UpLine,NoUnderLine);
132 1 else //正常数字
133 1 hz_disp(4,111,1,ucLunar[SpDat.cDay%10],1,UpLine,NoUnderLine);
134 1
135 1 ////////////////////////////////////////////////////
136 1 //显示生肖
137 1 hz_disp(0,104,1,SX[(uint)(2000+SpDat.cYear)%12],1,UpLine,UnderLine); //生肖
138 1
139 1 ////////////////////////////////////////////////////
140 1 //显示天干地支
141 1 hz_disp(2,95,1,TianGan[(uint)(2000+SpDat.cYear)%10],1,NoUpLine,NoUnderLine); //天干
142 1 hz_disp(2,111,1,DiZhi[(uint)(2000+SpDat.cYear)%12],1,NoUpLine,NoUnderLine); //地支
143 1
144 1 }
145
146 /**************************************************************
147 // 函数名: LCD_ShowTemp()
148 // 入口参数: void
149 // 出口参数: void
150 // 功能: 采集温度并显示
151 // 说明: 30秒更新一次
152
153 ***************************************************************/
154 void LCD_ShowTemp()
155 {
156 1 uchar datTm[2];
157 1
158 1 float temp;
159 1 uchar buftmp;
160 1
161 1
162 1 if(!Tmp_Flag) return;
163 1 Tmp_Flag=FALSE;
164 1
165 1 DS18B20_Init();
166 1 DS18B20_RomCmd(0xcc); //Skip Rom command;
167 1 Delay_Xms(20);
168 1 DS18B20_MemCmd(0x44); //Convert T command;
169 1
170 1 DS18B20_Init();
171 1 DS18B20_RomCmd(0xcc);
172 1 DS18B20_MemCmd(0xbe);
173 1 DS18B20_ReadDat(2,datTm);
174 1
175 1 gTmp = datTm[0];
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 4
176 1 temp = (uchar)t0 * 0.0625 + (uchar)t1 * 0.125 + (uchar)(t2) * 0.25 + (uchar)(t3) * 0.5;
177 1 buftmp = (uchar)(temp*10);
178 1 dispBuf[2] = '.';
179 1 dispBuf[3] = buftmp + '0';
180 1
181 1 buftmp = (uchar)t4 + (uchar)t5*2 + (uchar)t6*4 + (uchar)t7*8;
182 1 gTmp = datTm[1];
183 1 gTmp &= 0x07;
184 1 buftmp += (gTmp * 16);
185 1 dispBuf[0] = (buftmp/10) + '0';
186 1 dispBuf[1] = (buftmp%10) + '0';
187 1
188 1 dispBuf[4] = 0xdf; //摄氏度;
189 1 dispBuf[2] = 'C';
190 1 en_disp(0,65,2,Asc,dispBuf,1,UpLine,UnderLine);
191 1 }
192
193
194 /***********************************************************
195 // 函数名: LCD_ShowWNL()
196 // 入口参数: void
197 // 出口参数: void
198 // 功能: 显示万年历
199 // 说明:
200
201 ***********************************************************/
202 void LCD_ShowWNL()
203 {
204 1
205 1
206 1 LCD_ShowTime(sys.cSec,6,111,Sec_Flag,UpLine,UnderLine); //秒 每次循环钟刷新一次
207 1
208 1 if(!sys.cSec || State_Set) //分 在普通模式时每分钟刷新一次
209 1 LCD_ShowTime(sys.cMin,6,87,Min_Flag,UpLine,UnderLine); // 在设置模式时每次循环刷新一次
210 1
211 1 if(!sys.cSec && !sys.cMin || State_Set) //时 在普通模式时每小时刷新一次
212 1 LCD_ShowTime(sys.cHour,6,63,Hour_Flag,UpLine,UnderLine); // 在设置模式时每次循环刷新一次
213 1
214 1 if(!sys.cSec && !sys.cMin && !sys.cHour || State_Set ) //公历农历的年、月、日、星期
215 1 { //普通模式每天刷新一次
216 2 Show_YMD(); //设置模式每次循环刷新一次
217 2 if(State_Set==7) State_Set=0;
218 2 }
219 1 }
220
221 /***********************************************************
222 // 函数名: CAL_Init()
223 // 入口参数: void
224 // 出口参数: void
225 // 功能: 日期初始化
226 // 说明: 星期通过计算得到
227
228 ***********************************************************/
229 void CAL_Init()
230 {
231 1 sys.cYear=0x09;
232 1 sys.cMon=0x05;
233 1 sys.cDay=0x05;
234 1 sys.cHour=0x10;
235 1 sys.cMin=0x27;
236 1 sys.cSec=0x00;
237 1 sys.cWeek=GetWeekDay(sys.cYear,sys.cMon,sys.cDay);
C51 COMPILER V8.02 MAIN 11/03/2010 22:45:22 PAGE 5
238 1 }
239
240
241 /***********************************************************
242 // 函数名: SFR_Init()
243 // 入口参数: void
244 // 出口参数: void
245 // 功能: 寄存器初始化
246 // 说明: 定时器0控制温度采集,定时器1控制按键扫描
247
248 ***********************************************************/
249 void SFR_Init()
250 {
251 1 T0_Flag=FALSE;
252 1 Tmp_Flag=TRUE;
253 1 Flash_Flag=FALSE;
254 1 TMOD=0x11;
255 1 ET0=1;
256 1 ET1=1;
257 1 TH0= (-50000)/256;
258 1 TL0= (-50000)%256;
259 1 TH1= (-10000)/256;
260 1 TL1= (-10000)%256;
261 1 EA=1;
262 1 }
263
264 /***********************************************************
265 // 函数名: GUI_Init()
266 // 入口参数: void
267 // 出口参数: void
268 // 功能: 图形界面初始化
269 // 说明: 一些永远不耍更新的图形(如线条,"年"、"月"、"日"等)
270 只是在初始化时写入,中间过程不再更新。
271
272 ***********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -