标题:
半导体制冷的单片机控制程序
[打印本页]
作者:
1544457649
时间:
2017-9-13 20:35
标题:
半导体制冷的单片机控制程序
#include<reg52.h>
#include<intrins.h>
sbit PWM_L1=P1^1;
sbit PWM_L2=P1^2;
sbit PWM_R1=P1^3;
sbit PWM_R2=P1^4;
sbit xl1=P2^0;//红外传感器
sbit xl2=P2^1;
sbit xr1=P2^2;
sbit xr2=P2^3;
sbit zj3=P2^4;
sbit beep=P3^6;
sbit leftled=P3^5;
sbit rightled=P3^4;
sfr AUXR=0x8E;
sfr BRT=0x9c;
int L1=0,L2=0,R1=0,R2=0,timing=0;//pwm值,pwm周期值
unsigned char NUM;
/***************************************************************************************/
void set_pwm_duty_left(int l1,int l2);
void set_pwm_duty_right(int r1,int r2);
void xunji(void);
void yanshizou();
void xgo(void);
void xback(void);
void dazuozhuan(void);
void dayouzhuan(void);
void zuoxuan(void);
void youxuan(void);
void stop(void);
void turnleft();
void turnright();
void xiaoyouzhuan(void);
void xiaozuozhuan(void);
/***************************************************************************************/
void Delay100ms(); //@11.0592MHz
/***************************************************************************************/
void ConfigTimer0(void);
void UartInit(void);//用于串口通信
/***************************************************************************************/
void main()
{
ConfigTimer0();//定时10ms 11.0592mhz晶振
UartInit();
beep=1;leftled=1;rightled=1;
while(1)
{
switch(NUM)
{
case 'a':xgo();break;
case 'b':xback();break;
case 'c':dazuozhuan();break;
case 'd':dayouzhuan();break;
case 'e':turnleft();break;
case 'f':turnright();break;
case 'z':stop();break;
case 'x':xunji();break;
case 'g':zuoxuan();break;
default:break;
}
}
}
/***************************************************************************************/
void ConfigTimer0(void)
{
//配置TMOD:GATE=0,不受外部影响; C/T=0定时器;M1M0=01,16位计数
TMOD &= 0xf0;
TMOD |= 0x21;
//计数器初值:设置100us中断 也就是计数100产生中断,所以初值是65536-100
TH0=(65536-100)/256;
TL0=(65536-100)%256;
//TCON:TR0=1开计数器
TR0=1;
//开中断
ET0=1;
EA=1;
}
void UartInit(void) //9600bps@11.0592MHz
{
PCON &= 0x7F;
SCON = 0x50;
AUXR |= 0x04;
BRT = 0xDC;
AUXR |= 0x01;
AUXR |= 0x10;
ES=1;
EA=1;
PS=1;//必须加
}
/***************************************************************************************/
void timer0() interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
if(timing<L1) // left 1
PWM_L1=1;
else
PWM_L1=0;
if(timing<L2) // left 2
PWM_L2=1;
else
PWM_L2=0;
if(timing<R1) // right 1
PWM_R1=1;
else
PWM_R1=0;
if(timing<R2) // right 2
PWM_R2=1;
else
PWM_R2=0;
timing++;
if(timing>99)
timing=0;
}
void ser() interrupt 4
{
NUM=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=SBUF;
while(!TI);
TI=0;
}
/***************************************************************************************/
void set_pwm_duty_left(int l1,int l2)//左电机
{
L1=l1;
L2=l2;
}
void set_pwm_duty_right(int r1,int r2)//右电机
{
R1=r1;
R2=r2;
}
/***************************************************************************************/
void yanshizou()
{
set_pwm_duty_right(0,23);
set_pwm_duty_left(0,20);
}
void dazuozhuan(void)
{
set_pwm_duty_right(0,60);
set_pwm_duty_left(0,40);
}
void dayouzhuan(void)
{
set_pwm_duty_right(0,40);
set_pwm_duty_left(0,60);
}
void xiaozuozhuan(void)
{
set_pwm_duty_right(0,40);
set_pwm_duty_left(0,20);
}
void xiaoyouzhuan(void)
{
set_pwm_duty_right(0,20);
set_pwm_duty_left(0,40);
}
void xgo(void)
{
set_pwm_duty_right(0,80);
set_pwm_duty_left(0,83);
}
void zuoxuan(void)
{
set_pwm_duty_right(0,40);
set_pwm_duty_left(45,0);
}
void xback(void)
{
set_pwm_duty_right(50,0);
set_pwm_duty_left(51,0);
}
void stop(void)
{
set_pwm_duty_right(0,0);
set_pwm_duty_left(0,0);
}
void turnleft()//直角
{
set_pwm_duty_right(0,50);//右进,左退
set_pwm_duty_left(0,0);
}
void turnright()
{
set_pwm_duty_right(0,0);//右退左进
set_pwm_duty_left(0,50);
}
/***************************************************************************************/
void Delay100ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 5;
j = 52;
k = 195;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
/***************************************************************************************/
void xunji(void)//高电平压线
{
int k=0;
int l=0;
while(l<2)
{
if(xl2==0&&xr1==0)//2,3不压线
{
yanshizou();
}
else if(xl1==0&&xl2==1&&xr1==0&&xr2==0)//2压线
{
xiaozuozhuan();
}
else if(xl1==0&&xl2==0&&xr1==1&&xr2==0)//3压线
{
xiaoyouzhuan();
}
else if(xl1==1&&xl2==0&&xr1==0&&xr2==0)//1压线
{
turnleft();
}
else if(xl1==0&&xl2==0&&xr1==0&&xr2==1)//4压线
{
turnright();
}
else if(xl1==1&&xl2==1&&xr1==1&&xr2==1)//十字路口
{
Delay100ms();
beep=0;leftled=0;rightled=0;
Delay100ms();
beep=1;leftled=1;rightled=1;
yanshizou();
}
else
{
yanshizou();
}
if(NUM=='z') l=3;
}
}
复制代码
作者:
jovew
时间:
2019-12-7 11:56
这个程序是电动车的控制程序用的,怎么说是制冷片程序?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1