直流电机正反转C程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TL1=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
num++;
}
}
ET1=1;
EFra Baidu bibliotek0=1;
IT0=1;
while(1)
{
display_sm();
if(flag!=0)
{
TR1=1;
while(1)
{
key1=0;
key4=1;
if((flag!=1)||(num>=240))//计时4分钟到或有中断产生结束正转
{
num=0;
TR1=0;
key4=1;
key1=1;
break;
}
}
if(flag!=0)
{
TR1=1;
while(1)
{
key4=0;
key1=1;
if((flag!=1)||(num>=60))//计时1分钟到或有中断产生结束反转
{
num=0;
TR1=0;
key4=1;
key1=1;
break;
}
}
}
if(flag!=0)
{
delay_12MHZ_s(298);//电机停止约5分钟
void delay_12MHZ_s(uint x)
{
uint j,k,i;
for(j=x;j>0;j--)
for(k=112;k>0;k--)
for(i=1114;i>0;i--);
}
void delay_ms(uint x)
{
uint j,k;
for(j=x;j>0;j--)
for(k=112;k>0;k--);
P0=tabledu[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay_ms(10);
}
void main()
{
//set=0;
flag=0;
TMOD=0x10;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
bit flag=0;
uchar bai,shi,ge;
uint i,count,num;
uint disnum;//循环次数
uchar code tabledu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
{
EA=0;
delay_ms(2);
if(INT0==0)
{
flag=~flag;
num=0;
disnum=0;
}
while(!INT0);
delay_ms(2);
while(!INT0);
EA=1;
}
void time0 () interrupt 3//定时电机转动时间
{
TH1=(65536-50000)/256;
wela=1;
P0=0xfe;
wela=0;
delay_ms(10);
dula=1;
if(shi==0)//如果十位是0则不显示十位
P0=0xff;
else
P0=tabledu[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay_ms(10);
dula=1;
num=0;
disnum++;//1个循环后(正转4分钟+反转1分钟+停止5分钟)显示数据加一
if(disnum==999)
disnum=0;
}
}
Else//没有按键按下显示电机停止
{
key1=1;
key4=1;
}
}
}
void int0 () interrupt 0//外部中断响应一次电机转动方向改变一次
//直流电机正反转C程序
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit key4=P3^0;
sbit key1=P3^1;
//sbit set=P3^4;
}
void display_sm()//三位数码管显示循环次数
{
bai=disnum/100;
shi=disnum%100/10;
ge=disnum%10;
dula=1;
if(bai==0)//如果百位是0则不显示百位
P0=0xff;
else
P0=tabledu[bai];
dula=0;
P0=0xff;
相关文档
最新文档