📄 key.lst
字号:
C51 COMPILER V7.20 KEY 09/11/2008 22:15:08 PAGE 1
C51 COMPILER V7.20, 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 #include"key.h"
2 #include"mytype.h"
3
4 volatile uint8 idata KeyCurrent,KeyOld,KeyNoChangedTime;
5 volatile uint8 idata KeyPress;
6 volatile uint8 idata KeyDown,KeyUp,KeyLast;
7 volatile uint8 KeyCanChange;
8
9
10
11
12 /********************************************************************
13 函数功能:定时器0初始化,用来做键盘扫描,定时时间大约为5ms。
14 入口参数:无。
15 返 回:无。
16 备 注:无。
17 ********************************************************************/
18 void InitTimer0(void)
19 {
20 1 TMOD&=0xF0;
21 1 TMOD|=0x01;
22 1 TH0=0xDC;
23 1 ET0=1;
24 1 TR0=1;
25 1 }
26 /*******************************************************************/
27
28
29 /********************************************************************
30 函数功能:键盘初始化
31 入口参数:无。
32 返 回:无。
33 备 注:无。
34 ********************************************************************/
35 void InitKeyboard(void)
36 {
37 1 KeyIO=0xFF; //键盘对应的口设置为输入状态
38 1 KeyPress=0; //无按键按下
39 1 KeyNoChangedTime=0;
40 1 KeyOld=0;
41 1 KeyCurrent=0;
42 1 KeyLast=0;
43 1 KeyDown=0;
44 1 KeyUp=0;
45 1 InitTimer0(); //初始化定时器
46 1 KeyCanChange=1; //允许键值改变
47 1 }
48 /*******************************************************************/
49
50 /********************************************************************
51 函数功能:定时器0中断处理。
52 入口参数:22.1184M晶体约5ms中断一次。
53 返 回:无。
54 备 注:无。
55 ********************************************************************/
C51 COMPILER V7.20 KEY 09/11/2008 22:15:08 PAGE 2
56 void Timer0Isr(void) interrupt 1
57 {
58 1 TH0=(65536-Fclk/1000/12*5+15)/256; //定时器0重装
59 1 TL0=(65536-Fclk/1000/12*5+15)%256;
60 1
61 1 if(!KeyCanChange)return; //如果正在处理按键,则不再扫描键盘
62 1
63 1 //开始键盘扫描
64 1 //保存按键状态到当前按键情况
65 1 //KeyCurrent总共有8个bit
66 1 //当某个开关按下时,对应的bit为1
67 1
68 1 KeyCurrent=~KeyIO;
69 1
70 1 if(KeyCurrent!=KeyOld) //说明按键情况发生了改变
71 1 {
72 2 KeyNoChangedTime=0; //键盘按下时间为0
73 2 KeyOld=KeyCurrent; //保存当前按键情况
74 2 return;
75 2 }
76 1 else
77 1 {
78 2 KeyNoChangedTime++; //按下时间累计
79 2 if(KeyNoChangedTime>=1) //如果按下时间足够
80 2 {
81 3 KeyNoChangedTime=1;
82 3 KeyPress=KeyOld; //保存按键
83 3 KeyDown|=(~KeyLast)&(KeyPress); //求出新按下的键
84 3 KeyUp|=KeyLast&(~KeyPress); //求出新释放的键
85 3 KeyLast=KeyPress; //保存当前按键情况
86 3 }
87 2 }
88 1 }
89 /*******************************************************************/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 140 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 1 ----
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 + -