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

📄 main.c

📁 此为ARM的电机程序,能够实现ARM对于电机的控制
💻 C
📖 第 1 页 / 共 2 页
字号:
/****************************************Copyright (c)**************************************************
**                               Quanguo dianzi dasai
**                             http://www.jxust3jia1.com
**							        生活从这里起航!
**--------------File Info-------------------------------------------------------------------------------
** File name:			main.c
** Last modified Date:  2004-09-16
** Last Version:		1.0
** Descriptions:		The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by:			xiaoqiang
** Created date:		2007-07-22
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:FunData[]={0,110,110,240,0,110},用到了1,2,3,5参数!
**
********************************************************************************************************/
#include "config.h"
#include "I2CINT.h"
#define  CAT1025	0XA0

#define		PWM1		1<<0
#define		PWM3		1<<1
#define		CAP2		1<<17
#define		CAP3		1<<18
#define     led         1<<25
uint16 k1=0,k2=0;
uint8 s=0,k=1;
uint8 l=0,zf=1;
uint32 H1=0X00,H2=0X00,NP1=0X00,NP2=0X00;
uint16 FunData1[]={100},FunData2[]={0};
uint16 FunData[];
uint8 data_buf[];
//uint16 FunData[]={1000,1600,1600,0,0,50};

#define  SCK0 	1<<8				//P0.4接CLK
#define  MISO0	1<<10
#define  MOSI0  1<<12				//P0.6接DATA(MOSI)
#define  SSEL0  1<<14
#define  KEYSENSOR	1<<22			//P1.22接KEY键
#define  RCLK   1<<31				//P0.31接RCLK
#define  A_IN1   1<<21				//P1.21接A_IN1
#define  A_IN2   1<<23				//P1.23接A_IN2
#define  B_IN1   1<<25				//P1.25接B_IN1
#define  B_IN2   1<<27				//P1.27接B_IN2
#define  Sensor1   1<<9					//P0.9接传感器1
#define  Sensor2   1<<11				//P0.11接传感器2
#define  Sensor3   1<<13				//P0.13接传感器3
#define  Sensor4   1<<15				//P0.15接传感器4
uint16 param1;
uint16 param2;
uint8 flag=0;
uint16 j=1,dflag=1;
uint32 Sensor;
uint32 EK1_1,EK1_2,EK2_1,EK2_2,ORA,ORB,CAP1_1,CAP1_2,CAP2_1,CAP2_2;
const uint8 DuanMa[12]={		0x3f,	//0
								0x06,	//1
								0x5b,	//2
								0x4f,	//3
								0x66,	//4
								0x6d,	//5
								0x7d,	//6
								0x07,	//7
								0x7f,	//8
								0x6f,	//9
								0x7f,	//.
								0xff	//黑码
				};
const uint8 WeiMa[9]=	{	  	0xfe,	//1
								0xfd,	//2
								0xfb,	//3
								0xf7,	//4
								0xef,	//5
								0xdf,	//6
								0xbf,	//7
								0x7f,	//8
								0xff	//黑码
						};

uint8 BCDDATA[18];
uint8 wei=0;
uint8 FunChgKey=1;
uint8 ShiftKey=255;
uint8 GuangBiao=1;
uint8 keystat;
uint8 index;
uint8 index1;
uint32 F1,F2,UK1,UK2;
/*******************************************************************************************************
**函数名称:DelayNS()
**函数功能:长软件延时
**入口参数:dly  延时参数,值越大,延时越久
**出口参数:无
*******************************************************************************************************/
void DelayNS(uint32	dly)
{	uint32	i;
	for(;dly>0;dly--)
		for(i=0;i<500;i++);
}

/********************************************************************************************
**函数名称:ParaBCD1()
**函数功能:将参数转换为BCD码存于BCD码内存单元中
**入口参数:	
			param1			要转换的数据1
			wei				存放的单元(3|7)
**出口参数:无
*******************************************************************************************************/
void ParaBCD1(uint16 param1)
{	BCDDATA[3]=param1/1000;
	BCDDATA[2]=param1%1000/100;
	BCDDATA[1]=param1%100/10;
	BCDDATA[0]=param1%10;
	return;
}
/********************************************************************************************
**函数名称:ParaBCD2()
**函数功能:将参数转换为BCD码存于BCD码内存单元中
**入口参数:	
			param1			要转换的数据1
			wei				存放的单元(3|7)
**出口参数:无
*******************************************************************************************************/
void ParaBCD2(uint16 param2)
{	BCDDATA[7]=param2/1000;
	BCDDATA[6]=param2%1000/100;
	BCDDATA[5]=param2%100/10;
	BCDDATA[4]=param2%10;
	return;
}
/********************************************************************************************************
** 函数名称:MSPI_Init()
** 函数功能:初始化SPI接口,设置为主机。
** 入口参数:无
** 出口参数:无
*********************************************************************************************************/
void  MSPI_Init(void)
{  PINSEL0 = (PINSEL0&0XFFFF00FF)|0X00005500;
    S0PCCR = 0x52;		            // 设置SPI时钟分频
 	S0PCR  = (0 << 3) |				// CPHA = 0, 数据在SCK 的第一个时钟沿采样
 			(1 << 4) |				// CPOL = 1, SCK 为低有效
 			(1 << 5) |				// MSTR = 1, SPI 处于主模式
 			(0 << 6) |				// LSBF = 0, SPI 数据传输MSB (位7)在先
 			(0 << 7);				// SPIE = 0, SPI 中断被禁止
}

/********************************************************************************************************
** 函数名称:MSPI_SendData()
** 函数功能:向SPI总线发送数据。
** 入口参数:data   待发送的数据
** 出口参数:返回值为读取的数据
********************************************************************************************************/
uint8  MSPI_SendData(uint8 data)
{ 
    SPI_SPDR = data;
    while( 0 == (SPI_SPSR & 0x80));		// 等待SPIF置位,即等待数据发送完毕

    return(SPI_SPDR);
}

/********************************************************************************************
**函数名称:DispBoardInit()
**函数功能:显示板初使化
**入口参数:无
**出口参数:无
*******************************************************************************************************/
void DispBoardInit(void)
{	
	IO1DIR&=(~KEYSENSOR);
	IO1DIR|=RCLK;
}
/********************************************************************************************
**函数名称:DisplayFun()
**函数功能:显示函数
**入口参数:	无
**出口参数:无
*******************************************************************************************************/
uint8 DisplayFun(void)
{	if(!dflag)
	{ParaBCD1(k1);
		ParaBCD2(k2);}	
if(FunChgKey)
	{	
			index=BCDDATA[wei];	
			index1=wei;
		
	}
	else
	{	
		if(wei!=ShiftKey)
			 	{	index=BCDDATA[wei];	
					index1=wei;}
					
			else if(wei==ShiftKey)
			{	if(GuangBiao<100)
					{index=BCDDATA[wei];
					index1=8;}
				else if(GuangBiao>=100)
				{index=BCDDATA[wei];
				index1=wei;}
			}
			GuangBiao++;
			if(GuangBiao>200)
				GuangBiao=0;
		
	}
	IO1CLR=RCLK;
	
	MSPI_SendData(DuanMa[index]);
	//MSPI_SendData(WeiMa[index1]);
	//MSPI_SendData(DuanMa[index]);
	
	MSPI_SendData(WeiMa[index1]);
	IO1SET=RCLK;
	wei++;
	if(wei==8)
	wei=0;
	DelayNS(10);
	return(0);
}
/********************************************************************************************
**函数名称:KeyScan()
**函数功能:键盘扫描
**入口参数:	无
**出口参数:无
*******************************************************************************************************/
void KeyScan(void)
{	if(!(IO1PIN&KEYSENSOR))	
	{	keystat=WeiMa[wei];
		DelayNS(1);
		while(!(IO1PIN&KEYSENSOR));
		switch(keystat)
		{	case 0xfd:						//按键1,功能为修改/确认键
				if(FunChgKey)
				{	dflag=1;
					FunChgKey=0;
						l=1;
						ShiftKey=0;
						
						}
					else
					{FunChgKey=1;
					l=0;
					ShiftKey=255;
					flag = BCDDATA[7]*1000+BCDDATA[6]*100+BCDDATA[5]*10+BCDDATA[4];
					FunData[flag]=BCDDATA[3]*1000+BCDDATA[2]*100+BCDDATA[1]*10+BCDDATA[0];
					//data_buf[0]=(FunData[flag]/0x100);
					//data_buf[1]=(FunData[flag]%0x100);

					I2CONSET = 0x40;									//使能主I2C 
				I2C_WriteNByte(CAT1025, ONE_BYTE_SUBA, 0x00, FunData, 10);
				DelayNS(10);
				I2CONSET = 0x00;									// 禁止主I2C  
					}
					break;
			case 0xfb:						//按键2,功能 正反转键
				if(FunChgKey)
				{	dflag=0;
				if(zf)
					{k=0;
					ShiftKey=255;
					PWMPCR   = 0x0A00;			// 允许PWM1/3输出,单边PWM
   					IO0SET = A_IN1|B_IN1;
   					IO0CLR = A_IN2|B_IN2;
   				
   					PWMTCR = 0X00;
					PWMTCR   = 0x09;             // 启动PWM输出
					T0TCR  =  0X01;				 // 启动TIME0
					T1TCR  =  0X01;				 // 启动TIME1捕获
					
					zf=0;}
					else
					{	k=0;
					
   					IO0CLR = A_IN1|B_IN1;
   					IO0SET = A_IN2|B_IN2;
   					
   						 // 启动TIME1捕获
					PWMTCR = 0X00;
					 PWMPCR   = 0x0A00;			// 允许PWM1/3输出,单边PWM
  					PWMTCR   = 0x09;             // 启动PWM输出
					T0TCR  =  0X01;				 // 启动TIME0
					T1TCR  =  0X01;	
					zf=1;			 // 启动TIME1捕获
  					}
				}
				break;
			case 0xfe:
									//按键6,功能为停机键
				if(!k)
				{	PWMTCR   = 0x00;             // 停止PWM输出
					T0TCR  =  0X00;				 // 停止TIME0

⌨️ 快捷键说明

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