📄 main.lst
字号:
C51 COMPILER V8.05a MAIN 08/11/2007 15:13:57 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) DEBUG OBJECTEXTEND PRINT(.\main.lst
-) OBJECT(main.obj)
line level source
1 //*************************************************************************************************
2 //*************************************************************************************************
3 //**<程序名>:LED动态扫描显示及键盘输入扫描。 **
4 //**<功能>:将键盘输入转换成相应的输出并显示在LCD上。 **
5 //**<作者>:LastRitter **
6 //**<完成时间>:2007年7月28日 **
7 //**<联系方式>:E-Mail:superyongzhe@163.com;QQ:314665345。 **
8 //*************************************************************************************************
9 //*************************************************************************************************
10
11
12 //*************************************************************************************************
13 //* *
14 //* ******************************头文件及宏定义************************** *
15 //* *
16 //*************************************************************************************************
17 #include "includes.h"
18
19 #define TIME0H 0xFC
20 #define TIME0L 0x18 //定时器0溢出时间:5ms
21
22 #define TIME1H 0x44
23 #define TIME1L 0x80 //定时器1溢出时间:48ms
24
25
26 #define SCANPORT P2
27
28
29 //*************************************************************************************************
30 //* *
31 //* ********************************全局变量****************************** *
32 //* *
33 //*************************************************************************************************
34
35 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0定时刷新LED计数>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
36 unsigned char uc_DisCount=1;
37
38 unsigned long ul_Number=0; //LCD实时显示数字。
39
40
41
42 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
43
44 bit b_KeyShock=0; //键盘防抖动标志位。
45 //当按键中断产生时,首先判断此位。
46 //0--执行键盘扫描及键码处理程序;1--不执行。
47
48 bit b_KillShock=0; //防抖标志清除位:0--不清除;1--清除。
49
50 unsigned char uc_KillCount=0; //抖动标志清除计数,使用定时器1。
51
52
53 //*************************************************************************************************
54 //* *
C51 COMPILER V8.05a MAIN 08/11/2007 15:13:57 PAGE 2
55 //* ********************************主函数****************************** *
56 //* *
57 //*************************************************************************************************
58 void main()
59 {
60 1 SCANPORT=0x0F; //初始化键盘接口。
61 1
62 1 TMOD=0x11; //定时器0:模式一;定时器0:模式一.
63 1
64 1
65 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器0,用于LCD刷新>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
66 1 TH0=TIME0H;
67 1 TL0=TIME0L;
68 1 TR0=1; //开启定时器0
69 1 ET0=1; //开定时器0中断
70 1
71 1
72 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
73 1 TH1=TIME1H;
74 1 TL1=TIME1L;
75 1 TR1=1; //开启定时器1
76 1 ET1=1; //开定时器1中断
77 1
78 1
79 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于执行键盘扫描和键处理程序>>>>>>>>>>>>>>>>>>>>>>>>>>
80 1 IT0=1; //外部中断0,中断方式:下降沿
81 1 EX0=1; //开启外部中断0
82 1
83 1 PT0=1; //把定时器0设为高优先级,防止在按键的时候LED产生闪烁。
84 1
85 1 EA=1; //开启总中断
86 1
87 1 while(1);
88 1 }
89
90
91 //*************************************************************************************************
92 //* *
93 //* ***************************外部中断0,调用键盘扫描程序************************* *
94 //* *
95 //*************************************************************************************************
96 void vINT0(void) interrupt 0
97 {
98 1 EX0=0; //在键扫描处理时,关闭外部中断0,防抖动。
99 1
100 1 if(b_KeyShock==0)
101 1 {
102 2 vKeyProcess(ucKeyScan()); //当判断有按键按下时,扫描键盘,并把扫描结果进行处理。
103 2 }
104 1 else b_KeyShock=0; //如果有抖动则不执行键扫描,恢复防抖动标志。
105 1
106 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设置防抖动清除标志位 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
107 1 if(b_KeyShock==1)
108 1 b_KillShock=1; //如果防抖动标志位开启则开启防抖动标志清除位,
109 1 //300ms后清除防抖动标志。
110 1
111 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复键扫描处理前初始状态 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
112 1 EX0=1; //恢复按键中断。
113 1 }
114
115
116 //*************************************************************************************************
C51 COMPILER V8.05a MAIN 08/11/2007 15:13:57 PAGE 3
117 //* *
118 //* **********************定时器1中断,用于防抖动标志清除************************ *
119 //* *
120 //*************************************************************************************************
121 void vTimer1(void) interrupt 3
122 {
123 1 //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<防抖动标志清除>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
124 1 if(b_KillShock==1)
125 1 {
126 2 if(uc_KillCount==7) //当防抖动标志位为1时,计时300ms后清除抖动标志位。
127 2 {
128 3 b_KeyShock=0;
129 3 b_KillShock=0;
130 3 uc_KillCount=0;
131 3 }
132 2 else uc_KillCount++;
133 2 }
134 1
135 1 TH1=TIME1H;
136 1 TL1=TIME1L;
137 1 }
138 //*************************************************************************************************
139 //* *
140 //* ***************************定时器0,定时刷新LED************************* *
141 //* *
142 //*************************************************************************************************
143 void vTimer0(void) interrupt 1
144 {
145 1 vShowOneNum(*(pucLedNum(ul_Number)+uc_DisCount),uc_DisCount); //在LED上显示1位数字。
146 1
147 1 if(uc_DisCount<5)
148 1 uc_DisCount++; //定时器0在每次被触发时,改变LED显示。
149 1 else uc_DisCount=0; //从第一位到第六位循环显示。
150 1
151 1 TH0=TIME0H; //恢复定时器0初始值。
152 1 TL0=TIME0L;
153 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 253 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 6 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -