#include "msp430f5529.h"
#include "lcd1602.h"
#include "FDC2214_msp430.h"
int system_flag=0x04;
char a[10]={' ','1','2','3','4','5','6','7','8','9'};
unsigned long A0=0x1D27000,B0=0x1DAA000,C0=0x1CFD000,D0=0x1D5B000; //四个检测位置不放手指
unsigned long A1=0x1C50000,B1=0x1D50000,C1=0x1CC3000,D1=0x1D21000; //四个检测位置放一根手指
unsigned long C2=0x1C89000,D2=0x1CD5000; //CD两个区域检测位置放两根手指
unsigned long read_A,read_B,read_C,read_D; //判断时读取接收数据
unsigned long sum_A0,sum_B0,sum_C0,sum_D0;
unsigned long sum_A1,sum_B1,sum_C1,sum_D1;
unsigned long sum_C2,sum_D2;
unsigned long A0_ave,B0_ave,C0_ave,D0_ave;
unsigned long A1_ave,B1_ave,C1_ave,D1_ave;
unsigned long C2_ave,D2_ave;
int count;
void Delays(void)
{
unsigned int i,j;
for(i=0;i<2000;i++)
for(j=0;j<1000;j++);
}
//设置内核电压 以匹配不同频率
void SetVcoreUp (unsigned int level)
{
PMMCTL0_H = PMMPW_H;// Open PMM registers for write
SVSMHCTL = SVSHE + SVSHRVL0 * level + SVMHE + SVSMHRRL0 * level; // Set SVS/SVM high side new level
SVSMLCTL = SVSLE + SVMLE + SVSMLRRL0 * level; // Set SVM low side to new level
while ((PMMIFG & SVSMLDLYIFG) == 0); // Wait till SVM is settled
PMMIFG &= ~(SVMLVLRIFG + SVMLIFG); // Clear already set flags
PMMCTL0_L = PMMCOREV0 * level; // Set VCore to new level
if ((PMMIFG & SVMLIFG)) // Wait till new level reached
while ((PMMIFG & SVMLVLRIFG) == 0);
SVSMLCTL = SVSLE + SVSLRVL0 * level + SVMLE + SVSMLRRL0 * level; // Set SVS/SVM low side to new level
PMMCTL0_H = 0x00; // Lock PMM registers for write access
}
//SMCLK和MCLK时钟源配置为XT2 即系统时钟为8MHZ
void clock_8MHZ_init(void)
{
P5SEL |= BIT2|BIT3; //将IO配置为XT2功能
UCSCTL6 &= ~XT2OFF; //使能XT2
//因为ACLK和REFCLK的默认时钟源是XT1,而我们这里并没有配置启动XT1CLK,
//所以会产生XT1时钟错误,即XT1LFFG,因此,我们先将ACLK和REFCLK配置为芯片自带的时钟(REFOCLK或VLOCLK)或者即将启动的时钟(XT2)
UCSCTL4 = UCSCTL4&(~(SELA_7))|SELA_1; //先将ACLK配置为VLOCLK
UCSCTL3 |= SELREF_2; //将PLL REFCLK配置为REFOCLK
while (SFRIFG1 & OFIFG)
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// 清除三类时钟标志位 ,这里需要清除三种标志位,因为任何一种标志位都会将OFIFG置位
SFRIFG1 &= ~OFIFG; // 清除时钟错误标志位
}
UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_5|SELM_5; //将SMCLK和MCLK时钟源配置为XT2
}
//SMCLK和MCLK时钟源配置为DCOCLK 即系统时钟为PLL输出(3*8NHZ=24MHZ)
void clock_24MHZ_init(void)
{
P5SEL |= BIT2|BIT3; //将IO配置为XT2功能
UCSCTL6 &= ~XT2OFF; //使能XT2
SetVcoreUp(1); //依次提高Vcore电压等级,
SetVcoreUp(2);
SetVcoreUp(3);
__bis_SR_register(SCG0);
UCSCTL0 = 0;
UCSCTL1 = DCORSEL_5; //23.7MHZ-54.1MHZ
UCSCTL2 = FLLD_0 | 2; //DCOCLK = D*(N+1)*(REFCLK/n)
__bic_SR_register(SCG0);
__delay_cycles(782000);
UCSCTL4 = UCSCTL4&(~(SELA_7))|SELA_1; //先将ACLK配置为VLOCLK
UCSCTL3 |= SELREF_5; //将PLL REFCLK配置为XT2
while (SFRIFG1 & OFIFG)
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// 清除三类时钟标志位 ,这里需要清除三种标志位,因为任何一种标志位都会将OFIFG置位
SFRIFG1 &= ~OFIFG; // 清除时钟错误标志位
}
UCSCTL4 = UCSCTL4&(~(SELS_7|SELM_7))|SELS_3|SELM_3; //将SMCLK和MCLK时钟源配置为DCOCLK
}
//P1^1 ACLK P2^2 SMCLK P7^7 MCLK
void clock_test(void)
{
P1SEL |= BIT0; //ACLK
P1DIR |= BIT0;
P2SEL |= BIT2; //SMCLK
P2DIR |= BIT2;
P7SEL |= BIT7; //MCLK
P7DIR |= BIT7;
}
void Init(void )
{
P1DIR = 0XFF;
P2DIR = 0XFF;
P3DIR = 0XFF;
P4DIR = 0XFF;
P5DIR = 0XFF;
P6DIR = 0XFF;
P7DIR = 0XFF;
P8DIR = 0XFF;
P1DIR &= ~(BIT2+BIT4); //初始化P1.2和P1.4管脚为输入模式
clock_8MHZ_init();
//LCD1602初始化
LcdReset();
P1OUT |= BIT5;
//FDC2214初始化
if(FDC2214_Init() )
{
Delays();
if(FDC2214_Init() )
P1OUT &= ~BIT5;
}
}
void system_flag_Scan(void)
{
if((P1IN & BIT2)==0 && (P1IN & BIT4)==0)
{
system_flag=0x00; //猜拳 判断
}
if((P1IN & BIT2)==0 && (P1IN & BIT4))
{
system_flag=0x01; //划拳 判断
}
if((P1IN & BIT2) && (P1IN & BIT4))
{
system_flag=0x03; //猜拳 训练
}
if((P1IN & BIT2) && (P1IN & BIT4)==0)
{
system_flag=0x02; //划拳 训练
}
}
int main(void)
{
int i;
int flag=0; //猜拳训练模式
int flag_2=0; //划拳训练模式
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
Init();
while(1)
{
system_flag_Scan(); //识别当前模式
if(system_flag==0x00) //猜拳 判断
{
flag=0,flag_2=0;
read_A = FCD2214_ReadCH(0);
read_B = FCD2214_ReadCH(1);
read_C = FCD2214_ReadCH(2);
read_D = FCD2214_ReadCH(3);
DispStr(0, 0,"00");
if((read_A>(A0+A1)/2)&&(read_B>(B0+B1)/2)&&(read_C>(C0+C2)/2)&&(read_D>(D0+D2)/2))
{
DispStr(7,0,"None "); //未操作
}
else if((read_A<(A0+A1)/2)&&(read_B>(B0+B1)/2)&&(read_C>(C0+C2)/2)&&(read_D>(D0+D2)/2))
{
DispStr(7,0,"Rock "); //识别石头
}
else if((read_A<(A0+A1)/2)&&(read_B>(B0+B1)/2)&&(read_C<(C1+C2)/2)&&(read_D>(D0+D2)/2))
{
DispStr(7,0,"Scissors"); //识别剪刀
}
else if((read_A<(A0+A1)/2)&&(read_B<(B0+B1)/2)&&(read_C<(C1+C2)/2)&&(read_D<(D1+D2)/2))
{
DispStr(7,0,"Paper "); //识别布
}
else
{
DispStr(7,0,"ERROR "); //手势错误
}
}
if(system_flag==0x01) //划拳 判断
{
flag=0,flag_2=0;
read_A = FCD2214_ReadCH(0);
read_B = FCD2214_ReadCH(1);
read_C = FCD2214_ReadCH(2);
read_D = FCD2214_ReadCH(3);
DispStr(0, 0,"01");
if((read_A>(A0+A1)/2)&&(read_B>(B0+B1)/2)&&(read_C>(C0+C2)/2)&&(read_D>(D0+D2)/2))
{
DispStr(7,0,"None "); //未操作
}
else if((read_A<(A0+A1)/2)&&(read_B>(B0+B1)/2)&&(read_C<(C0+C1)/2 && read_C>(C1+C2)/2)&&(read_D>(D0+D2)/2))
{
DispStr(7,0,"Num1 "); //识别数字1
}
else if((read_A<(A0+A1)/2)&&(read_B>(B0+B1)/2)&&(read_C<(C1+C2)/2)&&(read_D >(D0+D1)/2))
{
DispStr(7,0,"Num2 "); //识别数字2
}
else if((read_A<(A0+A1)/2)&&(read_B>(B0+B1)/2)&&(read_C<(C1+C2)/2)&&(read_D>(D1+D2)/2 && read_D<(D0+D1)/2))
{
DispStr(7,0,"Num3 "); //识别数字3
}
else if((read_A<(A0+A1)/2)&&(read_B>(B0+B1)/2)&&(read_C<(C1+C2)/2)&&(read_D<(D1+D2)/2))
{
DispStr(7,0,"Num4 "); //识别数字4
}
else if((read_A<(A0+A1)/2)&
没有合适的资源?快使用搜索试试~ 我知道了~
2018电子设计大赛D题源码
共48个文件
c:7个
cout:6个
xcl:5个
5星 · 超过95%的资源 需积分: 10 20 下载量 36 浏览量
2018-07-26
15:40:29
上传
评论 1
收藏 826KB ZIP 举报
温馨提示
基于MSP430F5529核心开发板,采用FDC2214识别模块,显示屏为LCD1602,用了两个拨码开关连接P1.2和P1.4管脚,可以完美识别猜拳和划拳
资源推荐
资源详情
资源评论
收起资源包目录
手势识别界面美化第三版.zip (48个子文件)
手势识别界面美化第三版
fdctest.ewp 80KB
fdctest.ewt 161KB
fdctest.ewd 28KB
Gesture Recognition.eww 161B
fdctest.dep 8KB
user
FDC2214_msp430.c 10KB
main.c 22KB
lcd1602.h 721B
FDC2214_msp430.h 3KB
lcd1602.c 6KB
settings
myiar.wsdt 26KB
fdctest.dbgdt 66KB
fdctest.cspy.bat 2KB
fdctest.Debug.driver.xcl 638B
fdctest.dni 571B
fdctest.Debug.cspy.bat 2KB
fdctest.dnx 4KB
Gesture Recognition.wsdt 25KB
fdctest.wsdt 36KB
fdctest.Debug.general.xcl 235B
fdctest.Debug.cspy.ps1 2KB
Backup of fdctest.ewp 51KB
LCD
display.h 563B
LCDmain.c 1KB
xianshi.c 3KB
display.c 5KB
xianshi.h 526B
lcd1602.c 5KB
Debug
List
fdctest.map 71KB
Exe
fdctest.d43 62KB
Obj
FDC2214_msp430.pbi 335KB
lcd1602.pbi.cout 10KB
display.pbi.cout 10KB
main.pbi 354KB
lcd1602.pbi.xcl 10KB
lcd1602.pbi 330KB
FDC2214_msp430.pbi.cout 10KB
fdctest.pbd 374KB
main.pbi.xcl 10KB
FDC2214_msp430.pbi.xcl 10KB
main.pbi.cout 10KB
lcd1602.r43 30KB
FDC2214_msp430.r43 60KB
fdctest.pbd.linf 359B
main.r43 393KB
fdctest.pbd.browse 374KB
LCDmain.pbi.cout 10KB
xianshi.pbi.cout 10KB
共 48 条
- 1
资源评论
- incipin2018-08-15采用FDC2214识别模块,显示屏为LCD1602,用了两个拨码开关连接P1.2和P1.4管脚
叶枫泠然、
- 粉丝: 1
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功