單片機(jī)C語(yǔ)言實(shí)例-344-矩陣式鍵盤(pán)按鍵音
//實(shí)例78:矩陣式鍵盤(pán)按鍵音
#include<reg51.h> //包含51單片機(jī)寄存器定義的頭文件
sbit sound=P3^7; //將sound位定義為P3.7
/**************************************************************
函數(shù)功能:蜂鳴器發(fā)聲延時(shí)約120ms
**************************************************************/
void delay_sound(void)
{
unsigned char i;
for(i=0;i<250;i++)
;
}
/**************************************************************
函數(shù)功能:軟件延時(shí)子程序約20ms
**************************************************************/
void delay20ms(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<60;j++)
;
}
/**************************************************************
函數(shù)功能:主函數(shù)
**************************************************************/
void main(void)
{
EA=1; //開(kāi)總中斷
ET0=1; //定時(shí)器T0中斷允許
TMOD=0x01; //使用定時(shí)器T0的模式1
TH0=(65536-500)/256; //定時(shí)器T0的高8位賦初值
TL0=(65536-500)%256; //定時(shí)器T0的高8位賦初值
TR0=1; //啟動(dòng)定時(shí)器T0
while(1) //無(wú)限循環(huán),等待鍵盤(pán)按下
;
}
/**************************************************************
函數(shù)功能:定時(shí)器0的中斷服務(wù)子程序,進(jìn)行鍵盤(pán)掃描,判斷鍵位
**************************************************************/
void time0_interserve(void) interrupt 1 using 1 //定時(shí)器T0的中斷編號(hào)為1,使用第一組寄存器
{
unsigned char i;
TR0=0; //關(guān)閉定時(shí)器T0
P1=0xf0; //所有行線置為低電平“0”,所有列線置為高電平“1”
if((P1&0xf0)!=0xf0) //列線中有一位為低電平“0”,說(shuō)明有鍵按下
delay20ms(); //延時(shí)一段時(shí)間、軟件消抖
if((P1&0xf0)!=0xf0) //確實(shí)有鍵按下
{
for(i=0;i<200;i++) //讓P3.7引腳電平不斷取反輸出音頻
{
sound=0;
delay_sound();
sound=1;
delay_sound();
}
}
TR0=1; //開(kāi)啟定時(shí)器T0
TH0=(65536-500)/256; //定時(shí)器T0的高8位賦初值
TL0=(65536-500)%256; //定時(shí)器T0的高8位賦初值
}
更多詳情參考附件文檔
+08:00C137聯(lián)盟網(wǎng)9013.png (10.34 KB, 下載次數(shù): 1)
下載附件
保存到相冊(cè)
2022-3-31 10:18 上傳
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng) 回復(fù)
|