|
单片机/C51学习板
蜂鸣器发声程序
|
|
这是一个让蜂鸣器发出“嘟嘟嘟”声音的序。该程序示例如何控制实验板上的交流蜂鸣器发出声音。 |
1. |
点击 这里 下载示例工程,保存并解压到 D: 盘根目录下。 |
2. |
启动 ISP 软件,将 D:\beep 下的 mon51.hex 文件烧写到实验板上,关闭 ISP 软件。如果实验板上已有调试代理程序,可略过这一步。ISP 软件的使用方法参见:在线烧写程序 。 |
3. |
启动 Keil uVision2 集成开发软件,打开 D:\beep 下的 beep.Uv2 工程,重新编译。Keil uVision2 软件的使用方法见:keil C51使用入门 。 |
4. |
设置好 Monitor-51 Driver 所使用的串口号后,在 Debug 菜单下,点击 Start/Stop Debug session 命令,启动调试界面。如何设置串口号,请参阅:使用keil C51仿真调试 。 |
5. |
在命令行窗口里,输入 pc = 0x2000 命令,然后按 F5 键,执行该程序。 |
|
#include <reg52.h> /* special function register declarations */
#include <absacc.h> /* for the intended 8051 derivative */
#include <stdio.h> /* prototype declarations for I/O functions */
/***************************************************
* A型板,定义 model 为 1,B型板,定义 model 为 2。*
***************************************************/
#define model 2
#if model == 1
sbit SCC=P3^2;
#else
sbit SCC=P1^7;
#endif
sbit SCR=P3^3;
sbit SCI0=P3^5;
sbit SCI1=P3^4;
sbit BP=P1^3;
unsigned int i;
bit BPgate = 1;
/***************************************************
* 主程序入口。 *
***************************************************/
void main (void)
{
/***************************************************
* 设置 T0 定时器工作在8位自动装载模式。 *
***************************************************/
TMOD |= 0x02;
/***************************************************
* 设定重载值为0x00。 *
***************************************************/
TH0 = 0x00;
/***************************************************
* 起动 T0 定时器。 *
***************************************************/
TR0 = 1;
/***************************************************
* 设定 T0 定时器的中断优先级为高,避免被其它中断打*
* 断,造成计时不准。 *
***************************************************/
IP |= 0x02;
/***************************************************
* 允许 T0 定时器中断,并将全局中断控制位置为允许。*
***************************************************/
IE |= 0x82;
while(1){
/***************************************************
* BPgate 置1,禁止发声。 *
***************************************************/
BPgate = 1;
/***************************************************
* 用循环来延时。 *
***************************************************/
for(i=0;i<30000;i++){}
/***************************************************
* BPgate 置0,允许发声。 *
***************************************************/
BPgate = 0;
/***************************************************
* 再延时。 *
***************************************************/
for(i=0;i<30000;i++){}
}
}
/***************************************************
* T0 的中断处理程序,每1毫秒执行一次,做键盘扫描,*
* 给变量 timer1 加 1。 *
***************************************************/
dir() interrupt 1
{
static bit i=0;
/***************************************************
* 每次中断,i都取反一次,用以产生方波。 *
***************************************************/
i=~i;
/***************************************************
* 用 BPgate 来控制,是否把方波送到蜂鸣器的控制脚 *
* 上。 *
***************************************************/
BP = i|BPgate;
}
|
|
|
|