📄 time.lst
字号:
C51 COMPILER V8.02 TIME 03/14/2009 10:38:56 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE TIME
OBJECT MODULE PLACED IN time.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE time.c OPTIMIZE(0,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"1602.h"
2 #include"sd2000.h"
3
4 #define uint unsigned int
5 #define uchar unsigned char
6
7 extern unsigned char date[7]; //日期数组
8 /*date[0]=year,date[1]=month,date[2]=day,date[3]=week,
9 date[4]=hour,date[5]=minute,date[6]=second*/
10
11
12 //定义时间变量
13 uchar time_ms,time_s,time_m,time_h,time_w,time_d,time_mo,time_y;
14 //毫秒时间、秒、分、时,周,日,月,年等时间变量
15 bit flag_s,flag_m,flag_h; //每秒、每分、每时的标志
16
17 uchar flag_sy[11]; //闹钟的声音种类
18 uchar flag_sw[11]; //闹钟允许标志 //10组闹钟,第10个用来贪睡功能
19 uchar alarm[11][2]; //闹钟数组
20 bit flag_alarm; //闹钟标志
21
22
23 bit flag_op;//进入操作界面标志
24
25 uchar num_op; //界面操作数,00为闹钟0,01为闹钟1,08为闹钟8,09为闹钟9,0a为正常时钟
26 uchar num_fsn;//组时分闹的操作数。00为组,01为时,02为分,03为闹多久,04为闹钟声音种类;
27
28
29 uchar key_temp; //按键临时变量
30
31 bit flag_flag_s;//秒钟闪动标志
32
33 uchar at;
34
35
36 void delay(uint time) //24M晶振 1ms
37 {
38 1 uint i,j;
39 1 for(i=0;i<time;i++)
40 1 {
41 2 j=215;
42 2 while(j--);
43 2 }
44 1 }
45 static void TransmitInterrupt (void)
46 {
47 1 TI=0;
48 1 }
49
50 static void ReceiveInterrupt (void)
51 {
52 1 RI=0;
53 1 }
54
55 //串口中断处理程序
C51 COMPILER V8.02 TIME 03/14/2009 10:38:56 PAGE 2
56 void com_isr(void) interrupt 4 using 1
57 {
58 1 EA=0;
59 1 if (RI) ReceiveInterrupt ();
60 1 if (TI) TransmitInterrupt ();
61 1 EA=1;
62 1 }
63 //////////////////////////////////////////////////////////
64 //SD2000每分钟中断//
65 void SD2000_isr(void) interrupt 3 using 3
66 {
67 1 flag_m=1; //标志
68 1 }
69
70
71 //定时中断处理程序
72 void t0_isr(void) interrupt 1 using 2
73 {
74 1 TH0=0x3C; //
75 1 TL0=0xB8;
76 1 time_ms++;
77 1 if(time_ms==20) //0.5秒
78 1 { time_ms=0;
79 2 time_s++;
80 2 flag_s=1;
81 2 }//end if(time_ms==20)
82 1 }
83 ////////////////////////////////////////////////////////////////
84 main()
85 {
86 1 uchar ii;
87 1
88 1 TMOD=0x21; //T0为方式1的16位定器数,T1为方式2的波特率发生器
89 1 TH0=0x3C; //
90 1 TL0=0xB8; //24M晶振的25ms定时为0x3CB0 8为修正
91 1
92 1 TH1=0xCC; //
93 1 TL1=0xCC; //24M晶振的的1200B
94 1
95 1 SCON=0xd0; //串口方式3
96 1 IE=0x92; //开串口T0
97 1
98 1 TR0=1;
99 1 TR1=1;
100 1
101 1 time_ms=0;
102 1 time_s=0;
103 1 time_m=58;
104 1 time_h=23;
105 1
106 1
107 1 flag_s=0;
108 1 flag_m=0;
109 1 flag_h=0;
110 1 flag_alarm=0;
111 1 flag_op=0;
112 1
113 1 num_op=0;
114 1 num_fsn=0;
115 1
116 1 for(ii=0;ii<12;ii++)
117 1 {
C51 COMPILER V8.02 TIME 03/14/2009 10:38:56 PAGE 3
118 2 alarm[ii][0]=0;
119 2 flag_sw[ii]=0;
120 2 flag_sy[ii]=0;
121 2 }
122 1
123 1 for(ii=0;ii<12;ii++)
124 1 {
125 2 alarm[ii][1]=0;
126 2 }
127 1
128 1
129 1
130 1 inst_lcd(); //初始化LCD
131 1
132 1
133 1
134 1 disp(0,0,time_h); //时钟显示
135 1 dispchar(2,0,0x3a); //冒号显示
136 1 disp(3,0,time_m); //分钟显示
137 1 //////////////////////////////////////////////////////////////////////////////
138 1
139 1 I2CWriteStatus(); //写SD2000状态寄存器
140 1 I2CWriteTime(); //写SD2000时间寄存器
141 1
142 1
143 1 I2CReadDate();//读入实时数据
144 1 disp_bcd(6,0,date[0]);//年显示
145 1 dispchar(8,0,0x2e); //间隔号“小点”显示
146 1 disp_bcd(9,0,date[1]);//月显示
147 1 dispchar(11,0,0x2e); //间隔号“小点”显示
148 1 disp_bcd(12,0,date[2]);//日显示
149 1 dispchar(14,0,0x2e); //间隔号“小点”显示
150 1 dispchar(15,0,0x30|date[3]); //星期显示
151 1
152 1
153 1
154 1 while(1)
155 1 {
156 2 if(flag_s) //秒钟闪动显示程序
157 2 {
158 3 flag_s=0;
159 3 if(flag_flag_s)
160 3 {
161 4 dispchar(2,0,0x3a);
162 4 flag_flag_s=0;
163 4 }
164 3 else
165 3 {
166 4 dispchar(2,0,0x20);
167 4 flag_flag_s=1;
168 4 }
169 3
170 3 if(flag_op) //进入操作界面后闪动操作的数组
171 3 {
172 4 switch(num_fsn)
173 4 {
174 5 case 0 :
175 5 {
176 6 dispchar(0,1,0x20);
177 6 delay(100);
178 6 }break;
179 5
C51 COMPILER V8.02 TIME 03/14/2009 10:38:56 PAGE 4
180 5 case 1 :
181 5 {
182 6 dispchar(1,1,0x20);
183 6 dispchar(2,1,0x20);
184 6 delay(50);
185 6 } break;
186 5
187 5 case 2:
188 5 {
189 6 dispchar(4,1,0x20);
190 6 dispchar(5,1,0x20);
191 6 delay(50);
192 6 }break;
193 5
194 5 case 3:
195 5 {
196 6 dispchar(6,1,0x20);
197 6 delay(100);
198 6 } break;
199 5 case 4:
200 5 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -