⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.c

📁 硬件LPC938单片机
💻 C
字号:
#include <REG938.h>          		/*头文件的包含*/
#include <intrins.h>

#define  uchar unsigned char		/*宏定义*/
#define  uint  unsigned int
#define  ulong  unsigned long
#define  _Nop()  _nop_()        /*定义空指令*/

uint pwm_b = 1000,pwm_c = 1000;
//sbit motor_stop=P0^3;
sbit cw_flag=P0^3;
sbit ccw_flag=P0^2;


uchar cw=0;
uchar ccw=0;

void CCU_init(void);
void outb_pwm(void);
void outc_pwm(void);
void key_scan(void);
void dally_Nus(uint data us);


void dally_Nus(uint data us)
{
	do
	{
		us--;
	}
	while (us > 0);

}

/***********************************************************
CCU初始化
************************************************************/
void CCU_init(void)
{
	OCB=1;//P89LPC938的引脚P1.6
	OCC=1;//P89LPC938的引脚P1.7
	TPCR2H=0x00;	// 
	TPCR2L=0x18;	// 设置CCU预分频系数为25
	TCR21=0x04;		// 设置锁相环输入为7372800Hz
	CCCRB=0x01;		// PWM 输出通道 B
	CCCRC=0x01;		// PWM 输出通道 C
	
	TCR20=0x80;		// 启动 PLL, 输出方式: stop
	OCB=1;				// 等待一个周期
	OCC=1;
	while(PLEEN==0);// 等待 PLL 锁定

	TOR2H=0x07;		// 重装值 0x1770=6000
	TOR2L=0xD0;		// 

	TCR21|=0x80;	// 更新重装值

	OCRBH=0x00;		// 初始化占空比 B 
	OCRBL=0x00;			
	TCR21|=0x80;	// 更新占空比数据

	TCR20=0x82;		// 设置输出模式为不对称 PWM
}

/***********************************************************
通道B电压控制
************************************************************/
void outb_pwm(void)
{
	uchar data pwmh,pwml;
	pwmh = pwm_b / 256;
	pwml = pwm_b % 256;
	OCRBH = pwmh;
	OCRBL = pwml;
	TCR21 |= 0x80;
}


/***********************************************************
通道C电压控制
************************************************************/
void outc_pwm(void)
{
	uchar data pwmh,pwml;
	pwmh = pwm_c / 256;
	pwml = pwm_c % 256;
	OCRCH = pwmh;
	OCRCL = pwml;
	TCR21 |= 0x80;
}

/********************************************************************
  键盘检测
********************************************************************/
void key_scan(void)
{

	if(cw_flag==0)  
	{
		cw=1;
		ccw=0;
	}
	if(ccw_flag==0)
	{
		cw=0;
		ccw=1;
	}
}


/********************************************************************
  初始化、主控制
********************************************************************/
void main(void)
{
	int i,j;

	AUXR1=0x00;
	
	P0M1=0x00;			//0000 0000	
	P0M2=0x00;			//0000 0000	准双向
	
	P1M1=0xC0;			//0000 0000	
	P1M2=0xC0;			//0000 0000 P1.7 P1.6开漏
	
	P2M1=0x00;			//0000 0000	
	P2M2=0x00;			//0000 0000	准双向
	
	P3M1=0x00;			//0000 0000	
	P3M2=0x00;			//0000 0000 准双向

	P0   = 0xbf;
	P1   = 0xff;
	P2   = 0xff;
	P3   = 0xff;

	SP   = 0x7f;			//初始化堆栈
	CCU_init();
	dally_Nus(5000);
	while(1)
	{
		key_scan();
		if(cw==1)
		{
			for(i=200;i>0;i--)
			{
				outb_pwm();	
			}
			while(1);
			cw=0;
		}
		
		if(ccw==1)
		{
			for(j=400;j>0;j--)
			{
				outc_pwm();
			}
			ccw=0;
		}	
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -