矩阵键盘.lst
来自「一些51单片机基础模块的程序」· LST 代码 · 共 114 行
LST
114 行
C51 COMPILER V7.50 __阵键盘 04/09/2009 18:36:00 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE __阵键盘
OBJECT MODULE PLACED IN 矩阵键盘.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 矩阵键盘.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /********************************************************************
2 * 文件名 : 矩阵键盘.c
3 * 描述 : 该文件实现了 4 * 4 键盘的试验。通过数码管的最后两位来显示当前的按键值。
4 * 创建人 : 东流,2009年4月9日
5 * 版本号 : 2.0
6 * 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
7 * 感谢“中国自动化资讯网”对本工作室的大力支持。
8 *********************************************************************/
9 #include<reg51.h>
10 #include<intrins.h>
11
12 #define uint unsigned int
13 #define uchar unsigned char
14
15 uchar code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
16
17 /********************************************************************
18 * 名称 : Delay_1ms()
19 * 功能 : 延时子程序,延时时间为 1ms * x
20 * 输入 : x (延时一毫秒的个数)
21 * 输出 : 无
22 ***********************************************************************/
23 void Delay_1ms(uint i)
24 {
25 1 uchar x,j;
26 1 for(j=0;j<i;j++)
27 1 for(x=0;x<=148;x++);
28 1 }
29
30
31 /********************************************************************
32 * 名称 : Keyscan()
33 * 功能 : 实现按键的读取。下面这个子程序是按处理 矩阵键盘 的基本方法处理的。
34 该函数的原理将在“视频及教程”文件夹中介绍。
35 * 输入 : 无
36 * 输出 : 按键值
37 ***********************************************************************/
38 uchar Keyscan(void)
39 {
40 1 uchar i,j, temp, Buffer[4] = {0xef, 0xdf, 0xbf, 0x7f};
41 1 for(j=0; j<4; j++)
42 1 {
43 2 P1 = Buffer[j];
44 2 /*以下三个_nop_();作用为让 P1 口的状态稳定*/
45 2 _nop_();
46 2 _nop_();
47 2 _nop_();
48 2 temp = 0x01;
-
49 2 for(i=0; i<4; i++)
50 2 {
51 3 if(!(P1 & temp))
52 3 {
53 4 return (i+j*4); //返回取得的按键值
54 4 }
C51 COMPILER V7.50 __阵键盘 04/09/2009 18:36:00 PAGE 2
55 3 temp <<= 1;
56 3 }
57 2 }
58 1 }
59
60 /********************************************************************
61 * 名称 : Main()
62 * 功能 : 主函数
63 * 输入 : 无
64 * 输出 : 无
65 ***********************************************************************/
66 void Main(void)
67 {
68 1 uchar Key_Value; //读出的键值
69 1 while(1)
70 1 {
71 2 P1 = 0xf0;
72 2 if(P1 != 0xf0)
73 2 {
74 3 Delay_1ms(15); //按键消抖
75 3 if(P1 != 0xf0)
76 3 {
77 4 Key_Value = Keyscan();
78 4 }
79 3 }
80 2 P0 = table[Key_Value / 10]; //显示高位键值
81 2 P2 = 0x02;
82 2 Delay_1ms(5);
83 2 P0 = table[Key_Value % 10]; //显示低位键值
84 2 P2 = 0x01;
85 2 Delay_1ms(5);
86 2 }
87 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 153 ----
CONSTANT SIZE = 14 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 5
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?