📄 key_control_pwm.c
字号:
/////COPYRIGHT RESERVED BY DU////////////////////////////////
#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^0;
uchar i=0,duty=0,times=1;
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();
Port_IO_Init();
Oscillator_Init();
Interrupts_Init();
}
void main (void)
{
uchar t;
Init_Device();/*初始化IO口,PCA初始化成频率输出方式*/
CH452_Init();
for(t=0;t<8;t++)
CH452_Write((CH452_DIG0+ (t<<8))|16);
LEDC=1;
EA = 1; /*开总中断*/
delayms(20);
while (1) {}
}
/*PCA中断子程序*/
void PCA_ISR (void) interrupt 9
{
//EIE2 = 0x00;
// CF = 0; /*清溢出中断标志*/
CCF0 = 0; /*清匹配中断标志*/
// EA =0;
//PCA0CPH0 += 0x10; /*改变波形的频率*/
}
/*键盘中断子程序*/
void led(void) interrupt 19
{
uchar key,mid_var;
EA = 0;
key=CH452_Read();
if(0x63==key)
{
if(duty < 10)
CH452_Write( CH452_DIG1 );
CH452_Write( CH452_DIG2 );
CH452_Write( CH452_SET_BIT | 0x3a );
times = 1;
PCA0CPH0 =(uchar)((100-duty)*2.56); //把duty值转换,赋值给控制占空比的寄存器
PCA0CPH1=(uchar)((100-duty)*2.56);
EA = 1;
}
else if(0x60==key)
{
delayms(10);
LEDC=~LEDC;
EA = 1;
}
else if(0x61==key) //左减或正常 PCA0CPH1控制左轮,PCA0CPH0控制右轮
{ delayms(10);
i=!i;
if(i==1)
{if(duty>=80)
{duty=duty-50;
PCA0CPH1 =(uchar)((100-duty)*2.56); }
else
{duty=duty+50;
if(duty>=100){duty=100;}
PCA0CPH0 =(uchar)((100-duty)*2.56);}
}
if(i==0)
{
if(duty<=80)
{duty=duty+50;
if(duty>=100){duty=100;}
PCA0CPH1 =(uchar)((100-duty)*2.56);}
else
{duty=duty-50;
PCA0CPH0 =(uchar)((100-duty)*2.56);}
}
EA = 1;
}
else if(0x62==key)//右减或正常
{ delayms(10);
i=!i;
if(i==1)
{if(duty>=80)
{duty=duty-50;
PCA0CPH0 =(uchar)((100-duty)*2.56);}
else
{duty=duty+50;
if(duty>=100){duty=100;}
PCA0CPH1 =(uchar)((100-duty)*2.56);}}
if(i==0)
{
if(duty<=80)
{duty=duty+50;
if(duty>=100){duty=100;}
PCA0CPH0 =(uchar)((100-duty)*2.56);}
else
{duty=duty-50;
PCA0CPH1 =(uchar)((100-duty)*2.56);}
}
EA = 1;
}
else
{
if( 1==times )
{
for(mid_var=0;mid_var<8;mid_var++)
CH452_Write((CH452_DIG0+ (mid_var<<8))|16);
duty = key_tran( key );
CH452_Write( CH452_DIG0 | ( duty ) );
times = 2;
EA = 1;
}
else if( 2 == times)
{
CH452_Write( CH452_LEFTMOV );
CH452_Write( CH452_DIG0 | key_tran( key ) );
mid_var=duty;
duty <<= 3;
duty += ( mid_var<<1 ); //duty *= 10;
duty += key_tran( key );
times =3;
EA = 1;
}
else ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -