数码管显示蜂鸣器控制

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

}

相关文档
最新文档