📄 1210_key_disp.lst
字号:
C51 COMPILER V7.50 1210_KEY_DISP 11/17/2005 00:02:00 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE 1210_KEY_DISP
OBJECT MODULE PLACED IN 1210_key_disp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1210_key_disp.c COMPACT BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "1210_Key_Disp.h"
2 #include "MSC1210.H"
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 sbit P2_2 = P2^2;
8 sbit P2_3 = P2^3;
9 sbit P2_4 = P2^4;
10
11 unsigned char key_buff = 0;
12 unsigned char dis_buffer[] = {0, 1, 2, 3, 0xf, 5, 7, 8};
13 unsigned char seg[] = { 0x3f, 0x06, 0x5b, 0x4f,
14 0x66, 0x6d, 0x7d, 0x07,
15 0x7f, 0x6f, 0x77, 0x7c,
16 0x39, 0x5e, 0x79, 0x71,
17 0xbf, 0x86, 0xdb, 0xcf,
18 0xe6, 0xed, 0xfd, 0x87,
19 0xff, 0xef, 0xf7, 0xfc,
20 0xb9, 0xde, 0xf9, 0xf1,
21
22 0x80, 0x40, 0x00, 0x73, 0xc0};
23 //delay
24 void delay(int v)
25 {
26 1 while(v != 0) v --;
27 1 }
28
29
30 //dispunsigned char *disp_buffer
31 void disp(void)
32 {
33 1 unsigned char i = 0, j = 0;
34 1 unsigned char temp_wei = 0x0, temp_duan = 0;
35 1
36 1 for(i = 0; i < 8; i ++)
37 1 {
38 2 P2_3 = 0; //138---NO
39 2 temp_duan = seg[ *(dis_buffer + i) ] ;
40 2 for(j = 0; j < 8; j ++)
41 2 {
42 3 P2_2 = temp_duan & 0x80;
43 3 temp_duan = temp_duan << 1;
44 3 P2_4 =0; P2_4 =1; //时钟
45 3 }
46 2 P2_3 = 1;
47 2 P2 = (P2 & 0xf8) | temp_wei;
48 2 temp_wei ++;
49 2 delay(100);
50 2 }
51 1 }
52
53
54 uchar key_enter(void)
55 {
C51 COMPILER V7.50 1210_KEY_DISP 11/17/2005 00:02:00 PAGE 2
56 1 uchar conter = 0xfe;
57 1 P2 = 0;
58 1 while( conter != 0xdf )
59 1 {
60 2 P2 = conter;
61 2 if( conter != P2 ) //如果不等,则有按键按下
62 2 { //如果等,本行没有按键,考察其他行
63 3 return( 0xff ); //有
64 3 }
65 2 conter =~ conter;
66 2 conter = conter << 1;
67 2 conter =~ conter;
68 2 }
69 1 return(0x00); //没有
70 1 }
71
72
73 unsigned char key4_12code(void) //扫描键码值
74 {
75 1 unsigned char hang = 0xfe, i, temp = 0;
76 1 for(i = 0; i < 4; i ++)
77 1 {
78 2 P2 = hang; //扫描信号
79 2 if( P2 != hang)
80 2 {
81 3 if( -( P2 - hang ) == 1)
82 3 return( 3 + temp );
83 3 else
84 3 if(-(P2-hang) == 2)
85 3 return( 2+temp );
86 3 else
87 3 if(-(P2-hang) == 4)
88 3 return( 1+temp );
89 3 else
90 3 if(-(P2-hang) == 8)
91 3 // return(1+temp);
92 3 // else
93 3 // if(-(P1-hang)==0x10)
94 3 return( 0+temp );
95 3 }
96 2 hang = ~hang;
97 2 hang = hang << 1 ;
98 2 hang = ~hang;
99 2 temp = temp + 4;
100 2 }
101 1 }
102
103
104 //键盘程序,开始等待按键,有了之后判断,判断之后等待松开,返回键值与印刷板一样。
105 uchar get_key(void)
106 {
107 1 uchar code keytemp_tab[] = {0xb, 7, 0xa, 0xff, 9, 6, 0xff, 2, 8, 0xff, 4, 1, 0xff, 5, 3, 0};
108 1 uchar key_buffer = 0xff;
109 1 while( key_enter() == 0)
110 1 disp();
111 1 {
112 2 key_buffer = key4_12code();
113 2 while(key_enter() != 0);
114 2 // dis_buffer[0] = keytemp_tab[key_buffer];
115 2 return( keytemp_tab[key_buffer] );
116 2 }
117 1 }
C51 COMPILER V7.50 1210_KEY_DISP 11/17/2005 00:02:00 PAGE 3
118
119
120
121
122
123
124
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 208 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = 46 ----
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 + -