⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex78.c

📁 单片机C语言应用100例.rar
💻 C
字号:
//实例78:矩阵式键盘按键音
#include<reg51.h>   //包含51单片机寄存器定义的头文件
sbit sound=P3^7;    //将sound位定义为P3.7

/**************************************************************
函数功能:蜂鸣器发声延时约120ms
**************************************************************/
 void delay_sound(void)   
{
   unsigned char i;
	for(i=0;i<250;i++)
	       ;
 }
/**************************************************************
函数功能:软件延时子程序约20ms
**************************************************************/
 void delay20ms(void)   
{
   unsigned char i,j;
	for(i=0;i<100;i++)
	 for(j=0;j<60;j++)
           ;
 }
/**************************************************************
函数功能:主函数
**************************************************************/ 
 void main(void)
 {
   EA=1;                  //开总中断
	ET0=1;                 //定时器T0中断允许       
   TMOD=0x01;             //使用定时器T0的模式1
	TH0=(65536-500)/256;   //定时器T0的高8位赋初值
	TL0=(65536-500)%256;   //定时器T0的高8位赋初值 
	TR0=1;                 //启动定时器T0	   	   
	while(1)               //无限循环,等待键盘按下
		;

}
/**************************************************************
函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位
**************************************************************/ 
 void time0_interserve(void) interrupt 1 using 1    //定时器T0的中断编号为1,使用第一组寄存器
  {
    unsigned char i;
     TR0=0;                   //关闭定时器T0
     P1=0xf0;                 //所有行线置为低电平“0”,所有列线置为高电平“1”
	  if((P1&0xf0)!=0xf0)      //列线中有一位为低电平“0”,说明有键按下
	     delay20ms();           //延时一段时间、软件消抖
	  if((P1&0xf0)!=0xf0)      //确实有键按下
	    {
          for(i=0;i<200;i++)  //让P3.7引脚电平不断取反输出音频
           {
              sound=0;
             delay_sound();
			 	  sound=1;
				  delay_sound();
				}	
       }
     TR0=1;                    //开启定时器T0
     TH0=(65536-500)/256;      //定时器T0的高8位赋初值
	  TL0=(65536-500)%256;      //定时器T0的高8位赋初值		 
 }


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -