51单片机蜂鸣器发出1KHz的信号的c语言程序

51单片机蜂鸣器发出1KHz的信号的c语言程序,第1张

通过中断的方式,使用定时器0来提供1KHz的方波,蜂鸣器引脚定义为P10。代码如下:
#include
<reg51h>
#define
u8
unsigned
char
sbit
BEEP=P1^0;
void
main
{
EA=1;//开总中断
IT0=1;//打开定时器0源中断允许开关
TMOD=0x01;//选择定时器0工作在方式0
TR0=1;//启动定时器0
TH1=(65536-1000)/256;//赋值,定时1ms
TL1=(65536-1000)%256;
while(1)
{;}
}
void
TIM()
interrupt
1
{
TH1=(65536-1000)/256;
TL1=(65536-1000)%256;
BEEP=~BEEP;//蜂鸣器引脚输出1KHz方波
}

你可以查一下每条for语句里面执行的时间啊,i=400,就是一个变量,通过改变其值来改变for的运行时间,就可以改变频率了。
你也许是想问为什么400就是1000HZ的频率。怎么计算的,对吧。
告诉你一个简单可行的办法,就是用proteus仿真软件,测试一下你的for的运行时间。
简单说就是设置一个IO口,当运行完for后,让该IO口取反,在测试程序中用whie(1) 一直这样做。然后通过proteus观察IO口的高低电平的变化时间,就可以知道for的运行时间了。当然,这也只是一个大概的测试方法。
粗略的延时就用for语句等实现,精确延时是用定时器完成的。
像你这个程序,只是个大概延时,没必要搞得非常精确,所以就用for语句实现了。

void guangdian() interrupt 2
{ TR0=1;//开启定时器
flag=1;//标志位置1
while(flag==1)
{
fmq=1;//蜂鸣器响
}//使蜂鸣器不断响
}
程序有两个致命问题:
1、中断里面不要使用while,否则其他中断就执行不了了,就是你描述的“高级中断无法打断低级中断”
2、中断里面不要使用延时,中断里面的延时没有执行完,又来中断,导致程序执行效率低下,延时和while等 *** 作尽量放到主程序里执行

单击“开始”选“打印机和传真”命令,在“打印机和传真”对话框中右击鼠标,选“服务器属性”命令,在对话框中的“格式”选项卡上首先选中“创建新格式”复选框,再在“表格名”中输入自定义纸张的名称(如260×368),“格式描述”中选“公制”或“英制”,纸张的“宽度”和“高度”中分别输入实际纸张的大小,“打印机区域边距”保持默认即可,最后别忘了单击“保存格式”按钮。
通过以上 *** 作,本人以前自定义的纸张在Word 2000/XP中打印再也没有出现“非法”提示,而变成了合法打印、正常打印。
注:不仅在Word 2000/XP,Excel 2000/XP、PowerPint 2000/XP里面也出现了自己定义的纸张格式。可以在“打印服务器属性”中定义多个纸张,以满足不同的打印需要。在Windows 2000中定义的方法与Windows XP中基本一致,广大读者朋友可以试着 *** 作一下。

问题分析
出现OCX文件缺少问题的大部分原因是因该文件被木马病毒破坏导致系统程序找不到此文件,出现错误提示框,或程序无法运行。win7不附带此文件。
第一步:下载文件
下载附件,解压,把comdlgocx复制到C:\WINNT\System32\ 目录。即可解决。
第二步:注册
点“开始”“运行”(或者按快捷键 徽标+R),输入 regsvr32 comdlg32ocx 点“确定”。
第三步:许可证信息
对于 Windows XP 以及更高版本系统,点“开始”“运行”(或者按快捷键 徽标+R),输入
reg add HKCR\Licenses\4D553650-6ABE-11cf-8ADB-00AA00C00905 /ve /d gfjmrfkfifkmkfffrlmmgmhmnlulkmfmqkqj /f
点“确定”。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10576183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存