logo资料库

基于proteus的51单片机仿真实例 ,简易门铃应用实例.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
基于基于proteus的的51单片机仿真实例 基于proteus的51单片机仿真实例 之简易门铃应用实例。利用定时器控制蜂鸣器发出模拟的“叮咚”门铃声。 单片机仿真实例 ,简易门铃应用实例 简易门铃应用实例 1、利用定时器控制蜂鸣器发出模拟的“叮咚”门铃声。 在实际的门铃声音中,“叮”的声音较短并且声音比较大,我们可以让蜂鸣器发出频率较高、时间较短的声音。 “咚”的声音较长并且声音比较舒缓,我们可以让蜂鸣器以较低的频率鸣叫,鸣叫的声音适当加长。 2、利用定时器实现,定时器初始定时700us,利用按键控制蜂鸣器,当按下按键后,启动定时器开始工作,在前400次定时器 中断触发时,都是700us的时间间隔,模拟“叮”的声音,在后面400次中断中,定时器延时1ms。模拟“咚”的声音。 我们可以试着改变定时器的定时周期,让蜂鸣器发出不同长度和音量的声音。 3、在keil c51中新建工程ex74,编写如下程序代码,编译并生成ex74.hex文件 //简易门铃声音演示实例 #include //寄存器头文件包含 //引脚定义,分别定义按键和蜂鸣器的引脚 sbit KEY = P1^7; sbit SOUNDER = P3^0; //全局变量定义,定义定时中断溢出次数 unsigned char counter; //主函数 void main(void) { //IE = 0x82; TMOD = 0x00; //定时器0工作在模式0 TH0 = (8192 - 700) / 32; //定时器赋初值 TL0 = (8192 - 700) % 32; EA = 1; //开总中断 ET0 = 1; //开定时器0定时溢出中断 SOUNDER = 0; while(1) { if(KEY == 0)//判断按键按下 { TR0 = 1; //开启定时器 while(KEY == 0); //等待按键松开, } } } //定时器0的定时中断函数 void Timer0(void) interrupt 1
{ SOUNDER = ~SOUNDER;//蜂鸣器输出电平取反 counter++;//中断发生次数加1 //中断发生次数小于400,发出“叮”的模拟音 if(counter < 400) { TH0 = (8192 - 700) / 32; TL0 = (8192 - 700) % 32; } //中断发生次数大于于400,但是小于800,发出“咚”的模拟音 else if (counter < 800) // { TH0 = (8192 - 1000) / 32; TL0 = (8192 - 1000) % 32; } else//完成一次门铃发音 { TR0 = 0;//关闭定时器 counter = 0;//中断次数清0 } } 4、在proteus中新建仿真文件ex74.dsn,电路原理图如下所示 5、将ex74.hex文件载入at89c51中,启动仿真,观察运行结果。如下图,按动按键,蜂鸣器即可发出声音,在电脑上接上音 箱,,就能听到声音。我们可以改变定时器的定时处置和中断次数来改变蜂鸣器的声音。
分享到:
收藏