📄 main.c
字号:
/****************************************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 + -