数码管显示蜂鸣器控制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
sbit A0=P3^0; //二位位选
sbit A1=P3^1;
bit buzzer_flag=1;
unsigned char
table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
void delay(unsigned int mseconds)
{
for(;mseconds>0;mseconds--);
}
void display(unsigned char second)
{ unsigned char m,n;
m=second/10;
n= second%10;
A1=1; //显示十位数
A0=0;
If(buzzer_flag==0)
{P1=table[m]&0x7f;} //蜂鸣器开else
{ P1=table[m];} //蜂鸣器关delay(100);
A1=0; //显示个位数A0=1;
If(buzzer_flag==0)
{P1=table[n]&0x7f;} //蜂鸣器开else
{ P1=table[n];} //蜂鸣器关delay(100);
}
void main()
{uchar i;
sys_init(void);
while(1)
{ buzzer_flag=0;
for(i=0;mseconds>20;i++)
{display(second);}
buzzer_flag=1;
for(i=0;mseconds>20;i++);
{display(second);}
}
}
void sys_init(void) //定时器T0、T1初始化,并启动定时T0、T1中断
{
TMOD=0x12; //T0为工作方式2,T1为方式1
th0=0xf3; //T0赋初值
tl0=0xf3;
th1=0xb0; //T1赋初值
tl0=0x3c;
tr0=1; //启动T0/T1
tr1=1;
IE=0x8A; //允许T0/T1中断
}
//********中断服务程序*******//
T0 interrupt(void) interrupt 1 using 2
{ inf_send = !inf_send; }
T1 interrupt(unsigned char second) interrupt 3 using 3
{
TR0=0;
EA=0; //暂停中断th1=0xb0; //T1赋初值tl0=0x3c;
unsigned char msec++;
if(msec>20)
{msec=0;
second++;}
If(second>99)
{second=0;}
TR0=1;
EA=1;
}