📄 wnl.lst
字号:
C51 COMPILER V8.08 WNL 05/22/2007 10:32:24 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE WNL
OBJECT MODULE PLACED IN wnl.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE wnl.c BROWSE DEBUG OBJECTEXTEND TABS(2)
line level source
1 #include <REGX51.H>
2
3 #include "display.h"
4 #include "1602.h"
5 #include "wnl.h"
*** ERROR C141 IN LINE 13 OF WNL.H: syntax error near 'mode', expected ')'
*** ERROR C141 IN LINE 14 OF WNL.H: syntax error near 'hr', expected ')'
*** ERROR C141 IN LINE 19 OF WNL.H: syntax error near 'year', expected ')'
*** ERROR C141 IN LINE 21 OF WNL.H: syntax error near 'hr', expected ')'
*** ERROR C129 IN LINE 23 OF WNL.H: missing ';' before 'ClkUpdateTime'
6 #include "delay.h"
7 #include "type.h"
8 #include "interupt.h"
9
10 extern uchar mode;
11
12 uchar ClkTickCtr; // 系统时钟计数器
13 uchar ClkHr; //小时计数器
14 uchar ClkMin; //分钟计数器
15 uchar ClkSec; //秒计数器
16
17
18 uchar ClkDay; //日期计数器
19 uchar ClkMonth; //月份计数器
20 uchar ClkYear; //年份计数器
21 uchar ClkDOW; //星期计数器
22
23 uchar Naozhong_Hr; //闹钟的小时
24 uchar Naozhong_Min; //闹钟的分钟
25
26 #define TICKS_PER_SEC 100 //每秒钟的节拍数,因为定计0溢出时间为10Ms,所以节拍为100
27
28 typedef struct clk_month
29 {
30 char MonthDays; // 每个月有多少天
31 UCHAR MonthVal; // 用来计算每月开始星期的参数
-
32 } CLK_MONTH;
33
34 static CLK_MONTH code ClkMonthTbl[] = // 天数、月份名、
35 {
36 {0 , 0},
37 {31, 6}, // 一月
38 {28, 2}, // 二月
39 {31, 2}, // 三月
40 {30, 5}, // 四月
41 {31, 0}, // 五月
42 {30, 3}, // 六月
43 {31, 5}, // 七月
44 {31, 1}, // 八月
45 {30, 4}, // 九月
46 {31, 6}, // 十月
47 {30, 2}, // 十一月
48 {31, 4} // 十二月
49 };
C51 COMPILER V8.08 WNL 05/22/2007 10:32:24 PAGE 2
50
51 static char code *ClkDOWTbl[] = { //星期
52 "Sun ",
53 "Mon ",
54 "Tue ",
55 "Wed ",
56 "Thu ",
57 "Fri ",
58 "Sat "
59 };
60
61
62
63
64
65 void Sys_clk_task (void) //时钟任务
66 {
67 if(++ClkTickCtr==TICKS_PER_SEC) //每秒检查
68 {
69 ClkTickCtr=0;
70 //(P3_4) = !(P3_4);
71 if (ClkUpdateTime() == TRUE) //检查时间变化
72 {
73 ClkUpdateDate(); //检查日期变化
74 }
75 }
76
77 }
78
79
80 //@@***********************************************************
81 //
82 // 功能: 系统时钟中断服务函数
83 // 函数: void Sys_tick_isr(void)
84 // 语言: C
85 //
86 //@@***********************************************************
87 //-------------------------------------------------------------
88 void Sys_tick_isr(void) interrupt 1 using 3 //定计0中断服务程序,使用第三组寄存器
89 {
90 TH0 = 0xD8 ; //TH0 TL0 要实现10ms的计时
91 TL0 = 0xF0 ;
92 Sys_clk_task();
93 }
94
95 //@@***********************************************************
96 //
97 // 功能: 系统定时器初始化
98 // 函数: void Vtimer_init(void)
99 // 语言: C
100 //@@***********************************************************
101 //-------------------------------------------------------------
102 void Init_sys_timer(void)
103 {
104 Sys_clk_init();
105 TCON=0x05; //外部中断下降沿触发,响应外部和定计溢出中断后硬件置1,CPU响应后硬件清0
106 //TCON定时器/计数器控制寄存器
107 //D7 D6 D5 D4 D3 D2 D1 D0
108 //TF1 TF0 IE1 IT1 IE0 IT0
109
110 TMOD&=0xF0; //清定时器0的工作方式
111 //TMOD定时器/计数器的方式控制寄存器
C51 COMPILER V8.08 WNL 05/22/2007 10:32:24 PAGE 3
112 //D7 D6 D5 D4 D3 D2 D1 D0
113 //GATE C/T M1 M0 | GATE C/T M1 M0
114 //----T/C 1---------|-------T/C 0------//
115
116 TMOD|=0x01; //工作方式为十六位定计器,需要重装载
117
118 TH0 = 0xD8 ; //TH0 TL0 要实现100ms的计时
119 TL0 = 0xF0 ;
120
121 EA=1; //全局中断开
122 EX0=1; //外部中断0开
123 EX1=1; //外部中断1开
124 ET0=1; //定计0允许中断
125 TR0=1; //启动定计0开始定时
126
127 }
128
129
130 void Sys_clk_init (void) //系统时钟、日期初始化
131 {
132 ClkTickCtr = 0;
133 Clk_set_time(14,50,0);
134 Clk_set_date(7,5,18);
135 Clk_set_naozhong(7,30);
136 }
137
138
139
140 void Clk_format_date (void) //日期格式检查子程序
141 {
142 uchar year = ClkYear;
143
144 real_date[0] = year / 10 + '0';
145 real_date[1] = year % 10 + '0';
146 real_date[2] = '-';
147 real_date[3] = ClkMonth / 10 + '0'; // Convert DATE to ASCII
148 real_date[4] = ClkMonth % 10 + '0';
149 real_date[5] = '-';
150 real_date[6] = ClkDay / 10 + '0';
151 real_date[7] = ClkDay % 10 + '0';
152 }
153
154
155 void Clk_format_time (uchar mode) //时间格式检查子程序
156 {
157 UCHAR hr;
158 switch (mode)
159 {
160 case 0: // 24小时制显示
161 real_time[0] = ClkHr / 10 + '0';
162 real_time[1] = ClkHr % 10 + '0';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -