PWM蜂鸣器实验
[实验目的]
掌握定时器的使用;掌握蜂鸣器的发声原理;熟悉PWM波形的产生。
[实验内容]
MCU-AT89S52 P00 蜂鸣器 BUZ [实验要求]
用定时器设计PWM波形驱动蜂鸣器发声.
[实验步骤]
1、打开Uv4 IDE环境,选择菜单Project的下拉菜单Open Project选项, 加载后缀名为uvproj的工程文件。
2、选择菜单Project的下拉菜单Options for Target选项。在弹出的窗口中,选择output选项,在Creat HEX File的勾选项中,勾选。这样才能生成HEX文件。 3、选择菜单Project的下拉菜单Build target选项,如无错误或特别警告,编译链接完成后就会产生相应工程的HEX文件了。
[程序及注释]
#include //头文件 #include
#define uint unsigned int #define uchar unsigned char sbit BUZZER=P0^0;//发声音口 uchar code T0_H[16]={0xFF,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE}; //定时器延时高位 uchar code T0_L[16]={0xF1,0x4,0x90,0xC,0x44,0xAC,0x9,0x34,0x82,0xC8,0x06,0x22,0x56,0x85,0x9A,0xC1}; //定时器延时低位 uchar code music[32]={8,0,8,9,8,0xB,0xA,0,8,0,8,9,8,0xC,0xB,0,8,0,8,0xF,0xD,0xB,0xA,9,0xE,0,0xE,0xD,0xB,0xC,0xB,0x0}; //音律选择
uchar code music_L[32]={2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4}; //延时长度 uchar a,b;
void delay_music(uint v) //延时 {
while(v!=0) v--; }
void delay_music1(uint j)//延时 { while(j!=0) { j--; delay_music(200); } }
void delay_music2(uint j)//延时 { while(j!=0) { j--; delay_music1(80); } }
/************************主函数****************************************/ void main() {//uint i; uchar k,n,m; delay_music(100); TMOD=0x11; //初始化定时器 TH1=0xfc; TL1=0x66; EA=1; //开中断 ET0=0; TR0=0; ET1=0; TR1=0; while(1) { ET1=1; //打开定时器 TR1=1; //启动计数 for(k=0;k<32;k++) //循环32次 { n=music[k]; m=music_L[k]; a=T0_H[n]; b=T0_L[n]; delay_music2(m);
} } }
/**********************定时计数器T1中断处理****************************/ time1 () interrupt 3 using 3 //定时器中断 { TH1=a; //初始化定时器计数器 TL1=b; BUZZER=!BUZZER; //蜂鸣器取反 }
[实验现象及结果]
蜂鸣器演奏歌曲
实
验八
外扩WDT看门狗实验
[实验目的]
理解硬件看门狗的作用,比较硬件看门狗同软件看门狗的差别。
[实验内容]
MCU-AT89S52 看门狗电路 P10 P11 P00~ P07 RST WDT /RESET 8位独立开关 SW1 8位独立LED D1~ D8 74LS04反相器 A1 Y1 注意:AT89S52是高电平复位,因此在使用外部看门狗电路的时候需要在看门狗电路引脚RESET后加反相器,经反相个后送到单片机的RST引脚完成复位操作。
[实验要求]
用外部看门狗实现对单片机的复位当不喂看门狗的时候,系统会自动复位使得流水灯不能运行当按时喂狗后,系统不会自动复位,流水等能在此次运行。
[实验步骤]
1、打开Uv4 IDE环境,选择菜单Project的下拉菜单Open Project选项, 加载后缀名为uvproj的工程文件。
2、选择菜单Project的下拉菜单Options for Target选项。在弹出的窗口中,选择output选项,在Creat HEX File的勾选项中,勾选。这样才能生成HEX文件。
3、选择菜单Project的下拉菜单Build target选项,如无错误或特别警告,编译链接完成后就会产生相应工程的HEX文件了。
[程序及注释]
#include
#define uchar unsigned char //数据类型宏定义 #define uint unsigned int /********引脚定
**************************************************************/ #define LED P0 sbit SW1=P1^0; sbit WDT=P1^1; /********延时函
**************************************************************/ void delayms(uchar ms) // 延时子程序 { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } }
/*********主函
***************************************************************/ void main(void) { LED = 0xfe; //初始化LED WDT=1; _nop_(); //初始化看门狗 WDT=0; _nop_(); WDT=1; _nop_(); WDT=0; while(1) { if(SW1) //SW1=1时,喂狗 { WDT=1; _nop_(); WDT=0;
义
数
数
}
}
_nop_(); WDT=1; _nop_(); WDT=0; }
delayms(150); //延时 delayms(150);
LED = _crol_(LED,1);//循环右移1位,点亮下一个LED
[实验现象及结果]
1.当开关SW1置高时,程序清除硬件看门狗 LED流水灯正常运行
总结:通过这次单片机实验,让我真真正正见识了单片机,基本上可以说是大学以来第一次真正可以看到自己完成“电子产品”的实验课,非常的有意义。在单片机实验课上,不仅提高了每个同学的动手能力,我们需要自己自己思考电路,自己接线,再自己下载程序,我们还要自己编写程序,在不懂的时候可以参考历程来设计程序。同时锻炼了我们的逻辑思维能力,可以说是一举多得。在单片机实验课上,我们所使用的实验箱也是相对完成,几乎没有损坏的,这个也是其他实验课上难以遇到的。我们的单片机实验器材非常完善好用。总之,这次单片机实验让我们获益良多,为将来成为电子工程师打下了坚实的基础。