📄 drawing_line.lst
字号:
149 1 {
150 2 p=number+16*temp[i];
151 2 DisWord(i,1,1,p);
152 2 }
153 1 }
154
155 void display_date(void)
156 {
157 1 unsigned char i;
158 1 uchar *p;
159 1 if(year>2099) year=2099;
160 1 temp1[0]=year%100/10;
161 1 temp1[1]=year%10;
162 1 temp1[2]=11;
163 1 temp1[3]=month/10;
164 1 temp1[4]=month%10;
165 1 temp1[5]=11;
166 1 temp1[6]=day/10;
167 1 temp1[7]=day%10;
168 1 for(i=0;i<8;i++)
169 1 {
170 2 p=number+16*temp1[i];
171 2 DisWord(i,0,1,p);
172 2 }
173 1 }
174
175 /******************************** 表针显示 **********************************************************/
176
C51 COMPILER V8.02 DRAWING_LINE 08/04/2008 00:19:51 PAGE 4
177 void hand(uchar time,uchar lenth,uint angle,uchar draw) //表针
178 {
179 1 uchar dx,dy; // 每秒钟时,分,秒针都调一下,但是角度不同
180 1 unsigned int sec,temp,temp1; //
181 1
182 1 if(time==second) {sec=second;temp1=59;} // 某个时刻秒针指向的位置
183 1 if(time==minute&&second!=minute) {sec=minute*60+second,temp1=3599;}//分针指向的位置
184 1 if(time==hour&&second!=hour) {sec=(hour%12)*3600+minute*60+second;temp1=43199;}//时针
185 1
186 1 temp=sec-1;
187 1 if(temp>temp1) temp=temp1; //如果没有这句当second=0时sec会溢出,出错
188 1
189 1 dx=96+lenth*sin(3.14*temp/angle);
190 1 dy=32-lenth*cos(3.14*temp/angle);
191 1 DrawLine(96,32,dx,dy,Graphic_Clear);
192 1
193 1 dx=96+lenth*sin(3.14*sec/angle);
194 1 dy=32-lenth*cos(3.14*sec/angle);
195 1 DrawLine(96,32,dx,dy,draw);
196 1 }
197
198 /******************************** 判闰年 **********************************************************/
199
200 void leap_year(uchar x) //判段闰年
201 {
202 1 if((x%4==0&&x%100!=0)||x%400==0) mon[1]=29;
203 1 else mon[1]=28;
204 1 }
205
206 /******************************** 键扫子程序 **********************************************************/
207
208 void keyscan(void) // 键盘扫描
209 {
210 1 unsigned char keyvalue;
211 1 keyvalue=P1&0X07;
212 1 if(keyvalue!=0x07)
213 1 delay_us(50);
214 1 if(keyvalue!=0x07)
215 1 {
216 2 key=keyvalue;
217 2 flag=1;
218 2 }
219 1 else flag=0;
220 1 }
221
222 /******************************** 调试加子程序 **********************************************************/
223
224 unsigned int add(uint i,uint top,uint bottem) //调时间函数,按键则加一
225 {
226 1 if(add_flag)
227 1 {
228 2 i++;
229 2 if(i==top)
230 2 {
231 3 i=bottem;
232 3 }
233 2 }
234 1 add_flag=0;
235 1 return(i);
236 1 }
237
238 /******************************** 调试减子程序 **********************************************************/
C51 COMPILER V8.02 DRAWING_LINE 08/04/2008 00:19:51 PAGE 5
239
240 unsigned int sub(uint i,uint top,uint bottem) // 调时间函数,按键则减一
241 {
242 1 if(sub_flag)
243 1 {
244 2 i--;
245 2 if(i==bottem)
246 2 {
247 3 i=top;
248 3 }
249 2 }
250 1 sub_flag=0;
251 1 return(i);
252 1 }
253
254 /******************************** 判星期子程序 **********************************************************/
255
256 void week(uint x,uchar y,uchar z) //判断某一天是星期几
257 {
258 1 unsigned long temp; //我的方法是查出2000年1月1日是星期六
259 1 uint deta_day=0;
260 1 uchar i,k;
261 1 int j; //要求哪年哪天就把那天与2000年1月1日
262 1 uchar *p;
263 1 for(j=2000;j<=x;j++) //相隔的天数对7取余
264 1 {
265 2 if(j==x) k=y-1;
266 2 else k=12;
267 2 leap_year(j);
268 2 for(i=0;i<k;i++)
269 2 {deta_day+=mon[i];}
270 2 }
271 1 temp=deta_day+z-1;
272 1 weekday=temp%7;
273 1 p=xingqi+32*weekday;
274 1 DisWord(2,2,2,p);
275 1 }
276
277 /******************************** 键功能子程序 **********************************************************/
278
279 void keyprocess(void) // 键功能程序
280 {
281 1 keyscan();
282 1 while((P1&0X07)!=0x07); //判按键释放
283 1 switch(key)
284 1 {
285 2 case 0x06:
286 2 if(flag)
287 2 {
288 3 count++;
289 3 if(count==7)
290 3 count=0;
291 3 }
292 2 break;
293 2 case 0x05: // 加一键
294 2 if(flag)
295 2 {
296 3 if(count!=0) // 为一年加一,为二月加一以此类推
297 3 {
298 4 add_flag=1; // 加的标志
299 4 }
300 3 switch(count)
C51 COMPILER V8.02 DRAWING_LINE 08/04/2008 00:19:51 PAGE 6
301 3 {
302 4 case 1:TR0=0;year=add(year,2100,2000);display_date();week(year,month,day);break;
303 4 case 2:TR0=0;month=add(month,13,1);display_date();week(year,month,day);break;
304 4 case 3:TR0=0;leap_year(year);day=add(day,mon[month-1]+1,1);display_date();week(year,month,day);bre
-ak;
305 4 case 6:TR0=0;hand(second,26,30,Graphic_Clear);second=add(second,60,0);flag_sec=1;break; //加之前
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -