📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 08/08/2007 10:18:49 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 sources\main.c BROWSE INCDIR(.\include;.\include) DEBUG OBJECTEXTEND PRINT(
-.\main.lst) OBJECT(main.obj)
line level source
1 //*************************************************************************************************
2 //*************************************************************************************************
3 //**<程序名>:LCD显示应用 **
4 //**<功能>:LCD显示滚动的一句话,以及键盘输入。 **
5 //**<版本说明>:这是第5.2版,在5.1版的基础上做了小小的修改,在字母输入法下可以连续不断的循环改变 **
6 //** 3个字母,重复按键计数最大值由3变为255。 **
7 //**<作者>:程沛 **
8 //**<完成时间>:2007年8月8日 **
9 //**<联系方式>:superyongzhe@163.com **
10 //*************************************************************************************************
11 //*************************************************************************************************
12
13 //*************************************************************************************************
14 //* *
15 //* ******************************头文件及宏定义************************** *
16 //* *
17 //*************************************************************************************************
18 #include "includes.h"
19
20 #define TIME1H 0x3C
21 #define TIME1L 0xB0 //定时器1溢出时间:50ms
22
23
24 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
25 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
26 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
27 bit b_KeyShock=0; //键盘防抖动标志位。
28 //当按键中断产生时,首先判断此位。
29 //0--执行键盘扫描及键码处理程序;1--不执行。
30
31 bit b_KillShock=0; //防抖标志清除位:0--不清除;1--清除。
32
33 unsigned char uc_KillCount=1; //抖动标志清除计数,使用定时器1。
34
35
36 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
37 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<键盘扫描开启标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
38 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
39 bit b_KeyScan=0; //0--不扫描;
40 //1--扫描。
41
42 extern bit b_Introduce; //介绍关闭标志,当置零时,介绍就会停止显示。
43
44
45 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
46 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<按键计数清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
47 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
48 unsigned char uc_CleanCount=0; //清除按键计数时间计数。
49
50 extern bit b_CleanClick; //清除按键计数标志,定义在KeyProcess.c中
51 //0--不清除;
52 //1--清除。
53 //在定时器1中使用。
54
C51 COMPILER V8.05a MAIN 08/08/2007 10:18:49 PAGE 2
55 extern unsigned char uc_ClickCount; //按键连续点击计数,定义在KeyProcess.c中。
56
57 extern unsigned char uc_KeyTemp; //按键键码暂存,定义在KeyProcess.c中。
58
59
60
61 //*************************************************************************************************
62 //* *
63 //* ********************************主函数****************************** *
64 //* *
65 //*************************************************************************************************
66 void main()
67 {
68 1 P1=0x0F;
69 1
70 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描及键码处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
71 1 IT0=1; // 中断方式:下降沿。
72 1 EX0=1; // 开启外部中断。
73 1
74 1
75 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于防抖动标志清除 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
76 1 TH1=TIME1H;
77 1 TL1=TIME1L;
78 1 TR1=1; //开启定时器1
79 1 ET1=1; //开定时器1中断
80 1
81 1 EA=1; //开总中断。
82 1
83 1 vdInitialize(); //LCD初始化,相关参数在“SMC1602.h”中修改。
84 1 //注意,初始化里省略了vWriteCMD(0x0C),在vIntroduce()里有。
85 1
86 1 vIntroduce(); //显示介绍。
87 1
88 1 while(1)
89 1 {
90 2 if(b_KeyScan==1) //如果有按键按下,则进行按键扫描和键码处理。
91 2 {
92 3 b_KeyScan=0;
93 3 vKeyProcess(ucKeyScan());
94 3 }
95 2 }
96 1 }
97
98 //*************************************************************************************************
99 //* *
100 //* ******************************外部中断0,用于开启键盘扫描及键码处理****************** *
101 //* *
102 //*************************************************************************************************
103 void vINT0(void) interrupt 0
104 {
105 1 if(b_KeyShock==0)
106 1 {
107 2 if(b_Introduce==0) //此判断是为了屏蔽从介绍返回字符输入时的键盘扫描。
108 2 {
109 3 b_KeyScan=1; //开启键盘扫描标志。
110 3 b_KeyShock=1; //设置防抖动标志。
111 3 }
112 2 }
113 1 else b_KeyShock=0; //如果有抖动则不执行键扫描,恢复防抖动标志。
114 1
115 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
116 1 if(b_KeyShock==1)
C51 COMPILER V8.05a MAIN 08/08/2007 10:18:49 PAGE 3
117 1 b_KillShock=1; //如果防抖动标志位开启则开启防抖动标志清除位,
118 1 //300ms后清除防抖动标志。
119 1
120 1 b_Introduce=0; //用于关闭介绍,在显示介绍时如果有案件按下,产生的中断会
121 1 } //把此标志置零,便可退出介绍。
122
123
124
125 //*************************************************************************************************
126 //* *
127 //* ****************定时器1中断,用于计时功能和防抖动标志清除以及显示报告**************** *
128 //* *
129 //*************************************************************************************************
130 void vTimer1(void) interrupt 3
131 {
132 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
133 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
134 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
135 1 if(b_KillShock==1)
136 1 {
137 2 if(uc_KillCount%5==0) //当防抖动标志位为1时,计时300ms后清除抖动标志位。
138 2 {
139 3 b_KeyShock=0;
140 3 b_KillShock=0;
141 3 uc_KillCount=1;
142 3 }
143 2 else uc_KillCount++;
144 2 }
145 1
146 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
147 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<按键计数清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
148 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
149 1 if(b_CleanClick==1)
150 1 {
151 2 if(uc_CleanCount==100)
152 2 {
153 3 b_CleanClick=0; //关闭改计数。
154 3
155 3 uc_CleanCount=1; //恢复计数初值。
156 3
157 3 uc_ClickCount=1; //清除按键计数。
158 3
159 3 uc_KeyTemp=0;
160 3 }
161 2 else
162 2 uc_CleanCount++;
163 2 }
164 1
165 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
166 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复定时器1溢出时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
167 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
168 1 TH1=TIME1H;
169 1 TL1=TIME1L;
170 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 133 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
C51 COMPILER V8.05a MAIN 08/08/2007 10:18:49 PAGE 4
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -