/**本程序由 www.ecn999.com 整理自互联网,仅供学习参考 欢迎光临8051单片机学习交流频道: www.ecn999.com #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位赋初值 } Tags: 矩阵式键盘 按键 8051 单片机 C51

评论