📄 kb.lst
字号:
C51 COMPILER V7.08 KB 11/19/2005 21:32:18 PAGE 1
C51 COMPILER V7.08, COMPILATION OF MODULE KB
OBJECT MODULE PLACED IN .\output\kb.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE kb.c ROM(COMPACT) BROWSE DEBUG OBJECTEXTEND OBJECT(.\output\kb.obj)
line level source
1 #define _key_
2 #include "general.h"
3
4 uchar key_bak;
5 uchar key_temp;
6 uchar key_cnt; //counter
7 uchar key_value;
8 bit key_ok;
9 static uchar code code_key[16]={0x11,0x12,0x14,0x18,
10 0x21,0x22,0x24,0x28,
11 0x41,0x42,0x44,0x48,
12 0x81,0x82,0x84,0x88};
13
14 /* -- 1 -- 2 -- 3 -- enter --
15 -- 4 -- 5 -- 6 --
16 -- 7 -- 8 -- 9 --
17 -- 0 --
18 /******************************************
19 查键值表,特征键值转为顺序键值
20 ******************************************/
21 uchar get_key(uchar c)
22 {
23 1 uchar i=0;
24 1 while(code_key[i]!= c)
25 1 i++;
26 1 return i;//0x00~0x0f
27 1 }
28
29 /**************************************************************
30 名称:kbscan
31 描述:键盘扫描
32 输入:无
33 输出:键值key
34 其他:P0.4~7扫描0输出,P0.0~3输入0进来
35 **************************************************************/
36 void kbscan(void)
37 {
38 1 uchar sccode,recode; //扫描码,接收码
39 1 P0=0x0f; //扫0000
40 1 if((P0&0x0f)!=0x0f) //有键按下
41 1 {
42 2 sccode=0xef;
43 2 while((sccode&0x01)!=0)
44 2 {
45 3 P0=sccode; //扫1110
46 3 if((P0&0x0f)!=0x0f) //扫描到
47 3 {
48 4 recode=(P0&0x0f)|0xf0;//输出键值,特征位为0
49 4 //
50 4 key_temp=((~sccode)+(~recode));//扫描+输出 行+列 返回特征字节->顺序键码
51 4 //C1:10-01,02,04,08 11,12,14,18
52 4 //C2:20-01,02,04,08 21,22,24,28
53 4 //C3:40-01,02,04,08 41,42,44,48
54 4 //C4:80-01,02,04,08 81,82,84,88
55 4 }
C51 COMPILER V7.08 KB 11/19/2005 21:32:18 PAGE 2
56 3 else
57 3 sccode=(sccode<<1)|0x10; //0左移1位,末位补1
58 3
59 3 }
60 2 if (key_temp == key_bak){ key_cnt++;}
61 2 else{key_cnt=0;key_bak=key_temp;}
62 2
63 2 }
64 1 else{
65 2
66 2 if (key_cnt){
67 3 key_ok=1;
68 3 key_value=get_key(key_temp); //键解码
69 3 }
70 2 key_cnt=0;
71 2 }
72 1 }
73
74 //对外接口函数
75 unsigned char getkey(void) //返回按键码
76 {
77 1 key_ok=0; //结束
78 1 return(key_value);
79 1 }
80
81 bit testkey(void) //检查有无按键
82 {
83 1 kbscan(); //键扫描
84 1 return(key_ok);
85 1 }
86
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 110 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -