單片機(jī)實(shí)現(xiàn)簡單音樂發(fā)生器
void main()
本文引用地址:http://m.butianyuan.cn/article/201611/315961.htm{
uchar key,k;
TMOD = 0x01;// T0,工作方式1
ET0 = 1;
EA = 1;
while(1)
{
P1 = 0xf0;//發(fā)全0行掃描碼
if ((P1&0xf0)!=0xf0)//若有鍵按下
{
delay();//延時(shí)去抖動(dòng)
if ((P1&0xf0)!=0xf0)//延時(shí)后再判斷一次,去除抖動(dòng)影響
{
key = getkey();//調(diào)用鍵盤掃描函數(shù)
//根據(jù)獲取的按鍵位置得到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;//反相
/*根據(jù)所得的k值設(shè)定計(jì)數(shù)器1的計(jì)數(shù)初值*/
STH0 = tab[k]/256;
STL0 = tab[k]%256;
TR0 = 1;//開始計(jì)數(shù)
P1 = 0xf0;//發(fā)全0行掃描碼
while ((P1&0xf0)!=0xf0)//若沒有松開按鍵
{
P1 = 0xf0;
}
TR1 = 0;//若按鍵松開,則停止計(jì)數(shù),不產(chǎn)生脈沖輸出
}
}
}
}
評(píng)論