求大神帮我解释一下这段单片机程序,因为初学,所以求详细些的解释
#include<reg52.h>typedefunsignedintuint16;sbitin=P1^0;sbita=P1^1;sbitb=P1^2;voiddelay...
#include<reg52.h>
typedef unsigned int uint16;
sbit in = P1^0;
sbit a = P1^1;
sbit b = P1^2;
void delayus(uint16);
void delayms(uint16);
void main()
{
while(1)
{
if(in==1)
{
a = 1;
b = 0;
delayms(1000);
a = 0;
b = 0;
while(in==1);
}
else if (in==0)
{
a = 0;
b = 1;
delayms(1000);
a = 0;
b = 0;
while(in==0);
}
}
}
void delayus(uint16 t)
{
while(--t);
}
void delayms(uint16 t)
{
while(t--)
{
delayus(245);
delayus(245);
}
} 展开
typedef unsigned int uint16;
sbit in = P1^0;
sbit a = P1^1;
sbit b = P1^2;
void delayus(uint16);
void delayms(uint16);
void main()
{
while(1)
{
if(in==1)
{
a = 1;
b = 0;
delayms(1000);
a = 0;
b = 0;
while(in==1);
}
else if (in==0)
{
a = 0;
b = 1;
delayms(1000);
a = 0;
b = 0;
while(in==0);
}
}
}
void delayus(uint16 t)
{
while(--t);
}
void delayms(uint16 t)
{
while(t--)
{
delayus(245);
delayus(245);
}
} 展开
3个回答
展开全部
#include<reg52.h>
typedef unsigned int uint16;
sbit in = P1^0;//引脚定义
sbit a = P1^1;
sbit b = P1^2;
void delayus(uint16);//函数声明
void delayms(uint16);
void main()//主函数
{
while(1)//要有一个死循环让单片机一直执行代码,一般用while(1)或for(;;)
{
if(in==1)//如果in引脚为高电平
{
a = 1; //a 输出高电平
b = 0;//b 输出低电平
delayms(1000);//延时1000毫秒,即1S
a = 0; //a输出低电平
b = 0; //b输出低电平
while(in==1); //如果输入一直为高电平,则单片机执行到这里就等待,直到n为低电平
}
else if (in==0)//否则如果in输入低电平
{
a = 0;//a输出低电平
b = 1;//b 输出高电平
delayms(1000);
a = 0;//a输出低电平
b = 0;//b输出低电平
while(in==0); //如果输入一直为低电平,则单片机执行到这里就等待,直到n为高电平
}
}
}
void delayus(uint16 t)//延时函数
{
while(--t);
}
void delayms(uint16 t)//延时函数
{
while(t--)
{
delayus(245);
delayus(245);
}
}
//整个程序来看,这个程序主要是当输入引脚为高电平时,a反转,输入引脚为低电平时,b反转,反转间隔都是1秒钟
更多追问追答
追问
你好 谢谢你,还想问一下while(--t);和while(t--)以及 delayus(245)分别是什么意思
追答
while(--t);和while(t--)都是利用while循环来延时,等效于:
区别在于--t和t--:
t--;//执行之后,t=t-1
--t;//执行之前,先t=t-1,
至于delayus(245),就是调用delayus(uint16 t),延时时间大约245us。delayus(uint16 t)是微秒级的延时函数,并带参数,调用时要填入参数。
展开全部
void delayus(uint16 t),void delayms(uint16 t)分别是微秒和毫秒延时函数。
sbit in = P1^0;
sbit a = P1^1;
sbit b = P1^2;
是定义三个位变量,
if(in==1)如果 P1^0;是高电平。
{
a = 1; P1^1置高。
b = 0; P1^2;置低。
delayms(1000);延时1S。
a = 0;
b = 0;
while(in==1); 等待 P1^0变低。
sbit in = P1^0;
sbit a = P1^1;
sbit b = P1^2;
是定义三个位变量,
if(in==1)如果 P1^0;是高电平。
{
a = 1; P1^1置高。
b = 0; P1^2;置低。
delayms(1000);延时1S。
a = 0;
b = 0;
while(in==1); 等待 P1^0变低。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<reg52.h>//52单片机的头文件
typedef unsigned int uint16;//用uint16代替unsigned int
sbit in = P1^0;//P1的第0引脚用in表示
sbit a = P1^1;//P1的第1引脚用a表示
sbit b = P1^2;//P1的第2引脚用b表示
void delayus(uint16);//us延时函数的声明
void delayms(uint16);//ms延时函数的声明
void main()//主函数
{
while(1)//死循环
{
if(in==1)//如果P1的第0引脚是高电平
{
a = 1; //P1的第1引脚用输出 高电平
b = 0;//P1的第2引脚用输出 低电平
delayms(1000);//延时1000ms也就是1s
a = 0; //P1的第1引脚用输出 低电平
b = 0; //P1的第2引脚用输出 低电平
while(in==1);// 如果P1的第0引脚是高电平,程序就停在这,如果P1的第0引脚是低电平,运行下一个程序
}
else if (in==0)//如果P1的第0引脚是低电平
{
a = 0;//P1的第1引脚用输出 低电平
b = 1;//P1的第2引脚用输出 高电平
delayms(1000);
a = 0;//P1的第1引脚用输出 低电平
b = 0;//P1的第2引脚用输出 低电平
while(in==0); // 如果P1的第0引脚是低电平,程序就停在这,如果P1的第0引脚是高电平,运行下一个程序
}
}
}
void delayus(uint16 t)//当参数为1的时候是1us
{
while(--t);//只有当while()括号里面的参数是0的时候跳出这个函数
}
void delayms(uint16 t)//当参数为1的时候是1ms
{
while(t--)//只有当while()括号里面的参数是0的时候跳出这个函数
{
delayus(245);
delayus(245);
}
}
typedef unsigned int uint16;//用uint16代替unsigned int
sbit in = P1^0;//P1的第0引脚用in表示
sbit a = P1^1;//P1的第1引脚用a表示
sbit b = P1^2;//P1的第2引脚用b表示
void delayus(uint16);//us延时函数的声明
void delayms(uint16);//ms延时函数的声明
void main()//主函数
{
while(1)//死循环
{
if(in==1)//如果P1的第0引脚是高电平
{
a = 1; //P1的第1引脚用输出 高电平
b = 0;//P1的第2引脚用输出 低电平
delayms(1000);//延时1000ms也就是1s
a = 0; //P1的第1引脚用输出 低电平
b = 0; //P1的第2引脚用输出 低电平
while(in==1);// 如果P1的第0引脚是高电平,程序就停在这,如果P1的第0引脚是低电平,运行下一个程序
}
else if (in==0)//如果P1的第0引脚是低电平
{
a = 0;//P1的第1引脚用输出 低电平
b = 1;//P1的第2引脚用输出 高电平
delayms(1000);
a = 0;//P1的第1引脚用输出 低电平
b = 0;//P1的第2引脚用输出 低电平
while(in==0); // 如果P1的第0引脚是低电平,程序就停在这,如果P1的第0引脚是高电平,运行下一个程序
}
}
}
void delayus(uint16 t)//当参数为1的时候是1us
{
while(--t);//只有当while()括号里面的参数是0的时候跳出这个函数
}
void delayms(uint16 t)//当参数为1的时候是1ms
{
while(t--)//只有当while()括号里面的参数是0的时候跳出这个函数
{
delayus(245);
delayus(245);
}
}
追问
delayus 微妙级延时
delayms 毫秒级
是吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询