📄 16key-b.lst
字号:
C51 COMPILER V8.02 16KEY_B 05/27/2006 17:54:51 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 16KEY_B
OBJECT MODULE PLACED IN 16KEY-B.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 16KEY-B.C BROWSE DEBUG OBJECTEXTEND
line level source
1 /*******************************************************************/
2 /* */
3 /* ME300B单片机开发系统演示程序 - 矩阵键盘键值显示 */
4 /* */
5 /* 一位数码管显示 */
6 /* */
7 /* 邮箱: gguoqing@willar.com */
8 /* 网站: http://www.willar.com */
9 /* 作者: gguoqing */
10 /* 时间: 2006/05/27 */
11 /* */
-
12 /*【版权】Copyright(C)伟纳电子 www.willar.com All Rights Reserved */
13 /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息! */
14 /* */
15 /*******************************************************************/
16
17 #include <reg51.h>
18 #include <intrins.h>
19
20 #define uchar unsigned char
21 #define uint unsigned int
22
23 uchar table[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82, //0,1,2,3,4,5,6
24 0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xBF};//7,8,9,A,B,C,D,E,F,-
25
26 sbit BEEP = P3^7; //蜂鸣器驱动线
27 uchar dis_buf; //显示缓存
28 uchar temp;
29 uchar key; //键顺序吗
30
31 void beep(); //蜂鸣器
32 void delay0(uchar x); //x*0.14MS
33 //--------------------------------------------------
34 /* 延时子程序*/
35
36 void delay(uchar x)
37 { uchar j;
38 1 while((x--)!=0)
39 1 { for(j=0;j<125;j++)
40 2 {;}
41 2 }
42 1 }
43 //--------------------------------------------------
44 /*键扫描子程序*/
45 void keyscan(void)
46 {
47 1 P1=0x0F; //低四位输入
48 1 delay(1);
49 1 temp=P1; //读P1口
50 1 temp=temp&0x0F;
51 1 temp=~(temp|0xF0);
52 1 if(temp==1)
53 1 key=0;
54 1 else if(temp==2)
C51 COMPILER V8.02 16KEY_B 05/27/2006 17:54:51 PAGE 2
55 1 key=1;
56 1 else if(temp==4)
57 1 key=2;
58 1 else if(temp==8)
59 1 key=3;
60 1 else
61 1 key=16;
62 1
63 1 P1=0xF0; //高四位输入
64 1 delay(1);
65 1 temp=P1; //读P1口
66 1 temp=temp&0xF0;
67 1 temp=~((temp>>4)|0xF0);
68 1 if(temp==1)
69 1 key=key+0;
70 1 else if(temp==2)
71 1 key=key+4;
72 1 else if(temp==4)
73 1 key=key+8;
74 1 else if(temp==8)
75 1 key=key+12;
76 1 else
77 1 key=16;
78 1
79 1 dis_buf=table[key]; //查表得键值
80 1 }
81 //--------------------------------------------------
82 /*判断键是否按下*/
83 void keydown(void)
84 {
85 1 P1=0xF0;
86 1 if(P1!=0xF0)
87 1 {
88 2 keyscan();
89 2 beep();
90 2 // while(P1!=0xF0); //等待键释放
91 2 }
92 1 }
93 //--------------------------------------------------
94 void beep()
95 {
96 1 unsigned char i;
97 1 for (i=0;i<100;i++)
98 1 {
99 2 delay0(4);
100 2 BEEP=!BEEP; //BEEP取反
101 2 }
102 1 BEEP=1; //关闭蜂鸣器
103 1 delay(250); //延时
104 1 }
105 //--------------------------------------------------
106 void delay0(uchar x) //x*0.14MS
107 {
108 1 unsigned char i;
109 1 while(x--)
110 1 {
111 2 for (i = 0; i<13; i++) {}
112 2 }
113 1 }
114 //--------------------------------------------------
115 main()
116 {
C51 COMPILER V8.02 16KEY_B 05/27/2006 17:54:51 PAGE 3
117 1 P0=0xFF; //置P0口
118 1 P2=0xFF; //置P2口
119 1 dis_buf=0xBF;
120 1
121 1 while(1)
122 1 {
123 2 keydown();
124 2 P0 = dis_buf; //键值送显示
125 2 delay(2);
126 2 P2 = 0x7F;
127 2 }
128 1 }
129 //--------------------------------------------------
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 240 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 20 1
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 + -