📄 -
字号:
C51 COMPILER V7.10 LED_KEY 09/22/2011 23:54:41 PAGE 1
C51 COMPILER V7.10, COMPILATION OF MODULE LED_KEY
OBJECT MODULE PLACED IN LED_KEY.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LED_KEY.C BROWSE DEBUG OBJECTEXTEND
line level source
1
2 /********************************************************************************
3 * 描述: *
4 * 矩阵键盘数码管显示键值 *
5 * 排线连接方法:JP8(P1) 与JP4(矩阵键盘接口)连接 P0与JP3(静态数码管)连接 *
6 * 矩阵键盘定义: *
7 * P1.1-P1.3为行线,P1.4-P1.7为列线 *
8 * 喇叭接P1.5口 矩阵键盘P1口, *
9 * 注意:请将JP165短路冒断开 *
-
10 ********************************************************************************/
11
12 #include <reg51.h>
13
14 #define uchar unsigned char //宏的定义变量类型 uchar 代替 unsigned char
15 #define uint unsigned int //宏的定义变量类型 uint 代替 unsigned int
16
17 uchar dis_buf; //显示缓存
18 uchar temp;
19 uchar key; //键顺序码
20 void delay(uchar x); //x*0.14MS
21
22 // 此表为 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f
23 unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~
-0x39,~0x5E,~0x79,~0x71};
24
25 /*************************************************************
26 * *
27 * 延时子程序 *
28 * *
29 *************************************************************/
30
31 void delay(uchar x)
32 { uchar j;
33 1 while((x--)!=0) //CPU执行x*12次
34 1 { for(j=0;j<125;j++)
35 2 {;}
36 2 }
37 1 }
38
39 /*************************************************************
40 * *
41 * 键扫描子程序 (3*4 的矩阵) P1.4 P1.5 P1.6 P1.7为列 *
42 * P1.1 P1.2 P1.3为行 *
43 * *
44 *************************************************************/
45
46 void keyscan(void)
47 { temp = 0;
48 1 P1=0xF0; //高四位输入 列为高电平 行为低电平
49 1 delay(1); //延时
50 1 temp=P1; //读P1口
51 1 temp=temp&0xF0; //屏蔽低四位
52 1 temp=~((temp>>4)|0xF0);
53 1 if(temp==1) // p1.4 被拉低
C51 COMPILER V7.10 LED_KEY 09/22/2011 23:54:41 PAGE 2
54 1 key=1; //第1个按键键值
55 1 else if(temp==2) // p1.5 被拉低
56 1 key=2; //第2个按键键值
57 1 else if(temp==4) // p1.6 被拉低
58 1 key=3; //第3个按键键值
59 1 else if(temp==8) // p1.7 被拉低
60 1 key=4; //第4个按键键值
61 1 else
62 1 key = 16;
63 1
64 1 P1=0x0F; //低四位输入 行为高电平 列为低电平
65 1 delay(1); //延时
66 1 temp=P1; //读P1口
67 1 temp=temp&0x0F;
68 1 temp=~(temp|0xF0);
69 1 if(temp==2) //第一行 p1.1 被拉低(直接temp==2 是因为我们P1.0空的,是3*4的矩阵键盘)
70 1 key=key+0;
71 1 else if(temp==4) //第二行 p1.2 被拉低
72 1 key=key+4;
73 1 else if(temp==8) //第三行 p1.3 被拉低
74 1 key=key+8;
75 1 else
76 1 key = 16;
77 1
78 1
79 1 dis_buf = key; //键值入显示缓存
80 1 dis_buf = dis_buf & 0x0f;
81 1
82 1 }
83
84 /*************************************************************
85 * *
86 *判断键是否按下 *
87 * *
88 *************************************************************/
89
90 void keydown(void)
91 {
92 1 P1=0xF0; //将高4位全部置1 低四位全部置0
93 1 if(P1!=0xF0) //判断按键是否按下 如果按钮按下 会拉低P1其中的一个端口
94 1 {
95 2 keyscan(); //调用按键扫描程序
96 2 }
97 1 }
98
99 /*************************************************************
100 * *
101 * 主程序 *
102 * *
103 *************************************************************/
104 main()
105 {
106 1 P0=0xFF; //置P0口
107 1 P1=0xFF; //置P1口
108 1 delay(10); //延时
109 1
110 1 while(1)
111 1 {
112 2 keydown(); //调用按键判断检测程序
113 2 P0 = LED7Code[dis_buf%16]&0x7f; //LED7 0x7f为小数点 共阴和共阳此处也是不一样; %16表示输出16进制
114 2
115 2 }
C51 COMPILER V7.10 LED_KEY 09/22/2011 23:54:41 PAGE 3
116 1 }
117
118
119
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 188 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 3 ----
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 + -