51单片机光敏电阻c语言程序,STC89C52,步进电机,光敏电阻
乐观积极的正能量句子51单⽚机光敏电阻c语⾔程序,STC89C52,步进电机,光敏电
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我⽤C语⾔在Keil4上写了⼀个⽤遥控器来控制步进电机,通过光明电阻模块来限制步进电机转动幅度的程序,单独让遥控器控制步进电机正反转,停⽌没有问题。单独让光敏电阻模块以波特率为9600来给出⾼低电平也没有问题,但现在我将这两个程序模块整合到⼀起之后,却出现了问题,要么就是遥控器控制步进电机正反转,停⽌没有问题,要么就是光敏电阻模块以波特率为9600来给出⾼低电平没有问题,要么就是都有问题,怀疑是两个定时器出现了⼲扰,但有不确定,真⼼不知该怎么办,下⾯是我给出的程序,求⾼⼿指点
#include
#define uchar unsigned char
#define uint unsigned int
unsigned char date;
sbit key1=P1^0;
sbit key2=P1^7;
signed long beats = 0; //电机转动节拍总数
unsigned char T0RH = 0; //T0重载值的⾼字节
unsigned char T0RL = 0; //T0重载值的低字节
unsigned char dir = 2;
unsigned char light = 1;
unsigned char sta = 0;
extern bit irflag;
extern unsigned char ircode[4];
extern void InitInfrared();
void delay(uint z);
void Initial_com(void);
void ConfigTimer0(unsigned int ms);
void RightRunMotor();
void LeftRunMotor();
void StopRunMotor();
unsigned char ReiverSta();
void main()
{
EA = 1; //开总中断
InitInfrared(); //初始化红外功能
ConfigTimer0(2); //配置T0定时2ms
ReiverSta();
Initial_com(); if(RI)
{
date=SBUF; //单⽚机接受
SBUF=date; //单⽚机发送
RI=0;
}
if(TI)
{
TI = 0;
}
if(key2 == 0)
light = 1;
else
light = 0; */
while (1)
{
if (irflag) //接收到红外数据时刷新显⽰{
irflag = 0;
switch(sta)
{
case 0:
StopRunMotor();
油耗怎么算if(ircode[2] == 0x43)
{
dir = 1;
RightRunMotor();
}
else if(ircode[2] == 0x40)
{
}
else if(ircode[2] == 0x44)
}
break;
case 1:
if(ircode[2] == 0x43)
{
dir = 1;
RightRunMotor();
}
else if(ircode[2] == 0x40) {
dir = 2;
LeftRunMotor();
}
else if(ircode[2] == 0x44) {
StopRunMotor();
}
break;
case 2:
if(ircode[2] == 0x43)
{
dir = 1;
RightRunMotor();
}
else if(ircode[2] == 0x40) {
dir = 2;
LeftRunMotor();
}
else if(ircode[2] == 0x44) {
StopRunMotor();
mpv商务车大全}
StopRunMotor();
if(ircode[2] == 0x43)
{
}
else if(ircode[2] == 0x40)
{
dir = 2;
LeftRunMotor();
}
else if(ircode[2] == 0x44)
{
}
break;
default :break;
}
}
}
}
unsigned char ReiverSta()
{
unsigned char i = 0;
for(i=0; i<4; i++)
{
switch(i)
{
case 0:
if((dir == 2) && (light == 1)) sta = 0;
else
break;
case 1:
if((dir == 1) && (light == 0))
新车上牌程序break;
case 2:
if((dir == 2) && (light == 0))
sta = 2;
else
break;
case 3:
if((dir == 1) && (light == 1))
sta = 3;
else
break;
}
}
return sta;
}
/* 步进电机启动函数,angle-需转过的⾓度 */
void RightRunMotor()
观沧海曹操{
signed long angle = 360;
ET0 = 0;
beats = (angle * 4076) / 360; //实测为4076拍转动⼀圈ET0 = 1;
}
void LeftRunMotor()
{
signed long angle = -360;
ET0 = 0;
beats = (angle * 4076) / 360; //实测为4076拍转动⼀圈ET0 = 1;
}
/
* 步进电机停⽌函数 */
void StopRunMotor()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。