您的位置 首页 动态

单片机完成简略音乐发生器

/*主程序*/voidmain(){ucharkey,k;TMOD=0x01;//T0,工作方式1ET0=1;EA=1;while(1){P1=0xf0;//发全0行扫描码if((P1…

/*主程序*/

void main()

{

uchar key,k;

TMOD = 0x01;// T0,工作方式1

ET0 = 1;

EA = 1;

while(1)

{

P1 = 0xf0;//发全0行扫描码

if ((P1&0xf0)!=0xf0)//若有键按下

{

delay();//延时去颤动

if ((P1&0xf0)!=0xf0)//延时后再判别一次,去除颤动影响

{

key = getkey();//调用键盘扫描函数

//依据获取的按键方位得到k值

switch(key)

{

case 0x11:// 1行1列

k = 0;

break;

case 0x21:// 1行2列

k = 1;

break;

case 0x41:// 1行3列

k = 2;

break;

case 0x81:// 1行4列

k = 3;

break;

case 0x12:// 2行1列

k = 4;

break;

case 0x22:// 2行2列

k = 5;

break;

case 0x42:// 2行3列

k = 6;

break;

case 0x82:// 2行4列

k = 7;

break;

case 0x14:// 3行1列

k = 8;

break;

case 0x24:// 3行2列

k = 9;

break;

case 0x44:// 3行3列

k = 10;

break;

case 0x84:// 3行4列

k = 11;

break;

case 0x18:// 3行4列

k = 12;

break;

case 0x28:// 3行4列

k = 13;

break;

case 0x48:// 3行4列

k = 14;

break;

case 0x88:// 3行4列

k = 15;

break;

default:

break;

}

P20 = ~P20;//反相

/*依据所得的k值设定计数器1的计数初值*/

STH0 = tab[k]/256;

STL0 = tab[k]%256;

TR0 = 1;//开端计数

P1 = 0xf0;//发全0行扫描码

while ((P1&0xf0)!=0xf0)//若没有松开按键

{

P1 = 0xf0;

}

TR1 = 0;//若按键松开,则中止计数,不发生脉冲输出

}

}

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/dongtai/267029.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部