?? h25.c
字號:
#include <reg51.h>
#define mode 0x82;
xdata unsigned char Control _at_ 0x8003;
xdata unsigned char Speaker _at_ 0x8000;
xdata unsigned char OUTBIT _at_ 0x9002;
xdata unsigned char OUTSEG _at_ 0x9004;
xdata unsigned char IN _at_ 0x9001;
code unsigned char KeyTable[] = {
0x16, 0x15, 0x14, 0xff,
0x13, 0x12, 0x11, 0x10,
0x0d, 0x0c, 0x0b, 0x0a,
0x0e, 0x03, 0x06, 0x09,
0x0f, 0x02, 0x05, 0x08,
0x00, 0x01, 0x04, 0x07
};
unsigned char TestKey()
{
OUTBIT = 0;
return (~IN & 0x0f);
}
unsigned char GetKey()
{
unsigned char Pos;
unsigned char i;
unsigned char k;
i = 6;
Pos = 0x20;
do {
OUTBIT = ~ Pos;
Pos >>= 1;
k = ~IN & 0x0f;
} while ((--i != 0) && (k == 0));
if (k != 0) {
i *= 4;
if (k & 2)
i += 1;
else if (k & 4)
i += 2;
else if (k & 8)
i += 3;
OUTBIT = 0;
return(KeyTable[i]);
} else return(0xff);
}
/* ================================================================================ */
code unsigned int ToneTable[7] = {
64578, 64686, 64778, 64821, 64898, 64968, 65029
};
unsigned char PulseCNT;
unsigned char Pulse;
unsigned ToneHigh, ToneLow;
void Timer() interrupt 1
{
TR0 = 0;
TH0 = ToneHigh;
TL0 = ToneLow;
TR0 = 1;
Speaker = Pulse;
Pulse ++;
PulseCNT--;
}
void main()
{
unsigned char Key;
Control = mode;
OUTSEG = 0;
Pulse = 0;
TMOD = 0x01; // 方式 1 , 記時器
IE = 0x82; // EA=1, IT0 = 1
while (1) {
while (! TestKey) ; // 等按鍵
Key = GetKey();
if ( (Key >= 1) && (Key <= 7) ) {
ToneHigh = ToneTable[Key-1] >> 8;
ToneLow = ToneTable[Key-1] & 0xff;
TH0 = ToneHigh;
TL0 = ToneLow;
TR0 = 1;
PulseCNT = 100;
while (PulseCNT != 0) ; // 發 100 個脈沖
Speaker = 0;
TR0 = 0;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -