📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 08/07/2007 23:36:31 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE source\main.c BROWSE INCDIR(.\include) DEBUG OBJECTEXTEND PRINT(.\main.lst)
- OBJECT(main.obj)
line level source
1 //*************************************************************************************************
2 //*************************************************************************************************
3 //**<程序名>:数字时钟。 **
4 //**<功能>:可以显示时实时间,同时可以用按键进行设置。 **
5 //**<版本说明>:这是第1.2版。 **
6 //**<作者>:程沛 **
7 //**<完成时间>:2007年8月7日 **
8 //**<联系方式>:superyongzhe@163.com **
9 //*************************************************************************************************
10 //*************************************************************************************************
11 #include "includes.h"
12
13
14 #define TIME1H 0x3C
15 #define TIME1L 0xB0 //定时器1溢出时间:50ms
16
17 #define SCANPORT P2 //4×4键盘扫描端口,低4位是行线,高4位是列线。
18
19
20 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
21 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
22 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
23 bit b_KeyShock=0; //键盘防抖动标志位。
24 //当按键中断产生时,首先判断此位。
25 //0--执行键盘扫描及键码处理程序;1--不执行。
26
27 bit b_KillShock=0; //防抖标志清除位:0--不清除;1--清除。
28
29 unsigned char uc_KillCount=1; //抖动标志清除计数,使用定时器1。
30
31
32 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
33 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<键盘扫描开启标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
34 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
35 bit b_KeyScan=0; //0--不扫描;
36 //1--扫描。
37
38 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
39 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<LCD定时刷新时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
40 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
41 TIME stCurrentTime; //存储从DS1302获取的时间,以及显示字符串。
42
43 bit b_TimeRefresh=0; //定时刷新标志。
44
45 unsigned char uc_TimeRefresh=0; //定时刷新计数。
46
47
48
49 void main()
50 {
51 1
52 1 vdInitialize(); //初始化LCD。
53 1
54 1 vDSInitialize(); //初始化DS1302。
C51 COMPILER V8.05a MAIN 08/07/2007 23:36:31 PAGE 2
55 1
56 1 SCANPORT=0x0F; //初始化键盘。
57 1
58 1 vWriteCMD(0x81);
59 1 vShowChar("Date:");
60 1 vWriteCMD(0xC1);
61 1 vShowChar("Time:");
62 1
63 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
64 1 IT0=1; // 中断方式:下降沿。
65 1 EX0=1; // 开启外部中断。
66 1
67 1
68 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于防抖动标志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
69 1 TH1=TIME1H;
70 1 TL1=TIME1L;
71 1 TR1=1; //开启定时器1
72 1 ET1=1; //开定时器1中断
73 1
74 1
75 1 EA=1;
76 1
77 1
78 1
79 1 while(1)
80 1 {
81 2 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
82 2 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<LCD定时刷新时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
83 2 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
84 2 if(b_TimeRefresh==1) //没900ms执行1次,刷新LCD时间显示。
85 2 {
86 3 b_TimeRefresh=0; //恢复标志。
87 3 vDSGetTime(&stCurrentTime); //获取当前时间并将其存入指定数组。
88 3
89 3 vDateString(&stCurrentTime); //生成日期字符串。
90 3 vTimeString(&stCurrentTime); //生成时间字符串。
91 3
92 3 vWriteCMD(0x86); //向LCD写入当前时间。
93 3 vShowChar(stCurrentTime.ucaDateString);
94 3 vWriteCMD(0xC6);
95 3 vShowChar(stCurrentTime.ucaTimeString);
96 3 }
97 2
98 2 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
99 2 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<键盘扫描及键码处理>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
100 2 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
101 2 if(b_KeyScan==1) //如果有按键按下,则进行按键扫描和键码处理。
102 2 {
103 3 b_KeyScan=0;
104 3 vKeyProcess(ucKeyScan());
105 3 }
106 2 }
107 1 }
108
109 //*************************************************************************************************
110 //* *
111 //* ******************************外部中断0,用于开启键盘扫描及键码处理****************** *
112 //* *
113 //*************************************************************************************************
114 void vINT0(void) interrupt 0
115 {
116 1 if(b_KeyShock==0)
C51 COMPILER V8.05a MAIN 08/07/2007 23:36:31 PAGE 3
117 1 {
118 2 b_KeyScan=1; //开启键盘扫描标志。
119 2 b_KeyShock=1; //设置防抖动标志。
120 2 }
121 1 else b_KeyShock=0; //如果有抖动则不执行键扫描,恢复防抖动标志。
122 1
123 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
124 1 if(b_KeyShock==1)
125 1 b_KillShock=1; //如果防抖动标志位开启则开启防抖动标志清除位,
126 1 //300ms后清除防抖动标志。
127 1
128 1 }
129
130
131 //*************************************************************************************************
132 //* *
133 //* ****************定时器1中断,用于计时功能和防抖动标志清除以及显示报告**************** *
134 //* *
135 //*************************************************************************************************
136 void vTimer1(void) interrupt 3
137 {
138 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
139 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
140 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
141 1 if(b_KillShock==1)
142 1 {
143 2 if(uc_KillCount==16) //当防抖动标志位为1时,计时300ms后清除抖动标志位。
144 2 {
145 3 b_KeyShock=0;
146 3 b_KillShock=0;
147 3 uc_KillCount=1;
148 3 }
149 2 else uc_KillCount++;
150 2 }
151 1
152 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
153 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<LCD定时刷新时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
154 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
155 1 if(uc_TimeRefresh==18) //900ms刷新显示1次。
156 1 {
157 2 b_TimeRefresh=1;
158 2 uc_TimeRefresh=0;
159 2 }
160 1 else
161 1 uc_TimeRefresh++;
162 1
163 1
164 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
165 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复定时器1溢出时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
166 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
167 1 TH1=TIME1H;
168 1 TL1=TIME1L;
169 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 203 ----
CONSTANT SIZE = 12 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 27 ----
IDATA SIZE = ---- ----
C51 COMPILER V8.05a MAIN 08/07/2007 23:36:31 PAGE 4
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -