标题:
单片机窗帘 请问定时怎么加进去?
[打印本页]
作者:
xiaoxiaov5
时间:
2018-6-14 11:30
标题:
单片机窗帘 请问定时怎么加进去?
请问定时怎么加进去? 按下一直转怎么回事
#include<reg51.h> //头文件
#define uchar unsigned char
#define uint unsigned int //定义变量
sbit D0 = P2^0;//B键
sbit D1 = P2^1;//D键
sbit D2 = P2^2;//A键
sbit K1=P3^4; //限位开关1
sbit K2=P3^5; //限位开关2
sbit IN1=P1^0;
sbit IN2=P1^1; //电机输入口
void delay(unsigned int z)//延时函数
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void Timer0Init()
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0XDC; //给定时器赋初值,定时1ms
TL0=0X00;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=0;
}
void run(void) //正转
{
IN1=0;
IN2=1;
}
void stop(void) //停转
{
IN1=0;
IN2=0;
}
void back(void) //反转
{
IN1=1;
IN2=0;
}
void main(void)//主函数
{
uchar flag=0; //标志位1
uchar bad=0; //标志位 2
P2=0x08; //P2口清零
while(1)
{
if(D1==1) //D键按下
{
delay(10);
if(D1==1)
{
bad++;
if(bad==3)
{
bad=0;
}
while(D1);
}
switch(bad)
{
case 1: // 按下一次 1/2
back();
TR0=1;
D1=0;
break;
case 2: //按下两次 继续转
back();
D1=0;
break;
}
}
if(D2==1) //A键按下
{
delay(10);
if(D2==1)
{
flag++;
if(flag==3)
{
flag=0;
}
while(D2);
}
switch(flag)
{
case 1: //按下一次 1/2
run();
TR0=1;
D2=0;
break;
case 2: //按下两次 继续转
run();
D2=0;
break;
}
}
if(K1==0||K2==0) //碰到限位开关
{
while(K1==0||K2==0)
stop();
}
if(D0==1) //B键按下
{
while(D0==1)
{
stop() ;
}
}
}
}
void Timer0() interrupt 1
{
static int i=0;
TH0=0XDC; //给定时器赋初值,定时10ms
TL0=0X00;
i++;
if(i==1000)
{
i=0;
IN1=0;
IN2=0;
TR0=0;//关闭定时器
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1