📄 key1.lst
字号:
C51 COMPILER V7.06 KEY1 05/14/2006 16:02:29 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE KEY1
OBJECT MODULE PLACED IN key1.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE key1.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 //****************************************************
2 //实现功能:本程序实现把键盘的输入码型按二进制的方式在
3 // p0口显示,若果没有按键按下P0的灯全部亮
4 //目标板:
5 //****************************************************
6 #include <reg51.h>
7 //********************宏定义**************************
8 #define p_key P1//宏定义键盘接口是P1
9 //****************************************************
10
11 //******************时间延迟函数**********************
12 //描 述:用指令实现延时一段时间
13 //入口参数:int i,为时间延迟参数
14 //出口参数:无
15 //设计人:ycj
16 //最后修改:时间(2006.4.24) 修改人(ycj)
17 //****************************************************
18 void delay_time(int i)
19 {
20 1 while(i)
21 1 i--;
22 1 }
23 //******************按键扫描函数**********************
24 //描 述:对4*4键盘进行扫描,程序只适合4*4键盘使用,
25 // 键盘占用一组完整的i/o口,在使用这个程序前
26 // 要宏定义p_key为用户实际连接键盘的i/o口
27 // #define p_key Pn;//(n=0、1、2、3)
28 //入口参数:无
29 //返回参数:若有检测到按键就返回按键的编号,否则返回0xff
30 //设计人:ycj
31 //最后修改:时间(2006.4.24)修改人(ycj)
32 //****************************************************
33 unsigned char read_key(void)
34 {
35 1 unsigned char j,key,key_buf=0;
36 1 p_key=0xff;
37 1 //检测是否有建按下//
38 1 p_key=0xf0;
39 1 key=p_key;
40 1 if(key==0xf0)
41 1 {
42 2 return(0xff);//没按键按下,返回0xff
43 2 }
44 1 //有按下,延时去抖//
45 1 delay_time(5000);
46 1 //确认是否有建按下//
47 1 p_key=0xf0;
48 1 key=p_key;
49 1 if(key==0xf0)
50 1 {
51 2 return(0xff);//没按键按下,返回0xff
52 2 }
53 1 //真的有按键按下,扫描是哪一行有按键按下//
54 1 for(j=0;j<4;j++)
55 1 {key=p_key&(0x10<<j);
C51 COMPILER V7.06 KEY1 05/14/2006 16:02:29 PAGE 2
56 2 if (key)
57 2 {
58 3 key=p_key;
59 3 }
60 2 else
61 2 {
62 3 key_buf=j*4;
63 3 p_key=~(0x10<<j);//第j行的按键按下了,第j行输出0,其他的i/o口输出1
64 3 //扫描是第j行的哪个按键按下//
65 3 for(j=0;j<4;j++)
66 3 {
67 4 key=p_key&(1<<j);
68 4 if (key)
69 4 {
70 5 key=p_key;
71 5 }
72 4 else
73 4 {
74 5 key_buf+=j;
75 5 return(key_buf);//扫描到按键的确定位置,返回按键的编号
76 5 }
77 4 }
78 3 }
79 2 }
80 1 //没扫描到按键,//
81 1 return(0xff);
82 1 }
83 //*****************主程序**********************
84 //描 述:把键盘的输入码型按二进制的方式在p0
85 // 口显示,若没有按键按下P0的灯全部亮
86 //入口参数:无
87 //返回参数:无
88 //设计人:ycj
89 //最后修改:时间(2006.4.24) 修改人(ycj)
90 //*****************************************
91 int main(void)
92 {
93 1 unsigned char i;
94 1 while(1)
95 1 {
96 2 i=read_key(); //调用键盘子程序
97 2 P0=~i; //在P0口显示键盘的值
98 2 }
99 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 127 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -