永发信息网

C51单片机与C语言

答案:3  悬赏:70  手机版
解决时间 2021-02-14 12:00
  • 提问者网友:练爱
  • 2021-02-14 07:30
我想写个程序实现按一下按钮,relay1工作,延时1秒后relay2工作,再次按下该按钮relay1和relay2不工作,,如此反复.由于我没学过C语言与单片机,请指教:
#include "reg52.h"
sbit relay1 = P0^2;
sbit relay2 = P0^3;
sbit key = P1^1;
#define ON 0
#define OFF 1
#define pressed 1
#define unpressed 0
void main()
{

}
最佳答案
  • 五星知识达人网友:你哪知我潦倒为你
  • 2021-02-14 07:53
//假设所有控制口都低有效。
#include <reg52.h>
sbit relay1 = P0^2;
sbit relay2 = P0^3;
sbit key = P1^1;
void delay(unsigned int a)
{
unsigned ing i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
bit keyscan()
{
if(key==0)
{
delay(10);
if(key==0)
{
while(key==0);
return(1);
}
}
return(0);
}
void main()
{
bit flag=0;
relay1=1;
relay2=1;
while(1)
{
if(keyscan())
{
flag=~flag;
if(flag)
{
relay1=0;
delay(1000);
relay2=0;
}
else
{
relay1=1;
relay2=1;
}
}
}
}
全部回答
  • 1楼网友:未来江山和你
  • 2021-02-14 09:56

用c51是多么简单的事情啊。你的每个灯的顺序不说。不好写。

思路这样的:

sbit led1=p1^0;

~~~

把所有的灯都定一下。

void delay(int ms)

{

int x,y;

for(x=ms;x>0;x--)

for(y=110;y>0;y--);

}

一个nms的延迟,要求是12m的晶振。

void main()

{

while(1)

{

led1=0;

delay(1000);

led1=1;

里面随便写了。

}

}

  • 2楼网友:詩光轨車
  • 2021-02-14 09:27
void delayms(unsigned int) { unsigned char t,i; while(t--); { for(i=0;i<121;i++); } } void main() { while(key); { delayms(10); if(key==0) { while(1) { relay1=1; delayms(1000); relay2=1; delayms(1000); if(key==0) break; } break; } } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯