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