📄 con5in.c
字号:
////////COPYRIGHT RESERVED BY DU///////////////
//////////2007.9.3.P.M.11:55//////////////////
#include "c8051F020.h"
#include "intrins.h"
#include "CH452CMD.H" // 定义常用命令码及外部子程序
#include "pin.h"
#include "math.h"
#include "key_display.h"
// Peripheral specific initialization functions,
// Called from the Init_Device() function
sbit LEDC = P3^4;
sbit BACK = P3^0;
sbit START = P3^2;
sbit IN0 = P0^5;//左
sbit IN1 = P0^6;//中
sbit IN2 = P0^7;//右
sbit IN3 = P1^0;//斜右
sbit IN4 = P1^1;//斜左
uchar duty=80,duty0=0,duty1=0;
void Port_IO_Init()
{
// P0.0 - CEX0 (PCA), Open-Drain, Digital
// P0.1 - CEX1 (PCA), Open-Drain, Digital
XBR0 = 0x10; /*CEX0-->P0.0,CEX1-->P0.1*/
XBR2 = 0x40;
}
void Interrupts_Init()
{
EIE1 = 0x08; //使能PCA0中断
EIE2 = 0x20;
EIP2 = 0x20;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
Reset_Sources_Init();
PCA_Init();
//ADC_Init();
//Voltage_Reference_Init();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
}
void speedchange(uchar duty,uchar i)
{
if(i==0) PCA0CPH0 =(uchar)((100-duty)*2.56); //把duty值转换,赋值给控制占空比的寄存器
if(i==1) PCA0CPH1=(uchar)((100-duty)*2.56);
}
void main (void)
{
uchar a,b,c,d,e,left=0,right=0;
Init_Device();/*初始化IO口,PCA初始化成频率输出方式*/
LEDC=1;
IN0=1;
IN1=1;
IN2=1;
IN3=1;
IN4=1;
while (1)
{
a=IN0;
b=IN1;
c=IN2;
d=IN3;
e=IN4;
//delayms(1);
if(d==0&&e==0)
{
if((a==0&&b==1&&c==0))
{
EA =0;
left=0;
right=0;
PCA0CPH0 = 0x33;
PCA0CPH1 = 0x33;
EA =1;
}
else if((a==1&&b==0&&c==0)||(a==1&&b==1&&c==0))
{
EA =0;
left=1;
right=0;
duty1=duty-50;
speedchange(duty1,1);
EA =1;
}
else if((a==0&&b==0&&c==1)||(a==0&&b==1&&c==1))
{
EA =0;
left=0;
right=1;
duty0=duty-50;
speedchange(duty0 ,0);
EA =1;
}
else if (a==0&&b==0&&c==0)
{
if(left==1)
{
EA =0;
duty1=duty-50;
speedchange(duty1,1); }
else if(right==1)
{
EA =0;
duty0=duty-50;
speedchange(duty0 ,0);}
else
{
EA =0;
PCA0CPH0 = 0x33;
PCA0CPH1 = 0x33;}
EA =1;
}
else
{
EA =0;
PCA0CPH0 = 0x33;
PCA0CPH1 = 0x33;
EA =1;
}
}
if((d==1)&&(e==0)) //左拐
{
PCA0CPH1=0xff;
PCA0CPH0=0x80;
}
if(d==0&&e==1) //右拐
{
PCA0CPH0=0xff;
PCA0CPH1=0x80;
}
// delayms(10);
}
}
/*PCA中断子程序*/
void PCA_ISR (void) interrupt 9
{
//EIE2 = 0x00;
// CF = 0; /*清溢出中断标志*/
CCF0 = 0; /*清匹配中断标志*/
// EA =0;
//PCA0CPH0 += 0x10; /*改变波形的频率*/
}
/*键盘中断子程序*/
void led(void) interrupt 19
{
uchar key;
EA = 0;
key=CH452_Read();
if(0x60==key)
{
delayms(10);
LEDC=~LEDC;
EA = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -