基于51单片机的独立按键
选用芯片AT89S52
/*****************************************************************
//此程序功能如下:独立按键按下后数码管加一,同时蜂鸣器响一下
******************************************************************/
#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
u16 i,j,k,q;
u16 n=0;
u8 code smgduan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
u8 code smgwei[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit k1=P1^4;
sbit beep=P3^6;
void delayms(u16 ms) //毫秒延时
{
for(i=0;i<ms;i++)
{
for(j=115;j>0;j--);
}
}
void speaker() //蜂鸣器发声
{
beep=0;
delayms(1);
beep=1;
delayms(1);
}
void key() //按下检查和消抖
{
if(k1==0)
{
delayms(20);
if(k1==0)
{
n=n+1; //按下后数码管加一,同时蜂鸣器响一下
for(q=0;q<100;q++)
{
speaker();
}
}
if(n>15)
{
n=0;
}
P0=smgduan[n];
while(k1==0);
}
}
void main()
{
P2=smgwei[0];
P0=smgduan[0];
while(1)
{
key();
}
}