📄 16key-b.lst
字号:
C51 COMPILER V7.08 16KEY_B 12/20/2006 22:38:47 PAGE 1
C51 COMPILER V7.08, 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 /* ME500单片机开发系统演示程序 - 矩阵键盘键值显示 */
4 /* */
5 /* 一位数码管显示 */
6 /* */
7 /* 版本: V1.0 (2006/11/20) */
8 /* 作者: gguoqing (Email: gguoqing@willar.com) */
9 /* 网站: www.willar.com(伟纳电子) www.mcusj.com(伟纳单片机世界) */
10 /* 时间: 2006/07/25 */
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 V7.08 16KEY_B 12/20/2006 22:38:47 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
95 void beep()
96 {
97 1 unsigned char i;
98 1 for (i=0;i<180;i++)
99 1 {
100 2 delay0(6);
101 2 BEEP=!BEEP; //BEEP取反
102 2 }
103 1 BEEP=1; //关闭蜂鸣器
104 1 delay(250); //延时
105 1 }
106 //--------------------------------------------------
107 void delay0(uchar x) //x*0.14MS
108 {
109 1 unsigned char i;
110 1 while(x--)
111 1 {
112 2 for (i = 0; i<13; i++) {}
113 2 }
114 1 }
115 //--------------------------------------------------
116 main()
C51 COMPILER V7.08 16KEY_B 12/20/2006 22:38:47 PAGE 3
117 {
118 1 P0=0xFF; //置P0口
119 1 P2=0xFF; //置P2口
120 1 dis_buf=0xBF;
121 1
122 1 while(1)
123 1 {
124 2 keydown();
125 2 P0 = dis_buf; //键值送显示
126 2 delay(2);
127 2 P2 = 0x7F;
128 2 }
129 1 }
130 //--------------------------------------------------
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 245 ----
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 + -