用单片机实现8个按键的简单电子琴

仿真半天结果也没出来,希望大家给我看看……

#include<reg52.h>
unsigned char tab[]={64580,64684,64777,64820,64898,64968,65030,65058};
unsigned int k;
sbit key1=P2^0;
sbit key2=P2^1;
sbit key3=P2^2;
sbit key4=P2^3;
sbit key5=P2^4;
sbit key6=P2^5;
sbit key7=P2^6;
sbit key8=P2^7;
sbit d1=P1^0;
void delay();
void keyscan();
void main()
{
TMOD=0x01;
EA=1;
ET0=1;
TH0=k/256;
TL0=k%256;
while(1)
keyscan();
}

void keyscan()
{
if(P2!=0xff)
{
if(key1==0)
{
delay();
if(key1==0)
k=tab[0];
}
if(key2==0)
{
delay();
if(key2==0)
k=tab[1];
}
if(key3==0)
{
delay();
if(key3==0)
k=tab[2];
}
if(key4==0)
{
delay();
if(key4==0)
k=tab[3];
}
if(key5==0)
{
delay();
if(key5==0)
k=tab[4];
}
if(key6==0)
{
delay();
if(key6==0)
k=tab[5];
}
if(key7==0)
{
delay();
if(key7==0)
k=tab[6];
}
if(key8==0)
{
delay();
if(key8==0)
k=tab[7];
}
TR0=1;
}
else TR0=0;
}
void delay()
{
unsigned char x,y;
for(x=0;x<10;x++)
for(y=0;y<100;y++);
}
void time() interrupt 1
{
TH0=k/256;
TL0=k%256;
d1=~d1;
}

第1个回答  2014-05-06

简单的电子琴仿真实例,可以参考一下。

追问

嗯,谢谢,咱们的思路基本上差不多,我的程序不知道哪里出了问题?

追答

比较一下吧

追问

嗯,我知道了,是刚开始的定义:unsigned int 我写成了unsigned char,唉,之前因为一直是写unsigned char ,所以习惯性的没改过来,害的我检查了好多遍,太粗心了!谢谢啊!

本回答被提问者采纳
第2个回答  2014-05-06
可以了。

#include<reg52.h>

sbit d1 = P3^7;
unsigned int tab[] = {

64580,64684,64777,64820,64898,64968,65030,65058};
unsigned char k, k1, k2;

void keyscan()
{
if(P1 != 0xff) {
k = 8;
if(P1 == 0xfe) k = 0;
if(P1 == 0xfd) k = 1;
if(P1 == 0xfb) k = 2;
if(P1 == 0xf7) k = 3;
if(P1 == 0xef) k = 4;
if(P1 == 0xdf) k = 5;
if(P1 == 0xbf) k = 6;
if(P1 == 0x7f) k = 7;
if (k < 8) {
k1 = tab[k] / 256;
k2 = tab[k] % 256;
TR0 = 1;
}
else TR0 = 0;
}
else TR0 = 0;
}
void main()

{
TMOD = 0x01;
ET0 = 1;
EA = 1;
while(1) keyscan();
}
void time() interrupt 1

{
TH0 = k1;
TL0 = k2;
d1 = ~d1;
}本回答被网友采纳