📄 key.lst
字号:
C51 COMPILER V7.00 KEY 01/03/2007 15:13:29 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN key.OBJ
COMPILER INVOKED BY: G:\单片机学习\单片机软件\new-keil\C51\BIN\C51.EXE key.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <reg51.h>
2 #define uchar unsigned char
3 #define uint unsigned int
4 uchar buff,times,j;
5 unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f, //0,1,2,3
6 0x66,0x6d,0x7d,0x07, //4,5,6,7
7 0x7f,0x6f,0x77,0x7c, //8,9,A,B
8 0x39,0x5e,0x79,0x71,0x00}; //C,D,E,F,null
9 unsigned char idata value[8];
10
11 void delay1ms(void) //消抖动
12 { uchar i;
13 1 for(i=200;i>0;i--);
14 1 }
15
16 void delay5ms(void) //延时5ms
17 {
18 1 unsigned char i,j;
19 1 for(i=5;i>0;i--)
20 1 for(j=248;j>0;j--);
21 1 }
22
23 void key_scan(void) //键盘输入扫描函数
24 { uchar hang,lie,key;
25 1 P3=0xf0;
26 1 if((P3&0xf0)!=0xf0) //行码为0,列码为1
27 1 { delay1ms();
28 2 if((P3&0xf0)!=0xf0) //有键按下,列码变为0
29 2 { hang=0xfe; //逐行扫描
30 3 times++;
31 3 if(times==9)
32 3 times=1;
33 3 while((hang&0x10)!=0) //扫描完4行后跳出
34 3 { P3=hang;
35 4 if((P3&0xf0)!=0xf0) //本行有键按下
36 4 { lie=(P3&0xf0)|0x0f;
37 5 buff=((~hang)+(~lie));
38 5 switch(buff)
39 5 { case 0x28: key=0;break;
40 6 case 0x14: key=1;break;
41 6 case 0x24: key=2;break;
42 6 case 0x44: key=3;break;
43 6 case 0x12: key=4;break;
44 6 case 0x22: key=5;break;
45 6 case 0x42: key=6;break;
46 6 case 0x11: key=7;break;
47 6 case 0x21: key=8;break;
48 6 case 0x41: key=9;break;
49 6 case 0x81: key=10;break;
50 6 case 0x82: key=11;break;
51 6 case 0x84: key=12;break;
52 6 case 0x88: key=13;break;
53 6 case 0x48: key=14;break;
54 6 case 0x18: key=15;break;
55 6 }
C51 COMPILER V7.00 KEY 01/03/2007 15:13:29 PAGE 2
56 5 value[times-1]=key; //按下的键值
57 5 }
58 4 else hang=(hang<<1)|0x01; //下一行扫描
59 4
60 4 }
61 3 }
62 2 }
63 1 }
64
65 void main(void)
66 { uchar key;
67 1 while(1)
68 1 { key_scan();
69 2 P0=0;
70 2 for(j=times;j>0;j--) //74LS138扫描
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -