标题: 报警产生器单片机程序问题 [打印本页]

作者: lclbf    时间: 2018-7-19 18:51
标题: 报警产生器单片机程序问题
1. 实验任务
用P1.0 输出1KHz 和500Hz 的音频信号驱动扬声器,作报警信号,要求1KHz
信号响100ms,500Hz 信号响200ms,交替进行,P1.7 接一开关进行控制,当
开关合上响报警信号,当开关断开告警信号停止,编出程序。
2.电路图


3.C 语言源程序
#include <AT89X51.H>
#include <INTRINS.H>
bit flag;             //此定义有啥作用?
unsigned char count;
void dely500(void)
{
unsigned char a,b;
    for(b=71;b>0;b--)
        for(a=2;a>0;a--);
}
void main(void)
{
while(1)
{
if(P1_7==0)
{
for(count=200;count>0;count--)  //此语句的作用?
{
P1_0=~P1_0;
dely500();
}
for(count=200;count>0;count--)
{
P1_0=~P1_0;
dely500();
dely500();
}
}
}
}
4.问题见上面程序红色字注解,由于才开始学,看不明白。希望有知道的帮忙解释一下。


作者: akclwq    时间: 2018-7-19 19:39
bit flag;  定义一个标志位,用来记录状态的。
or(count=200;count>0;count--)  //此语句的作用?
{
P1_0=~P1_0;
dely500();
}
灯闪烁程序

作者: lclbf    时间: 2018-7-19 19:43
akclwq 发表于 2018-7-19 19:39
bit flag;  定义一个标志位,用来记录状态的。
or(count=200;count>0;count--)  //此语句的作用?
{

谢谢你的回复!for(count=200;count>0;count--)这句如何理解呢?没有bit flag;这个定义会有啥问题?
作者: zl2168    时间: 2018-7-19 22:28
找有注释、看得懂的程序看!
作者: yousunny    时间: 2018-7-20 09:29
for(count=200;count>0;count--)这个就是for循环啊!!
bit flag;   这个程序没用到,可以删了
作者: xhaity    时间: 2018-7-20 11:13
从你的程序看,bit flag 是定义了一bit做为标志,但在程序中没有用;其次dely500()函数应该是延时500us左右,调用1次500us,P1.0电平变化一次,正好输出1kHz频率, for(count=200;count>0;count--)这个循环执行200次,每次调用1次延时500us,调用200次执行100ms退出; 调用2次就大约1ms,P1.0电平反转1次,就输出500Hz频率,for循环执行200次,P1.0输出500Hz频率  200ms退出。
作者: lclbf    时间: 2018-7-23 08:04
yousunny 发表于 2018-7-20 09:29
for(count=200;count>0;count--)这个就是for循环啊!!
bit flag;   这个程序没用到,可以删了

谢谢你的解答!
作者: lclbf    时间: 2018-7-23 08:04
xhaity 发表于 2018-7-20 11:13
从你的程序看,bit flag 是定义了一bit做为标志,但在程序中没有用;其次dely500()函数应该是延时500us左右 ...

谢谢你的详细解释,现在很明白了!




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1