?? key.lst
字號:
C51 COMPILER V7.06 KEY 11/16/2008 16:00:01 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 TABS(1)
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 感謝PCB贊助商——電子園: http://bbs.cepark.com/
9
10 KEY.C file
11
12 作者:電腦圈圈
13 建立日期: 2008.06.27
14 修改日期: 2008.06.27
15 版本:V1.2
16 版權所有,盜版必究。
17 Copyright(C) 電腦圈圈 2008-2018
18 All rights reserved
19 *******************************************************************/
20
21
22 #include "Key.h"
23 #include "MyType.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初始化,用來做鍵盤掃描。
34 入口參數:無。
35 返 回:無。
36 備 注:無。
37 ********************************************************************/
38 void InitTimer0(void)
39 {
40 1 TMOD&=0xF0;
41 1 TMOD|=0x01;
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.06 KEY 11/16/2008 16:00:01 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 /********************************************************************
70 函數功能:定時器0中斷處理。
71 入口參數:無。
72 返 回:無。
73 備 注:22.1184M晶體約5ms中斷一次。
74 ********************************************************************/
75 void Timer0Isr(void) interrupt 1
76 {
77 1 //定時器0重裝,定時間隔為5ms,加15是為了修正重裝所花費時間
78 1 //這個值可以通過軟件仿真來確定,在這里設置斷點,調整使兩次運行
79 1 //時間差剛好為5ms即可。
80 1 TH0=(65536-Fclk/1000/12*5+15)/256;
81 1 TL0=(65536-Fclk/1000/12*5+15)%256; //
82 1
83 1 if(!KeyCanChange)return; //如果正在處理按鍵,則不再掃描鍵盤
84 1
85 1 //開始鍵盤掃描
86 1 //保存按鍵狀態到當前按鍵情況
87 1 //KeyCurrent總共有8個bit
88 1 //當某個開關按下時,對應的bit為1
89 1 KeyCurrent=GetKeyValue(); //讀取鍵值,GetKeyValue()其實是個宏,不是函數,
90 1 //這里故意寫成函數的樣子,美觀。它的定義在
91 1 //key.h文件中
92 1
93 1 if(KeyCurrent!=KeyOld) //如果兩次值不等,說明按鍵情況發生了改變
94 1 {
95 2 KeyNoChangedTime=0; //鍵盤按下時間為0
96 2 KeyOld=KeyCurrent; //保存當前按鍵情況
97 2 return; //返回
98 2 }
99 1 else
100 1 {
101 2 KeyNoChangedTime++; //按下時間累計
102 2 if(KeyNoChangedTime>=1) //如果按下時間足夠
103 2 {
104 3 KeyNoChangedTime=1;
105 3 KeyPress=KeyOld; //保存按鍵
106 3 KeyDown|=(~KeyLast)&(KeyPress); //求出新按下的鍵
107 3 KeyUp|=KeyLast&(~KeyPress); //求出新釋放的鍵
108 3 KeyLast=KeyPress; //保存當前按鍵情況
109 3 }
110 2 }
111 1 }
112 /*******************************************************************/
113
114
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V7.06 KEY 11/16/2008 16:00:01 PAGE 3
CODE SIZE = 137 ----
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 + -