单片机编写8按键电子琴的C语言程序谁有?,发我一份,huangjiao1968@yahoo.com.cn,谢榭,急需学习用

 我来答
锦绣江山千万年
2012-11-01 · TA获得超过4159个赞
知道大有可为答主
回答量:1424
采纳率:40%
帮助的人:1481万
展开全部
这个是利用实验仪上提供的键盘,使数字键1、2、3、4、5、6、7作为电子琴按键,按下即发出相应的音调。用8255的PA.0口发出音频脉冲,驱动喇叭。可以参考一下。
#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;
}
}
}
追问
还有没最简单的呢,师兄,就是7个或者8个独立的按键 实现DO ,RE,MI,FA,SO,LA,SI
追答
这已经是最简单的了
懿冷清秋828
2012-11-01
知道答主
回答量:27
采纳率:0%
帮助的人:9.3万
展开全部
自己去鱼C下
追问
什么是鱼C?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式