📄 dianziqin.lst
字号:
C51 COMPILER V7.50 DIANZIQIN 04/29/2002 11:51:35 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE DIANZIQIN
OBJECT MODULE PLACED IN dianziqin.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE dianziqin.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "reg52.h"
2 #include <stdio.h>
3 #include <absacc.h>
4 #include <math.h>
5
6 sbit P2_7 = P2^7;
7 unsigned char STH0;
8 unsigned char STL0;
9
10 /* 音符与计数值对应表 */
11 unsigned int code tab[]={64260,64400,
12 64524,64580,64684,64777,
13 64820,64898,64968,65030,
14 65058,65110,65157,65178};
15
16
17 /*主程序 */
18 void main()
19 {
20 1 unsigned char key,k;
21 1 unsigned char i,j;
22 1 unsigned char get(void);
23 1
24 1 TMOD = 0x01;
25 1 EA = 1;
26 1 ET0 = 1;
27 1
28 1
29 1 while(1)
30 1 {
31 2 P1 = 0xf0;
32 2 if ((P1&0xf0)!=0xf0) // 有键按下
33 2 {
34 3
35 3 for(i=50;i>0;i--) // 去抖动
36 3
37 3 for(j=200;j>0;j--)
38 3 ;
39 3
40 3 if ((P1&0xf0)!=0xf0) // 确定键盘有按下
41 3 {
42 4 key = get(); // 调用键盘扫描函数
43 4
44 4
45 4 switch(key)
46 4 {
47 5
48 5 case 0x41: //第 1行第3列 低5 SO 392HZ
49 5 k = 2;
50 5 break;
51 5 case 0x81: //第 1行第4列 低6 LA 440HZ
52 5 k = 3;
53 5 break;
54 5 case 0x12: // 第2行第1列 低7 SI 494HZ
55 5 k = 4;
C51 COMPILER V7.50 DIANZIQIN 04/29/2002 11:51:35 PAGE 2
56 5 break;
57 5 case 0x22: // 第2行第2列 中1 DO 523HZ
58 5 k = 5;
59 5 break;
60 5 case 0x42: // 第2行第3列 中2 RE 587HZ
61 5 k = 6;
62 5 break;
63 5 case 0x82: // 第2行第4列 中3 MI 659HZ
64 5 k = 7;
65 5 break;
66 5 case 0x14: // 第3行第1列 中4FA 698HZ
67 5 k = 8;
68 5 break;
69 5 case 0x24: // 第3行第2列 中5 SO 784HZ
70 5 k = 9;
71 5 break;
72 5 case 0x44: // 第3行第3列 中6 LA 880HZ
73 5 k = 10;
74 5 break;
75 5 case 0x84: // 第3行第4列 中7 SI 988HZ
76 5 k = 11;
77 5 break;
78 5 case 0x18: // 第4行第1列 高1 DO 1046HZ
79 5 k = 12;
80 5 break;
81 5 case 0x28: // 第4行第2列 高2 RE 1175HZ
82 5 k = 13;
83 5 break;
84 5 case 0x48: // 第4行第3列 高3 MI 1318HZ
85 5 k = 14;
86 5 break;
87 5 case 0x88: // 第4行第4列 高4 FA 1397HZ
88 5 k = 15;
89 5 break;
90 5 default:
91 5 break;
92 5 }
93 4
94 4 P2_7 = ~P2_7;
95 4
96 4 /* 由k值设定计数器1的计数初值 */
97 4 STH0 = tab[k]/256;
98 4 STL0 = tab[k]%256;
99 4
100 4 TR0 = 1;
101 4
102 4 P1 = 0xf0;
103 4 while ((P1&0xf0)!=0xf0)
104 4 {
105 5 P1 = 0xf0;
106 5 }
107 4
108 4 TR1 = 0;
109 4 }
110 3 }
111 2 }
112 1 }
113
114
115
116
117 /* 定时器0中断服务子程序 */
C51 COMPILER V7.50 DIANZIQIN 04/29/2002 11:51:35 PAGE 3
118 void time0(void) interrupt 1
119 {
120 1 /* 设置计数初值 */
121 1 TH0 = STH0;
122 1 TL0 = STL0;
123 1 P2_7=~P2_7;
124 1 }
125
126
127 /* 键扫描子程序 */
128 unsigned char get(void)
129 {
130 1 unsigned char scan,temp;
131 1
132 1 if ((P1&0xf0)==0xf0)
133 1 return(0);
134 1
135 1 scan = 0xfe;
136 1 while((scan&0x10)!=0)
137 1 {
138 2 P1 = scan;
139 2 if ((P1&0xf0)!=0xf0)
140 2 {
141 3 temp = (P1&0xf0)|0x0f;
142 3
143 3 return((~scan)+(~temp));
144 3 }
145 2 else scan = (scan<<1)|0x01;
146 2 }
147 1 }
148
149
150
151
152
153
154
155
156
157
158
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 264 ----
CONSTANT SIZE = 28 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 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 + -