?? ps-2.lst
字號:
C51 COMPILER V7.06 PS_2 05/14/2005 04:46:42 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE PS_2
OBJECT MODULE PLACED IN PS-2.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil20\C51\BIN\C51.EXE PS-2.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //-----------------------函數聲明,變量定義--------------------------------------------------------
2 #include <reg51.h>
3 #define KEY P1
4 unsigned char key_code; //鍵值
5 unsigned char key_buf[8]; //按鍵緩沖區
6 unsigned char key_COUNT; //按鍵計數器
7 unsigned char COUNT_TI; //定時中斷計數
8
9 //-----------------------變量聲明---------------------------------------------------------------------
10 void system_init(void ); //初始化,設置定時器0的工作方式,供主程序調用
11 void TIMER0_SCANkey(); //定時器0中斷處理函數
12 bit judge_hitkey(); //判斷是否有鍵按下,有返回1,沒有返回0
13 unsigned char scan_key(); //掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
14 void key_manage(unsigned char keycode); //按鍵處理
15 //...........每個按鍵對應一個處理程序
16 //--------------------------------------------------------------------------------------------------
17 // 函數名稱: scan_key
18 // 函數功能: 掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
19 // 無鍵按下返回0
20 //--------------------------------------------------------------------------------------------------
21 unsigned char scan_key() //掃描鍵盤,返回鍵值(高四位代表行,低四位代表列)
22 {
23 1 unsigned char scancode,keycode,keycode_line,keycode_row;
24 1 scancode=0xF0; //列置低,行置高
25 1 KEY=scancode; //輸入掃描碼,掃描行
26 1 keycode_line=KEY;
27 1 scancode=0xF0; //列置高,行置低
28 1 KEY=scancode; //輸入掃描碼,掃描列
29 1 keycode_row=KEY;
30 1 keycode=(((keycode_line<<4)&0xF0)|(keycode_row&0x0F));
31 1 return(keycode);
32 1 }
33 //--------------------------------------------------------------------------------------------------
34 // 函數名稱: Timer0_init()
35 // 函數功能: 初始化設置
36 // 設定INT0的工作方式
37 //--------------------------------------------------------------------------------------------------
38 void Timer0_init(void )
39 {
40 1 TMOD=0x20; //定時器0工作在方式2的定時模式
41 1 ET0=1; //定時器0中斷允許
42 1 TH0=0;
43 1 TL0=0;
44 1 TR0=1; //定時器0開始計數
45 1 EA=1; //系統中斷允許
46 1 }
47 //--------------------------------------------------------------------------------------------------
48 // 函數名稱: TIMER0_intrupt
49 // 函數功能: 定時器0中斷處理程序
50 //--------------------------------------------------------------------------------------------------
51 void TIMER0_SCANkey() interrupt 1 using 1
52 {
53 1 EA=0; //系統中斷禁止
54 1 if((++COUNT_TI)%30==0)
55 1 {
C51 COMPILER V7.06 PS_2 05/14/2005 04:46:42 PAGE 2
56 2 switch(COUNT_TI/30)
57 2 {
58 3 case 1:if(scan_key()==0)
59 3 COUNT_TI=0; //無鍵按下,計數值歸零
60 3 break;
61 3 case 2:break;
62 3 case 3:if(scan_key()==0)
63 3 COUNT_TI=0; //無鍵按下,計數值歸零,上次按鍵未擾動
64 3 else
65 3 key_code=scan_key(); //又有效建,獲取鍵值
66 3 break;
67 3 default:if(scan_key()==0) //等待按鍵釋放
68 3 key_manage(key_code); //有一個有效按鍵,調用按鍵處理程序
69 3 }
70 2 }
71 1 EA=1;
72 1 }
73 void key_manage(unsigned char keycode)
74 {
75 1 unsigned char i;
76 1 for(i=7;i>=0;i--)
77 1 {
78 2 key_buf[i]=key_buf[i-1]; //緩沖區內數據后移1位
79 2 }
80 1 key_buf[0]= keycode; //將鍵值送入緩沖區
81 1 key_COUNT++; //按鍵計數器加一
82 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 157 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 ----
IDATA SIZE = ---- ----
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 + -