📄 key.lst
字号:
C51 COMPILER V7.50 KEY 06/02/2008 20:59:07 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN Key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Key.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************
2 本程序只供学习使用,未经作者许可,不得用于其它任何用途
3
4 欢迎访问我的USB专区:http://group.ednchina.com/93/
5 欢迎访问我的blog: http://www.ednchina.com/blog/computer00
6 http://computer00.21ic.org
7
8 KEY.C file
9
10 作者:Computer-lov
11 建立日期: 2007.03.20
12 修改日期: 2007.11.18
13 版本:V1.2
14 版权所有,盗版必究。
15 Copyright(C) Computer-lov 2007-2017
16 All rights reserved
17 *******************************************************************/
18
19 #include "Key.h"
20 #include "MyType.h"
21 #include "config.h"
22
23 volatile uint8 idata KeyCurrent,KeyOld,KeyNoChangedTime;
24 volatile uint8 idata KeyPress;
25 volatile uint8 idata KeyDown,KeyUp,KeyLast;
26
27 volatile uint8 KeyCanChange;
28
29 volatile uint16 SystemTick=0;
30
31 /********************************************************************
32 函数功能:定时器0初始化,用来做键盘扫描,定时时间大约为5ms。
33 入口参数:无。
34 返 回:无。
35 备 注:无。
36 ********************************************************************/
37 void InitTimer0(void)
38 {
39 1 TMOD&=0xF0;
40 1 TMOD|=0x01;
41 1 TH0=0xDC;
42 1 ET0=1;
43 1 TR0=1;
44 1 }
45 /*******************************************************************/
46
47
48 /********************************************************************
49 函数功能:键盘初始化
50 入口参数:无。
51 返 回:无。
52 备 注:无。
53 ********************************************************************/
54 void InitKeyboard(void)
55 {
C51 COMPILER V7.50 KEY 06/02/2008 20:59:07 PAGE 2
56 1 KeyIO=0xFF; //键盘对应的口设置为输入状态
57 1 KeyPress=0; //无按键按下
58 1 KeyNoChangedTime=0;
59 1 KeyOld=0;
60 1 KeyCurrent=0;
61 1 KeyLast=0;
62 1 KeyDown=0;
63 1 KeyUp=0;
64 1 InitTimer0(); //初始化定时器
65 1 KeyCanChange=1; //允许键值改变
66 1 }
67 /*******************************************************************/
68
69 sbit LED_0=P1^0;
70 sbit LED_1=P1^1;
71 sbit LED_2=P1^2;
72 sbit LED_3=P1^3;
73
74 #define LED_SEG P0
75
76 #ifndef LCD
/*=====0-9=====A-F-OFF=====*/
code uint8 Table[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0x86,0x8e,0x82,0xFF};
uint8 LedBuffer[4];
#endif
84
85 /********************************************************************
86 函数功能:定时器0中断处理。
87 入口参数:约5ms中断一次。
88 返 回:无。
89 备 注:无。
90 ********************************************************************/
91 void Timer0Isr(void) interrupt 1
92 {
93 1 uint8 temp;
94 1
95 1 #ifndef LCD
static uint8 LedDigit=0;
#endif
98 1
99 1 TH0=(65536-Fclk/1000/12*5+22)/256; //定时器0重装
100 1 TL0=(65536-Fclk/1000/12*5+22)%256;
101 1
102 1 SystemTick++;
103 1
104 1 #ifndef LCD //没有定义LCD,则使用数码管显示
switch(LedDigit)
{
case 0:
LED_3=1;
LED_SEG=Table[LedBuffer[0]];
LED_0=0;
LedDigit=1;
break;
case 1:
LED_0=1;
LED_SEG=Table[LedBuffer[1]];
LED_1=0;
LedDigit=2;
C51 COMPILER V7.50 KEY 06/02/2008 20:59:07 PAGE 3
break;
case 2:
LED_1=1;
LED_SEG=Table[LedBuffer[2]];
LED_2=0;
LedDigit=3;
break;
case 3:
LED_2=1;
LED_SEG=Table[LedBuffer[3]];
LED_3=0;
LedDigit=0;
break;
default:
LedDigit=0;
break;
}
#endif
136 1
137 1 if(!KeyCanChange)return; //如果正在处理按键,则不再扫描键盘
138 1
139 1 //开始键盘扫描
140 1 //保存按键状态到当前按键情况
141 1 //KeyCurrent总共有8个bit
142 1 //当某个开关按下时,对应的bit为1
143 1
144 1 P2_4=0; //扫描第一列
145 1 temp=~KeyIO;
146 1 P2_4=1;
147 1 temp&=0x0F;
148 1 P2_5=0; //扫描第二列
149 1 KeyCurrent=~KeyIO;
150 1 P2_5=1;
151 1
152 1 KeyCurrent<<=4;
153 1 KeyCurrent|=temp;
154 1
155 1 if(KeyCurrent!=KeyOld) //说明按键情况发生了改变
156 1 {
157 2 KeyNoChangedTime=0; //键盘按下时间为0
158 2 KeyOld=KeyCurrent; //保存当前按键情况
159 2 return;
160 2 }
161 1 else
162 1 {
163 2 KeyNoChangedTime++; //按下时间累计
164 2 if(KeyNoChangedTime>=1) //如果按下时间足够
165 2 {
166 3 KeyNoChangedTime=1;
167 3 KeyPress=KeyOld; //保存按键
168 3 KeyDown|=(~KeyLast)&(KeyPress); //求出新按下的键
169 3 KeyUp|=KeyLast&(~KeyPress); //求出新释放的键
170 3 KeyLast=KeyPress; //保存当前按键情况
171 3 if(KeyDown)BeepOn(); //按键按下,蜂鸣器响
172 3 else if(KeyUp)BeepOff();
173 3 }
174 2 }
175 1 }
176 /*******************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.50 KEY 06/02/2008 20:59:07 PAGE 4
CODE SIZE = 194 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
IDATA SIZE = 7 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -