📄 key_scan.lst
字号:
C51 COMPILER V8.02 KEY_SCAN 07/26/2007 18:25:10 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE KEY_SCAN
OBJECT MODULE PLACED IN key_scan.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE key_scan.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include <absacc.h>
3 #include <string.h>
4 #include <intrins.h>
5 #include <ctype.h>
6 #include <stdlib.h>
7 #define uchar unsigned char
8 #define uint unsigned int
9 #define ulong unsigned long
10
11 /* 定义8155的I/O端口地址 */
12 #define COM8155 XBYTE[0xf000] /* 8155命令口地址 */
13 #define PA8155 XBYTE[0xf001] /* 8155的PA口地址 */
14 #define PB8155 XBYTE[0xf002] /* 8155的PB口地址 */
15 #define PC8155 XBYTE[0xf003] /* 8155的PC口地址 */
16
17 uchar key_scan(void);
18 void delay(uchar ms);
19 void proc_key(uchar key);
20 uchar key;
21
22 void main()
23 {
24 1
25 1
26 1 while(1)
27 1 {
28 2
29 2 COM8155=0x03 ; //给8155送命令,PA,PB口都为输出,PC口为输入.
30 2 key = key_scan();
31 2 proc_key(key); //键盘功能
32 2
33 2 }
34 1 }
35 //键处理子程序
36 /*0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F,*/
37 /*0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E, */
38 void proc_key(uchar key)
39 {
40 1 switch(key)
41 1 {
42 2 case 0x11:PB8155=0xfc;PA8155=0xf0;delay(10);break; //数码显示0
43 2 case 0x21:PB8155=0x66;PA8155=0xf0;delay(10);break; //数码显示4
44 2 case 0x41:PB8155=0xfe;PA8155=0xf0;delay(10);break; //数码显示8
45 2 case 0x81:PB8155=0x9c;PA8155=0xf0;delay(10);break; //数码显示c
46 2 case 0x12:PB8155=0x60;PA8155=0xf0;delay(10);break; //数码显示1
47 2 case 0x22:PB8155=0xb6;PA8155=0xf0;delay(10);break; //数码显示5
48 2 case 0x42:PB8155=0xf6;PA8155=0xf0;delay(10);break; //数码显示9
49 2 case 0x82:PB8155=0x7a;PA8155=0xf0;delay(10);break; //数码显示d
50 2 case 0x14:PB8155=0xda;PA8155=0xf0;delay(10);break; //数码显示2
51 2 case 0x24:PB8155=0xbe;PA8155=0xf0;delay(10);break; //数码显示6
52 2 case 0x44:PB8155=0xEE;PA8155=0xf0;delay(10);break; //数码显示a
53 2 case 0x84:PB8155=0x9E;PA8155=0xf0;delay(10);break; //数码显示e
54 2 case 0x18:PB8155=0xf2;PA8155=0xf0;delay(10);break; //数码显示3
55 2 case 0x28:PB8155=0xe0;PA8155=0xf0;delay(10);break; //数码显示7
C51 COMPILER V8.02 KEY_SCAN 07/26/2007 18:25:10 PAGE 2
56 2 case 0x48:PB8155=0x3E;PA8155=0xf0;delay(10);break; //数码显示b
57 2 case 0x88:PB8155=0x8E;PA8155=0xf0;delay(10);break; //数码显示f
58 2 default: break;
59 2 }
60 1 }
61
62 /* 键扫描函数 */
63 uchar key_scan(void)
64 {
65 1 uchar scancode,tmpcode;
66 1 PB8155 = 0xf0; // 在列行没有接高电平发全0列扫描码
67 1 PA8155=0xff; //关闭显示
68 1 if ((PC8155&0xcf)!=0xcf) // 若哪行有0代表有键按下,PC口"1100,****"PC口7,6位没有用默认为高电平,5,4位不用时
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -