在51单片机上,我想要同时实现流水灯和蜂鸣器,而且在灯1,3,5,7亮时蜂鸣器发声,其他时刻不发声》
#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharsbi...
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar temp;
void delay(uint);
void main()
{
uint n=1;
temp=0xfe;
P1=temp;
while(1)
{
if(n%2==1)
beep=0;
else
beep=1;
temp=_crol_(temp,1);
delay(10000);
P1=temp;
n=n++;;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
哪里错了啊 展开
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit beep=P2^3;
uchar temp;
void delay(uint);
void main()
{
uint n=1;
temp=0xfe;
P1=temp;
while(1)
{
if(n%2==1)
beep=0;
else
beep=1;
temp=_crol_(temp,1);
delay(10000);
P1=temp;
n=n++;;
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
哪里错了啊 展开
展开全部
是我孤陋寡闻还是怎么的,不过我还真没见过这样n=n++;;的写法,如果你是想让n隔一段延时就加1的话,直接这样n++就可以了,或者n=n+1。
还有,你不觉得你这个延时太长了吗?接近10秒的延时,这样调试起来得多累啊。
你的n定义为无符号整型,而且没定义上限,它会一直加到65535才溢出为0的,这无疑加大了单片机的工作量。虽然这是小程序感觉不出来,但是对你以后的写代码习惯影响很大。
在使用蜂鸣器之前,先确定你的硬件是没问题的,否则你会无限的怀疑自己的代码。方法是:写一段100%准确的最简单的代码去检查硬件是否正确。如果是有源蜂鸣器的话,直接让IO拉高或拉低(具体看你的驱动电路)就可以让它响了。如果是无源的,那得输出一段波形才行。
还有,你不觉得你这个延时太长了吗?接近10秒的延时,这样调试起来得多累啊。
你的n定义为无符号整型,而且没定义上限,它会一直加到65535才溢出为0的,这无疑加大了单片机的工作量。虽然这是小程序感觉不出来,但是对你以后的写代码习惯影响很大。
在使用蜂鸣器之前,先确定你的硬件是没问题的,否则你会无限的怀疑自己的代码。方法是:写一段100%准确的最简单的代码去检查硬件是否正确。如果是有源蜂鸣器的话,直接让IO拉高或拉低(具体看你的驱动电路)就可以让它响了。如果是无源的,那得输出一段波形才行。
展开全部
你好
一楼答得超好
先给你提个建议,把问题明确,是编译通不过,还是通过了运行与设计不符,幸亏你的程序短,否则,没几个人会帮你分析的。
另:程序结构有问题,既然1357点亮时蜂鸣器动作,那么为什么要用两个完全不相干的变量,各干各的事,靠机遇吗,如果程序运行时间无限延长,总有乱套的时候,现在就这两个变量及功能,那么多了呢,有中断,调用,跳转,你怎么来协调。希望帮到你。
一楼答得超好
先给你提个建议,把问题明确,是编译通不过,还是通过了运行与设计不符,幸亏你的程序短,否则,没几个人会帮你分析的。
另:程序结构有问题,既然1357点亮时蜂鸣器动作,那么为什么要用两个完全不相干的变量,各干各的事,靠机遇吗,如果程序运行时间无限延长,总有乱套的时候,现在就这两个变量及功能,那么多了呢,有中断,调用,跳转,你怎么来协调。希望帮到你。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是什么样的问题,表述清楚咯
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询