|
50黑幣
本帖最后由 han8680713 于 2020-11-29 18:48 編輯
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit S2=P3^4; //加速
sbit S3=P3^5; //減速
//sbit S4=P3^6; //前進(jìn)
//sbit S5=P3^7; //后退
sbit IN1=P2^4; //電機(jī)IN1
sbit IN2=P2^5; //電機(jī)IN2
sbit EN1=P2^6; //電機(jī)EN1
sbit fm=P2^3;
unsigned char count; //0.1ms次數(shù)標(biāo)識(shí)
sbit PWM =P1^7 ; //PWM信號(hào)輸出
sbit jia =P3^6; //角度增加按鍵檢測(cè)IO口
sbit jan =P3^7; //角度減少按鍵檢測(cè)IO口
unsigned char jd; //角度標(biāo)識(shí)
uchar pwm,num;
void delay(unsigned char i)//延時(shí)
{
unsigned char j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void delay1(uint ms)//延時(shí)函數(shù)
{
uchar i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void bee()//蜂鳴器函數(shù)
{
fm=0;
delay1(100);
fm=1;
delay1(100);
}
void qianjin() //前進(jìn)
{
IN1=0; //電機(jī)IN1
IN2=1; //電機(jī)IN2
//EN1=1; //電機(jī)EN1
}
void houtui() //后退
{
IN1=1; //電機(jī)IN1
IN2=0; //電機(jī)IN2
// EN1=1; //電機(jī)EN1
}
void stop( ) //停止
{
IN1=0; //電機(jī)IN1
IN2=0; //電機(jī)IN2
//EN1=0; //電機(jī)EN1
}
void jiasu( ) //加速
{
if(pwm<32)
{
pwm++;
delay1(100); //加速
}
else
{
bee();
}
}
void jiansu( ) //減速
{
if(pwm>1)
{
pwm--;
delay1(100); //減速
}
else
{
bee();
}
}
void keyscan() //鍵盤函數(shù)
{
if(S2==0)
{
delay1(50);
if(S2==0)
{
jiasu( );
delay1(50);
}
else
{
bee();
}
}
if(S3==0)
{
delay1(50); //消抖
if(S3==0)
{
jiansu( );
delay1(50);
}
else
{
bee();
}
}
// if(S4==0) //正轉(zhuǎn)
// {
// delay(50); //消抖
// if(S4==0)
// {
// houtui() ;
// delay(100);
// }
// }
// if(S5==0 ) //反轉(zhuǎn)
// {
// delay(50); //消抖
// if(S5==0)
// {
// qianjin();
// delay(100);
//
// }
// }
// if(S5==0&& S4==0 )
// {
// delay(100); //消抖
// if(S5==0&& S4==0)
// {
//
// delay(1000);
// stop( );
// delay(10);
// }
// }
if(jia==0) //角度增加按鍵是否按下
{
delay(10); //按下延時(shí),消抖
if(jia==0) //確實(shí)按下
{
jd++; //角度標(biāo)識(shí)加1
count=0; //按鍵按下 則20ms周期從新開始
if(jd==25)
jd=24; //已經(jīng)是180度,則保持
while(jia==0); //等待按鍵放開
}
}
if(jan==0) //角度減小按鍵是否按下
{
delay(10);
if(jan==0)
{
jd--; //角度標(biāo)識(shí)減1
count=0;
if(jd==0)
jd=1; //已經(jīng)是0度,則保持
while(jan==0);
}
}
}
void init_t1() //中斷函數(shù)
{
TMOD=0x10;
TH1=(65536-500)/256;
TL1=(65536-500)%256;
EA=1;
ET1=1;
TR1=1;
}
void t1() interrupt 3 //中斷服務(wù)函數(shù)
{
TR1=0;
TH1=(65536-500)/256;
TL1=(65536-500)%256;
num++;
if(num>32)
{
num=0;
}
if(num<=pwm)
{
EN1 = 1;
//P1=0xff;
//P0=0x00;
}
else
{
EN1=0;
//P1=0x00;
//P0=0xff;
}
TR1=1;
}
void Time0_Init() //定時(shí)器0初始化
{
TMOD = 0x01; //定時(shí)器0工作在方式1
IE = 0x82;
TH0 = 0xff;
TL0 = 0x9c; //12MZ晶振,0.1ms
TR0=1; //定時(shí)器開始
}
void Time0_Int() interrupt 1 //中斷程序
{
TH0 = 0xff; //重新賦值
TL0 = 0x9c;
if(count< jd) //判斷0.1ms次數(shù)是否小于角度標(biāo)識(shí)
PWM=1; //確實(shí)小于,PWM輸出高電平
else
PWM=0; //大于則輸出低電平
count=(count+1); //0.1ms次數(shù)加1
count=count%40; //次數(shù)始終保持為40 即保持周期為20ms
}
void main() //主函數(shù)
{
init_t1();
num=0;
pwm=16;
qianjin();
Time0_Init();
jd=12;
count=0;
while(1)
{
keyscan();
}
}
|
-
-
新建文本文檔.rar
2020-11-29 18:47 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
1.59 KB, 下載次數(shù): 4, 下載積分: 黑幣 -5
|