求:基于89C51单片机的自动窗帘控制系统的(C语言程序)。在线等~~【硬件电路已经完成】
答案:2 悬赏:20 手机版
解决时间 2021-03-22 07:30
- 提问者网友:玫瑰园
- 2021-03-21 10:55
求:基于89C51单片机的自动窗帘控制系统的(C语言程序)。在线等~~【硬件电路已经完成】
最佳答案
- 五星知识达人网友:空山清雨
- 2021-03-21 12:32
你的步进电机是啥样的,两相四线嘛
还有,你想利用51单片机的哪个端口
按键和光敏电阻的有效位是低电位还是高电位
请详细说明追问4相5线电机p1.0至p1.4, 双电压比较器两个输入随意, 3个按键还没连呢。高低忘记了,一高一低。同样的输入,两个比较器,一个正比较一个反比较,同时两个输出 。谢了啊追答#include //通用89C52头文件
sbit ks0 = P2^0 ;//按键打开
sbit ks1 = P2^1 ;//按键关闭
sbit ks2 = P2^2 ;//光耦状态
sbit ks3 = P2^3 ;//上升到位
sbit ks4 = P2^4 ;//下降到位
sbit ks5 = P2^5 ;//自动与手动选择开关
void YS(int a);//延时
char dd[4]={0x8f,0x4f,0x2f,0x1f};//步进电机编码
char as=1;//步进电机状态标志位
int i=0;
void main (void) //延时
{
if(ks5==0)//如果是自动状态
{
if(ks2==0)//如果是白天
{
while(ks3)//如果上升到位,则结束循环
{
P1=dd[i];//步进电机旋转一个角度
YS(50);//延时一小会
i++;
if(i>=4){i=0;}//如果数组达到最末尾,则从新开始,用来循环的
}
}
else
{
while(ks4)//如果下降到位,则结束循环
{
P1=dd[i];//步进电机旋转一个角度
YS(50);//延时一小会
i--;
if(i<=0){i=3;}//如果数组达到最末尾,则从新开始,用来循环的
}
}
}
else//否则为手动状态
{
if(ks0==0)//如果按下打开按钮
{
P1=dd[i];//步进电机旋转一个角度
YS(50);//延时一小会
i++;
if(i>=4){i=0;}
}
if(ks1==0)//如果按下下降按钮
{
P1=dd[i];//步进电机旋转一个角度
YS(50);//延时一小会
i--;
if(i<=0){i=3;}
}
}
}
void YS (int a) //延时
{
int x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
希望能够实现你理想中的状态,哈哈
还有,你想利用51单片机的哪个端口
按键和光敏电阻的有效位是低电位还是高电位
请详细说明追问4相5线电机p1.0至p1.4, 双电压比较器两个输入随意, 3个按键还没连呢。高低忘记了,一高一低。同样的输入,两个比较器,一个正比较一个反比较,同时两个输出 。谢了啊追答#include
sbit ks0 = P2^0 ;//按键打开
sbit ks1 = P2^1 ;//按键关闭
sbit ks2 = P2^2 ;//光耦状态
sbit ks3 = P2^3 ;//上升到位
sbit ks4 = P2^4 ;//下降到位
sbit ks5 = P2^5 ;//自动与手动选择开关
void YS(int a);//延时
char dd[4]={0x8f,0x4f,0x2f,0x1f};//步进电机编码
char as=1;//步进电机状态标志位
int i=0;
void main (void) //延时
{
if(ks5==0)//如果是自动状态
{
if(ks2==0)//如果是白天
{
while(ks3)//如果上升到位,则结束循环
{
P1=dd[i];//步进电机旋转一个角度
YS(50);//延时一小会
i++;
if(i>=4){i=0;}//如果数组达到最末尾,则从新开始,用来循环的
}
}
else
{
while(ks4)//如果下降到位,则结束循环
{
P1=dd[i];//步进电机旋转一个角度
YS(50);//延时一小会
i--;
if(i<=0){i=3;}//如果数组达到最末尾,则从新开始,用来循环的
}
}
}
else//否则为手动状态
{
if(ks0==0)//如果按下打开按钮
{
P1=dd[i];//步进电机旋转一个角度
YS(50);//延时一小会
i++;
if(i>=4){i=0;}
}
if(ks1==0)//如果按下下降按钮
{
P1=dd[i];//步进电机旋转一个角度
YS(50);//延时一小会
i--;
if(i<=0){i=3;}
}
}
}
void YS (int a) //延时
{
int x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
希望能够实现你理想中的状态,哈哈
全部回答
- 1楼网友:廢物販賣機
- 2021-03-21 13:22
有点搞笑了,软件必须在硬件的基础上才能编写,你这样随便说一下是不可能有人能解决的。况且程序编写好以后还要调试,没有你的硬件拿什么去调试?这个方法行不通的,真的。
建议还是自己动手动脑,遇到具体的问题倒是可以来问一下。像这种问题,就是有人给你个程序也是哪里复制过来的,你也用不了。程序上一个字母对不上,就可能造成你的硬件根本就不会动。
建议还是自己动手动脑,遇到具体的问题倒是可以来问一下。像这种问题,就是有人给你个程序也是哪里复制过来的,你也用不了。程序上一个字母对不上,就可能造成你的硬件根本就不会动。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯