?? key.lst
字號(hào):
C51 COMPILER V8.05a KEY 04/21/2009 19:44:20 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN Key.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE Key.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /******************************************************************
2 本程序只供學(xué)習(xí)使用,未經(jīng)作者許可,不得用于其它任何用途
3
4 歡迎訪問(wèn)我的USB專區(qū):http://group.ednchina.com/93/
5 歡迎訪問(wèn)我的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 版權(quán)所有,盜版必究。
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 函數(shù)功能:定時(shí)器0初始化,用來(lái)做鍵盤掃描。
34 入口參數(shù):無(wú)。
35 返 回:無(wú)。
36 備 注:無(wú)。
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 函數(shù)功能:鍵盤初始化
50 入口參數(shù):無(wú)。
51 返 回:無(wú)。
52 備 注:無(wú)。
53 ********************************************************************/
54 void InitKeyboard(void)
55 {
C51 COMPILER V8.05a KEY 04/21/2009 19:44:20 PAGE 2
56 1 KeyIO=0xFF; //鍵盤對(duì)應(yīng)的口設(shè)置為輸入狀態(tài)
57 1 KeyPress=0; //無(wú)按鍵按下
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(); //初始化定時(shí)器
65 1 KeyCanChange=1; //允許鍵值改變
66 1 }
67 /*******************************************************************/
68
69 /********************************************************************
70 函數(shù)功能:定時(shí)器0中斷處理。
71 入口參數(shù):無(wú)。
72 返 回:無(wú)。
73 備 注:22.1184M晶體約5ms中斷一次。
74 ********************************************************************/
75 void Timer0Isr(void) interrupt 1
76 {
77 1 //定時(shí)器0重裝,定時(shí)間隔為5ms,加15是為了修正重裝所花費(fèi)時(shí)間
78 1 //這個(gè)值可以通過(guò)軟件仿真來(lái)確定,在這里設(shè)置斷點(diǎn),調(diào)整使兩次運(yùn)行
79 1 //時(shí)間差剛好為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 //開(kāi)始鍵盤掃描
86 1 //保存按鍵狀態(tài)到當(dāng)前按鍵情況
87 1 //KeyCurrent總共有8個(gè)bit
88 1 //當(dāng)某個(gè)開(kāi)關(guān)按下時(shí),對(duì)應(yīng)的bit為1
89 1 KeyCurrent=GetKeyValue(); //讀取鍵值,GetKeyValue()其實(shí)是個(gè)宏,不是函數(shù),
90 1 //這里故意寫成函數(shù)的樣子,美觀。它的定義在
91 1 //key.h文件中
92 1
93 1 if(KeyCurrent!=KeyOld) //如果兩次值不等,說(shuō)明按鍵情況發(fā)生了改變
94 1 {
95 2 KeyNoChangedTime=0; //鍵盤按下時(shí)間為0
96 2 KeyOld=KeyCurrent; //保存當(dāng)前按鍵情況
97 2 return; //返回
98 2 }
99 1 else
100 1 {
101 2 KeyNoChangedTime++; //按下時(shí)間累計(jì)
102 2 if(KeyNoChangedTime>=1) //如果按下時(shí)間足夠
103 2 {
104 3 KeyNoChangedTime=1;
105 3 KeyPress=KeyOld; //保存按鍵
106 3 KeyDown|=(~KeyLast)&(KeyPress); //求出新按下的鍵
107 3 KeyUp|=KeyLast&(~KeyPress); //求出新釋放的鍵
108 3 KeyLast=KeyPress; //保存當(dāng)前按鍵情況
109 3 }
110 2 }
111 1 }
112 /*******************************************************************/
113
114
MODULE INFORMATION: STATIC OVERLAYABLE
C51 COMPILER V8.05a KEY 04/21/2009 19:44:20 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)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -