📄 task.lst.svn-base
字号:
C51 COMPILER V8.08 TASK 09/06/2012 18:00:01 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE TASK
OBJECT MODULE PLACED IN task.OBJ
COMPILER INVOKED BY: D:\Program Files\keil_51\C51\BIN\C51.EXE task.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "NEW_8051.H"
2 #include"task.h"
3 #include <intrins.h>
4 #include"sbit.h"
5 //#include " uart.h"
6 /*****************************************************
7 4字LED点阵屏+DS1302万年历电子钟 C 程序
8
9 *******************************************************
10
11 DS1302 接线图
12
13 Vcc2 CLK I/O /RST
14
15 | | | |
16 -------------------
17 | 8 7 6 5 |
18 | DS1302 |
19 | |
20 | 1 2 3 4 |
21 -------------------
22 | | | |
23 VCC1 GND
24
25 1 脚接+5V 2,3脚32768HZ晶振 4脚接地 5脚接S51的P02 6脚接S51的P01 7接S51的P00
26 8脚接后备电源,可以接老计算机主板上的3.6V电池,也可以通过二级管隔离接一个大容量电解电容
27 电压在2.5V以上即可维持
28
29
30 595连级输出数据,138行驱动。*/
31
32 uchar Move; //时间温度变量
33 uchar Speed;
34 uchar Flicker;
35 uchar line;
36 uint zimuo;
37 uchar ucLastSec;
38 bit c_moon;
39 bit ri;
40 bit r;
41 bit zz=0;
42 bit rr;
43 bit nn;
44 bit w;
45 bit Can=1;
46 void start(void)
47 {
48 1 Move=0;
49 1 // E=0; //595使能
50 1 zimuo=0;
51 1 //IP=0x04; //设置优先级 外部中断1为优先级
52 1 TMOD=0x21; //定时器1 0
53 1 TH1=0x00; //定时50us 晶振18.432M 定时器1方式1 16位模式初始化
54 1 TL1=0x00;
55 1 ET1=1;
C51 COMPILER V8.08 TASK 09/06/2012 18:00:01 PAGE 2
56 1 //TR1=1;
57 1 TH0 = 0x92; //18.432M 18.2ms
58 1 TL0 = 0x0CD;
59 1 ET0=1;
60 1 TR0=1;
61 1 //外部中断
62 1 IT0=1; //下降沿触发中断
63 1 EX0=1; //开外中断1
64 1 // RCAP2H = 0x7D;
65 1 // RCAP2L = 0x0CB;
66 1 // ET2 = 1;
67 1 // TR2=1;
68 1 CMOD = 0x80;
69 1 CL = 0;
70 1 CH = 0;
71 1 CCON = 0x00; //清中断标志
72 1 CCAPM0 = 0x49;
73 1 CCAP0H = 0x0E2;
74 1 CCAP0L = 0x00;
75 1 CCAPM0 = 0x49; //设置PCA0为16位定时器,允许PCA模块0中断
76 1
77 1 CR = 1;
78 1 EA=1;
79 1 ri=1;
80 1 r=1;
81 1 zz=0;
82 1 rr=1;
83 1 P1M0=0X1C;
84 1 P1M1=0X00;
85 1 //P3M0=0X18;
86 1 //P3M0=0X00;
87 1 }
88 /*主函数*/
89 void main()
90 {
91 1 start();
92 1 while(1) //重复(无限)循环显示
93 1 {
94 2 if(irokk==1)
95 2 {
96 3 Ircordpro();
97 3 irokk=0;
98 3 }
99 2
100 2 if((resget==0)||(IRcord[0]==0x4a))
101 2 {
102 3 DelayMs();
103 3 if((resget==0)||(IRcord[0]==0x4a))
104 3 {
105 4 Set1302(starts_time); //初始化
106 4 W1302(0x8e,0x00); //控制命令,WP=0,写操作
107 4 W1302(0x90,0xa5); //打开充电二级管 一个二级管串联一个2K电阻
108 4 IRcord[0]=0x00;
109 4 }
110 3 }
111 2 /************************/
112 2 du1302(); //读取 秒 分 时 日 月 星期 年
113 2 if((Hour==0)&&(Cent==0)&&(Sec==48)&&(Can==1)&&( AddTime ))
114 2 {
115 3 Sec=Sec/16*10+Sec%16;
116 3 AddTime=AddTime/16*10+AddTime%16;
117 3 if( !UpdateMode )
C51 COMPILER V8.08 TASK 09/06/2012 18:00:01 PAGE 3
118 3 {
119 4 AddTime=AddTime+Sec;
120 4 }
121 3 else
122 3 {
123 4 AddTime=Sec-AddTime;
124 4 Can=0;
125 4 }
126 3 W1302(0x8e,0x00);
127 3 W1302(0x80,AddTime/10*16+AddTime%10);
128 3 W1302(0x8e,0x80);
129 3 }
130 2
131 2 if((Hour==0)&&(Cent==1))
132 2 {
133 3 Can=1;
134 3 }
135 2 /****************************/
136 2 if(Sec!=ucLastSec)
137 2 {
138 3 ucLastSec=Sec;
139 3 w=~w;
140 3 }
141 2 c_sun=0;
142 2 //y=R1302(0x8c+1)/16*10+R1302(0x8c+1)%16 ;
143 2 nian_sun=Year;
144 2 // y=R1302(0x88+1)/16*10+R1302(0x88+1)%16 ;
145 2 yue_sun=Month;
146 2 // y=R1302(0x86+1)/16*10+R1302(0x86+1)%16 ;
147 2 ri_sun=Day;
148 2 Conver_xingqi(c_sun,nian_sun,yue_sun,ri_sun); //农历星期转换
149 2 Conversion(c_sun,nian_sun,yue_sun,ri_sun); //农历转换
150 2 zimuo=0;
151 2 if ((key_moda==0)||(IRcord[0]==0x15)) //设置和选择项目键
152 2 {
153 3 DelayMs();
154 3 if((key_moda==0)||(IRcord[0]==0x15))
155 3 {
156 4 if(id++==12)
157 4 {
158 5 id=0;
159 5 }
160 4 ha=0;
161 4 msec=0; //清闪烁标志
162 4 while((key_moda==0)||(IRcord[0]==0x15))
163 4 {
164 5 Show_word();
165 5 IRcord[0]=0x00;
166 5 }
167 4 }
168 3
169 3 }
170 2 if(id!=0)
171 2 {
172 3 if ((key_up==0)||(IRcord[0]==0x40)) //增加
173 3 {
174 4 DelayMs();
175 4 if((key_up==0)||(IRcord[0]==0x40))
176 4 {
177 5 while((key_up==0)||(IRcord[0]==0x40))
178 5 {
179 6 Show_word();
C51 COMPILER V8.08 TASK 09/06/2012 18:00:01 PAGE 4
180 6 IRcord[0]=0x00;
181 6 } //调用显示
182 5 ha=0;
183 5 msec=0; //清闪烁标志
184 5 Set(id,0);
185 5 //调用时间调调整
186 5 }
187 4
188 4 }
189 3
190 3 if ((key_Down==0)||(IRcord[0]==0x19)) //减少
191 3 {
192 4 DelayMs();
193 4 if((key_Down==0)||(IRcord[0]==0x19))
194 4 {
195 5 while((key_Down==0)||(IRcord[0]==0x19))
196 5 {
197 6 Show_word();
198 6 IRcord[0]=0x00;
199 6 } //调用显示
200 5 ha=0;
201 5 msec=0; //清闪烁标志
202 5 Set(id,1); //调用时间调调整
203 5 }
204 4
205 4 }
206 3 }
207 2 else
208 2 {
209 3 if ((key_up==0)||(IRcord[0]==0x40)) //增加
210 3 {
211 4 DelayMs();
212 4 if((key_up==0)||(IRcord[0]==0x40))
213 4 {
214 5 while((key_up==0)||(IRcord[0]==0x40))
215 5 {
216 6 Show_word();
217 6 IRcord[0]=0x00;
218 6 } //调用显示
219 5 ha=0;
220 5 msec=0; //清闪烁标志
221 5 if(b!=0) //手动调整显示的内容
222 5 {
223 6 if(f++==6) //f为显示转换标志
224 6 f=0;
225 6 }
226 5 }
227 4
228 4 }
229 3 }
230 2 //------------------------
231 2 if (nn==1) //调用温湿度读取子程序
232 2 {
233 3 RH();
234 3 }
235 2 //串口显示程序
236 2 //--------------------------
237 2 Show_word(); //待机显示按三秒间隔分别显示年、月日、星期、时分秒。
238 2 IRcord[0]=0x00;
239 2
240 2
241 2 }
C51 COMPILER V8.08 TASK 09/06/2012 18:00:01 PAGE 5
242 1 }
243 /****************************************************************************/
244 void timer_0(void) interrupt 1 //中断入口,闪烁
245 {
246 1
247 1 TH0 = 0x92; //18.432M 18.2ms
248 1 TL0 = 0x0CD;
249 1 zz=1;
250 1 TR0=0;
251 1
252 1 }
253 /******************************************************************/
254 void PCA_interrupt(void) interrupt 7 //PCA0引起此中断
255 {
256 1
257 1 if(CCF0)
258 1 {
259 2 CCF0 = 0;
260 2 if(msec++==18)//1s
261 2 {
262 3 msec=0;
263 3 if(mm++==3)
264 3 {
265 4 nn=1;
266 4 }
267 3 x++;
268 3 if(x>=a)
269 3 {
270 4 x=0;
271 4 if(b==0) //自动模式
272 4 {
273 5 if(f++==6)
274 5 f=0; //f显示转换计数器 ,d为用户设置的自动转换时间的值。
275 5 }
276 4 }
277 3 if(ha++==10) //5秒后进入正常走时。
278 3 {
279 4 id=0;
280 4 ha=0;
281 4 }
282 3 }
283 2 if(msec<10)
284 2 Flicker=0; //闪烁标志反转
285 2 else
286 2 Flicker=1;
287 2
288 2 }
289 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 653 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 7 ----
IDATA SIZE = ---- ----
BIT SIZE = 8 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -