2109-全国大学生电子设计竞赛-F-纸张数识别(内含arduino代码以及题解)

时间:2024-10-02 18:45:50

题目:

一,任务
设计 并制作纸张 计数 显示装置 ,其 组成如图 1所示 。两块 平行 极板 (极板 A、 极板 B)分别通过 导线 a和导线 b连接到测量显示电路, 装置 可测量并显示 置于 极板 A与极板 B之间的纸张数量。
理想实物图
二,要求
1,基本要求
(1)极板 A和极板 和极板 B上的金 属电极 部分均 为边长 50mm0mm ±1 mm 的正方形, 导线 a和导线 b长度均为 500mm ±5mm 。测量显示电路应具有“自校 。测量显示电路应具有“自校 。测量显示电路应具有“自校 。测量显示电路应具有“自校 准”功能, 即正式测试前,对置于两极板间不同张数的纸进行量,以获取测量校准信息。
(2)测量显示电路可自检并报告极板A和极板B电极之间是否短路。
(3)测量 置于两 极板之间 1~ 10 张不等的 给定 纸张数。每次在极板间放 入 被测纸张 并固定 后,一键启动测量显示被纸张数 后,一键启动测量显示被纸张数 后,一键启动测量显示被纸张数 并发出一声蜂鸣。 每次测量 从按下 同一 测量启动键到发出蜂鸣的 时间 不得超过 5秒钟 , 在此 期间对 测量装置 不得有任何人工干预 。
2.发挥部分
(1) 极板、导线 均不变, 测量 置于 两极板之间 15 ~30张不等的 给定 纸张 数。 对测量启动键、显示蜂鸣 测量启动键、显示蜂鸣 测量启动键、显示蜂鸣 、测量 时间 、不得人工干预 、不得人工干预 、不得人工干预 等有关要求同“基 要求同“基 要求同“基 本要求 (3) ”。
(2) 极板 、导线 均不变 ,测量 置于两 极板之间 30 张以上 的给定 纸张 数。 对测量启动键、显示蜂鸣 测量启动键、显示蜂鸣 测量启动键、显示蜂鸣 、测量 时间、不得人工干预等有关 时间、不得人工干预等有关 时间、不得人工干预等有关 要求同“基 要求同“基 要求同“基 本要求 (3) ”。
(3) 其他。
三、说明
(1) 被测纸张一律为 70g 规格的 规格的 A4 复印纸, 极板 A、B电极 接触 被测纸 张的具体位置不限。测试 时使用 测试 现场提供 的同规格纸张 。
(2) 极板 A、B可用金属板材 可用金属板材 制作 ,也 可用 双面覆铜板(简称) 双面覆铜板(简称) 制 作。双面板的一 。双面板的一 面加工 出边长 50mm ±1mm 的正方形 覆铜电 极板,另 一面 允许 有用于焊接导线 a、b的过孔 焊盘 与引线、 不允许有覆铜面 网。禁止用多层板 制作极。
(3) 极板 A、B与导线 a、b(信号线) 必须 为二线制平行极板结构 二线制平行极板结构 ,每块 ,每块 极板 的电极 只能连接一根信号线; 导线 a、b的线缆类型与排布方式 不限。极板 、导线不 符合上述 要求 的不予测试 。
(4) 参赛者自行设计极板与纸张之间的 结构, 使两极板 能压紧或夹被测 纸张, 该结构不得增加 电极板 面积 ;极板 A、B与导线 a、b部分 不得 安装 或连接 元器件 、其他 传感器 或量器 ,否则 不予测试 。
(5) “自 校准”应在测试前 校准”应在测试前 的作品恢复准备阶段完成, 开始 测试 后不 得再 进行“自校准” 操作。
(6) 每次 开始 测量 只能按同一个启动键(只能按一次), 完成 测量 时发出 蜂鸣音 并显示 锁定 的被测纸张数,无法锁定 显示 纸张数 的不得分 。

评分表

思路:

利用fdc1214模块将两极板之间的电容大小转换为数字信号返回到单片机,通过多次测试总结数据,
数据处理可以用三种方法进行:
(1):
打表,将数据区间不断的精确,从而确定固定纸张对应数值,从而得之数目,然后将数字映射到LDC模块进行显示
(2):
利用EXCEL表格进行函数模拟,得出具体的函数(但是解函数比较麻烦,好像涉及到五阶函数求解模拟)
(3):利用matlab(数学建模的巨巨应该会很熟悉)进行模拟函数,因为本人太过于菜,不得不用打表处理数据。

代码


#include <>
#include <>
LCD lcd(33, 31, 29);//LCD,CS,DAT,CLK
struct node{
  int l;
  int r;
};
node arr[31]={{13960,14399},{14400,15100},{15101,15500},{15501,16000},{16001,16300},{16301,16700},{16701,16950},{16951,17150},{17151,17450},{17451,17830},{17831 ,18040},{18041,18140},{18141,18330},{18331,18520},{18521,18725},{18726,18900},{18901,19040},{19041,19130},{19131,19230},{19231,19400},{19401,19500},{19501,19620},{19621,19720},{19721,19820},{19821,19910},{19911,20000},{20001,20055},{20056,20130},{20131,20220},{20221,20300},{20301,20555}};
///打表的数据
char str1[] = "-paper";
char str2[] = "cutting-out";
char str3[]="HAPPY-DAY";
///LCD显示的内容
int light=13;
int lamp1=2;
int lamp2=3;
int buzzer = 12;
int kl[4] = { 4,5, 6, 7};            //行线引脚定义
int kc[4] = { 8,9, 10, 11};         //列线引脚定义
int key = 0;                          //键值
int key1 = 0;                         //判断按键是否释放标志
int key_l;                            //行
int key_c;                            //列
int flag = 0;                         //有键按下标志
#define FDC2X14_Address 0x2A
#define FDC2X14_W FDC2X14_Address<<1
#define FDC2X14_R (FDC2X14_Address<<1)+1
#define DATA_CH0 0x00
#define DATA_LSB_CH0 0x01
#define DATA_CH1 0x02
#define DATA_LSB_CH1 0x03
#define DATA_CH2 0x04
#define DATA_LSB_CH2 0x05
#define DATA_CH3 0x06
#define DATA_LSB_CH3 0x07
#define RCOUNT_CH0 0x08
#define RCOUNT_CH1 0x09
#define RCOUNT_CH2 0x0A
#define RCOUNT_CH3 0x0B
#define OFFSET_CH0 0x0C
#define OFFSET_CH1 0x0D
#define OFFSET_CH2 0x0E
#define OFFSET_CH3 0x0F
#define SETTLECOUNT_CH0 0x10
#define SETTLECOUNT_CH1 0x11
#define SETTLECOUNT_CH2 0x12
#define SETTLECOUNT_CH3 0x13
#define CLOCK_DIVIDERS_C_CH0 0x14
#define CLOCK_DIVIDERS_C_CH1 0x15
#define CLOCK_DIVIDERS_C_CH2 0x16
#define CLOCK_DIVIDERS_C_CH3 0x17
#define STATUS 0x18
#define ERROR_CONFIG 0x19
#define CONFIG 0x1A
#define MUX_CONFIG 0x1B
#define RESET_DEV 0x1C
#define DRIVE_CURRENT_CH0 0x1E
#define DRIVE_CURRENT_CH1 0x1F
#define DRIVE_CURRENT_CH2 0x20
#define DRIVE_CURRENT_CH3 0x21
#define MANUFACTURER_ID 0x7E
#define DEVICE_ID 0x7F
///宏定义初始值
int LDC131x_W_Reg(unsigned int addr, unsigned int data);   /* 写1个数据到 LDC1314 寄存器 */

int LDC131x_R_Reg(unsigned int addr, unsigned int *data);  /* 读1个数据从 LDC1314 寄存器 */

void LDC131x_Read_CHx(unsigned int CHx, unsigned int *data);   /* 读取单通道 */
void LDC131x_Read_4CH();  /* 读取4个通道 */

void LDC131x_Init();     /* LDC1314 初始化 */
int LDC131x_IIC_Test();  /* iic 总线读写测试 成功返回 0 */

unsigned int CHx_Data[4] = {0, 0, 0, 0};

int LDC131x_IIC_Test()
{
  unsigned int res = 0x00;
  LDC131x_R_Reg(0x7F, &res);
  return (res == (unsigned int)0x3054) ? 0 : 1;
}
void LDC131x_Init()
{
  unsigned int k;
  ();

  LDC131x_W_Reg(RCOUNT_CH0, 0x30, 0xCB);
  LDC131x_W_Reg(RCOUNT_CH1, 0x30, 0xCB);


  LDC131x_W_Reg(CLOCK_DIVIDERS_C_CH0, 0x20, 0x01);
  LDC131x_W_Reg(CLOCK_DIVIDERS_C_CH1, 0x20, 0x01);


  LDC131x_W_Reg(SETTLECOUNT_CH0, 0x00, 0x19);
  LDC131x_W_Reg(SETTLECOUNT_CH1, 0x00, 0x19);


  LDC131x_W_Reg(ERROR_CONFIG, 0x00, 0x00);

  LDC131x_W_Reg(MUX_CONFIG, 0x82, 0x0c);

  LDC131x_W_Reg(DRIVE_CURRENT_CH0, 0x50, 0x00);
  LDC131x_W_Reg(DRIVE_CURRENT_CH1, 0x50, 0x00);

  LDC131x_W_Reg(CONFIG, 0x14, 0x01);

  delay(100);
}
int LDC131x_W_Reg(unsigned int addr, unsigned char data1, unsigned char data2)
{
  int res = -1;

  //申请I2C总线,寻访EEPROM,提供写信号
  (FDC2X14_Address);

  //给出要写的地址
  ( addr );

  //提供数据
  ( data1 );
  ( data2 );

  //停止I2C
  res =  ();

  return res;
}
int LDC131x_R_Reg(unsigned int addr, unsigned int *data)
{
  int res = -1;
  *data = 0x00;

  //申请I2C总线,寻访EEPROM,提供写信号
  (FDC2X14_Address);

  //提供要读的地址
  ( addr );

  ();

  (FDC2X14_Address, 2);

  while ( () == 0 );
  *data = ();
  *data <<= 8;
  *data |= ();

  //停止I2C
  res = ();

  return res;
}

void LDC131x_Read_CHx(unsigned int CHx, unsigned int *data) /* 读取单通道 */
{
  unsigned int res = 0x0000;
  do {
    LDC131x_R_Reg(STATUS, &res);
  } while ( !( res & 0x0040 ) );
  LDC131x_R_Reg(CHx, data);
}
void LDC131x_Read_4CH() /* 读取4个通道 */
{
  unsigned int res = 0x0000;
  do {
    LDC131x_R_Reg(STATUS, &res);
  } while ( !( res & 0x0040 ) );
  LDC131x_R_Reg(DATA_CH0, &CHx_Data[0]);
  LDC131x_R_Reg(DATA_CH1, &CHx_Data[1]);
  LDC131x_R_Reg(DATA_CH2, &CHx_Data[2]);
  LDC131x_R_Reg(DATA_CH3, &CHx_Data[3]);
}
void setup()
{
  (9600);
  LDC131x_Init();
  //();
  lcd.initial_LCD1602();
  pinMode(light,OUTPUT);
  pinMode(buzzer, OUTPUT);
  pinMode(lamp1,OUTPUT);
  pinMode(lamp2,OUTPUT);
}

void loop()
{
  
  // delay(1000);
  read_key();
  unsigned int HSB = 0x00;
  unsigned int LSB = 0x00;
  unsigned long int val = 0x00;
  //LDC131x_Read_4CH();
#if 0
  (CHx_Data[0] / 4096.0 * 10 * 2); (" ");
  (CHx_Data[1] / 4096.0 * 10 * 2); (" ");
  (CHx_Data[2] / 4096.0 * 10 * 2); (" ");
  (CHx_Data[3] / 4096.0 * 10 * 2); (" ");
#elif 0
  (CHx_Data[0]); (",");
  (CHx_Data[1]); (",");
  (CHx_Data[2]); (",");
#elif 1
  LDC131x_R_Reg(0x02, &HSB);
  LDC131x_R_Reg(0x03, &LSB);
  val = (((unsigned long int)HSB & 0xFFF) << 16) + LSB;
  (HSB & 0xFFF);//前三位
  LSB/=1000;
     (LSB);//后四位
     int temp=HSB & 0xFFF;
     int temp2=LSB;
     int ans=temp*100+temp2;
     int ans_t;///真正判断的答案即下标
     ("678");
     (ans);
  int dat = (int)HSB & 0xFFF;
  //delay(2000);
  if(key!=0){
    if(key==1)//检验5
    {
      ///检验是否进入检验
        for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    while(ans_t!=5){
        for(int i=0;i<20;i++)
    {
      if(ans>=arr[i].l&&ans<=arr[i].r)
      {
        ans_t=i+1;
        break;
      }
      }
      if(ans_t!=5)///判断差距(因为数据可能会受到地理环境的影响,数据整体会跳动,避免在某个正确区间跳出,所以要通过数据范围减少或者增加,来保证已存数据无误,下面一样)
      {
      if(ans_t>5)
      {
        for(int i=0;i<20;i++)
        {
          arr[i].l+=50;
          arr[i].r+=50;
        }
      }
      else if(ans_t<5)
      {
        for(int i=0;i<20;i++){
        arr[i].l-=50;
        arr[i].r-=50;
        }
      }
      }
      else{
       int l_d=ans-arr[4].l;
       int r_d=arr[4].r-ans;
       while(l_d<=35||r_d<=35){
       if(l_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].l-=20;
          arr[i].r-=20;
        }
       }
              if(r_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].r+=20;
          arr[i].l+=20;
        }
      }
       }
    }
        ///检验是否成功退出
    for(int i=0;i<80;i++)
    {
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    key=0;
    }
    }
  else     if(key==2)//检验10
    {
      ///检验是否进入检验
        for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    while(ans_t!=10){
        for(int i=0;i<20;i++)
    {
      if(ans>=arr[i].l&&ans<=arr[i].r)
      {
        ans_t=i+1;
        break;
      }
      }
      if(ans_t!=10)///判断差距
      {
      if(ans_t>10)
      {
        for(int i=0;i<20;i++)
        {
          arr[i].l+=50;
          arr[i].r+=50;
        }
      }
      else if(ans_t<10)
      {
        for(int i=0;i<20;i++){
        arr[i].l-=50;
        arr[i].r-=50;
        }
      }
      }
      else{
       int l_d=ans-arr[4].l;
       int r_d=arr[4].r-ans;
       while(l_d<=35||r_d<=35){
       if(l_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].l-=20;
          arr[i].r-=20;
        }
       }
              if(r_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].r+=20;
          arr[i].l+=20;
        }
      }
       }
    }
        ///检验是否成功退出
    for(int i=0;i<80;i++)
    {
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    key=0;
    }
    }
 else     if(key==3)//检验15
    {
      ///检验是否进入检验
        for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    while(ans_t!=15){
        for(int i=0;i<20;i++)
    {
      if(ans>=arr[i].l&&ans<=arr[i].r)
      {
        ans_t=i+1;
        break;
      }
      }
      if(ans_t!=15)///判断差距
      {
      if(ans_t>15)
      {
        for(int i=0;i<20;i++)
        {
          arr[i].l+=50;
          arr[i].r+=50;
        }
      }
      else if(ans_t<15)
      {
        for(int i=0;i<20;i++){
        arr[i].l-=50;
        arr[i].r-=50;
        }
      }
      }
      else{
       int l_d=ans-arr[4].l;
       int r_d=arr[4].r-ans;
       while(l_d<=35||r_d<=35){
       if(l_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].l-=20;
          arr[i].r-=20;
        }
       }
              if(r_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].r+=20;
          arr[i].l+=20;
        }
      }
       }
    }
        ///检验是否成功退出
    for(int i=0;i<80;i++)
    {
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    key=0;
    }
    }
    else if(key==4)///检验20
  {
        ///检验是否进入检验
        for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
        while(ans_t!=20){
        for(int i=15;i<20;i++)
    {
      if(ans>=arr[i].l&&ans<=arr[i].r)
      {
        ans_t=i+1;
        break;
      }
      }
      if(ans_t!=20){
      if(ans_t>20)
      {
        for(int i=15;i<20;i++)
        {
          arr[i].l+=50;
          arr[i].r+=50;
        }
      }
      else if(ans_t<20)
      {
        for(int i=15;i<20;i++){
        arr[i].l-=50;
        arr[i].r-=50;
                }
      }
    }
        else{   
          ("chne");    
       int l_d=ans-arr[19].l;
       int r_d=arr[19].r-ans;
            while(l_d<=35||r_d<=35){

       if(l_d<=35)
       {
        for(int i=15;i<20;i++)
        {
          arr[i].l-=20;
          arr[i].r-=20;
        }
       }
              if(r_d<=35)
       {
        for(int i=15;i<20;i++)
        {
          arr[i].r+=20;
          arr[i].l+=20;
        }
      }
            }
    }   

    key=0;
  }    ///检验是否成功退出
    for(int i=0;i<80;i++)
    {
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
  }
     else if(key==5)///检验25
  {
        ///检验是否进入检验
        for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
        while(ans_t!=25){
        for(int i=0;i<31;i++)
    {
      if(ans>=arr[i].l&&ans<=arr[i].r)
      {
        ans_t=i+1;
        break;
      }
      }
      if(ans_t!=25){
      if(ans_t>25)
      {
        for(int i=0;i<31;i++)
        {
          arr[i].l+=50;
          arr[i].r+=50;
        }
      }
      else if(ans_t<20)
      {
                for(int i=0;i<31;i++){
        arr[i].l-=50;
        arr[i].r-=50;
                }
      }
    }
           else{
       int l_d=ans-arr[24].l;
       int r_d=arr[24].r-ans;
            while(l_d<=35||r_d<=35){
       if(l_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].l-=20;
          arr[i].r-=20;
        }
       }
              if(r_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].r+=20;
          arr[i].l+=20;
        }
      }
            }
    }   
    ///检验是否成功退出
    for(int i=0;i<80;i++)
    {
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
    key=0;
  }
  }
     else if(key==6)///检验30
  {
        ///检验是否进入检验
        for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
        while(ans_t!=30){
        for(int i=0;i<31;i++)
    {
      if(ans>=arr[i].l&&ans<=arr[i].r)
      {
        ans_t=i+1;
        break;
      }
      }
      if(ans_t!=30){
      if(ans_t>30)
      {
        for(int i=0;i<31;i++)
        {
          arr[i].l+=50;
          arr[i].r+=50;
        }
      }
      else if(ans_t<30)
      {
                for(int i=0;i<31;i++){
        arr[i].l-=50;
        arr[i].r-=50;
                }
      }
    }
           else{       int l_d=ans-arr[29].l;
       int r_d=arr[29].r-ans;
            while(l_d<=35||r_d<=35){

       if(l_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].l-=20;
          arr[i].r-=20;
        }
       }
              if(r_d<=35)
       {
        for(int i=0;i<31;i++)
        {
          arr[i].r+=20;
          arr[i].l+=20;
        }
      }
            }
    }   
    ///检验是否成功退出

    key=0;
  }    for(int i=0;i<80;i++)
    {
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发    声音        
    delay(1);//延时 ms
    }
    for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    }
  }
  else
  {
    ();
    digitalWrite(lamp1,HIGH);
    delay(1000);
    digitalWrite(lamp1,LOW);
      if (dat <=205) {
    lcd.SET_XY(2, 0);
    for(int i=0;i<31;i++)
    {
      if(ans>=arr[i].l&&ans<=arr[i].r)
      {
        ans_t=i+1;
        break;
      }
      }
    lcd.Write_data(ans_t, 0);
    lcd.Write_String(str1);
    //digitalWrite(lamp1,LOW);
    // ("666");
//
 lcd.SET_XY(2,1);
//    // int a=LSB;
lcd.Write_String(str3); //第二行打印暂时无用
    for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    key=0;
  }
      }
  else {  
    ();
    lcd.SET_XY(2, 0);
    lcd.Write_String(str2);
   // lcd.Write_String();
    digitalWrite(lamp1,HIGH);//灯
    for(int i=0;i<80;i++){
    digitalWrite(buzzer, HIGH); //发声音        
    delay(1);//延时1ms        
    digitalWrite(buzzer,LOW);//不发声音        
    delay(1);//延时 ms
    key=0;
  }
  }
  }
  }   
#else
  LDC131x_R_Reg(0x7f, &LSB);
  (LSB, HEX);
#endif
  delay(100);
}



void read_key()//
{
  for (int i = 0; i < 4; i++)             //行输出低,列输入
  {
    pinMode(kl[i], OUTPUT);
    digitalWrite(kl[i], LOW);
    pinMode(kc[i], INPUT_PULLUP);
  }
  delay(5);                               //等待稳定
  for (int k = 0; k < 4; k++)
  {
    if (!digitalRead(kc[k]))              //有键按下
    {
      delay(20);                          //延时消抖动
      if (!digitalRead(kc[k]))            //再次判断有键按下
      {
        key_c = k;                        //记录列值
        flag = 1;                         //设有键标志
      }
      else flag = 0;
    }
  }
  if (flag == 1)
  {
    for (int n = 0; n < 4; n++)          //列输出低,行输入
    {
      pinMode(kc[n], OUTPUT);
      digitalWrite(kc[n], LOW);
      pinMode(kl[n], INPUT_PULLUP);


    }
    delay(5);
    for (int j = 0; j < 4; j++)
    {
      if (!digitalRead(kl[j]))
      {
        key_l = j;                        //记录行值
        key = key_l * 4 + key_c + 1;      //计算键值
        flag = 0;
      }
    }
  }
  if (key1 != key)                        //判断按键是否释放
    key1 = key;
  else
    key = 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • 175
  • 176
  • 177
  • 178
  • 179
  • 180
  • 181
  • 182
  • 183
  • 184
  • 185
  • 186
  • 187
  • 188
  • 189
  • 190
  • 191
  • 192
  • 193
  • 194
  • 195
  • 196
  • 197
  • 198
  • 199
  • 200
  • 201
  • 202
  • 203
  • 204
  • 205
  • 206
  • 207
  • 208
  • 209
  • 210
  • 211
  • 212
  • 213
  • 214
  • 215
  • 216
  • 217
  • 218
  • 219
  • 220
  • 221
  • 222
  • 223
  • 224
  • 225
  • 226
  • 227
  • 228
  • 229
  • 230
  • 231
  • 232
  • 233
  • 234
  • 235
  • 236
  • 237
  • 238
  • 239
  • 240
  • 241
  • 242
  • 243
  • 244
  • 245
  • 246
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • 265
  • 266
  • 267
  • 268
  • 269
  • 270
  • 271
  • 272
  • 273
  • 274
  • 275
  • 276
  • 277
  • 278
  • 279
  • 280
  • 281
  • 282
  • 283
  • 284
  • 285
  • 286
  • 287
  • 288
  • 289
  • 290
  • 291
  • 292
  • 293
  • 294
  • 295
  • 296
  • 297
  • 298
  • 299
  • 300
  • 301
  • 302
  • 303
  • 304
  • 305
  • 306
  • 307
  • 308
  • 309
  • 310
  • 311
  • 312
  • 313
  • 314
  • 315
  • 316
  • 317
  • 318
  • 319
  • 320
  • 321
  • 322
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • 334
  • 335
  • 336
  • 337
  • 338
  • 339
  • 340
  • 341
  • 342
  • 343
  • 344
  • 345
  • 346
  • 347
  • 348
  • 349
  • 350
  • 351
  • 352
  • 353
  • 354
  • 355
  • 356
  • 357
  • 358
  • 359
  • 360
  • 361
  • 362
  • 363
  • 364
  • 365
  • 366
  • 367
  • 368
  • 369
  • 370
  • 371
  • 372
  • 373
  • 374
  • 375
  • 376
  • 377
  • 378
  • 379
  • 380
  • 381
  • 382
  • 383
  • 384
  • 385
  • 386
  • 387
  • 388
  • 389
  • 390
  • 391
  • 392
  • 393
  • 394
  • 395
  • 396
  • 397
  • 398
  • 399
  • 400
  • 401
  • 402
  • 403
  • 404
  • 405
  • 406
  • 407
  • 408
  • 409
  • 410
  • 411
  • 412
  • 413
  • 414
  • 415
  • 416
  • 417
  • 418
  • 419
  • 420
  • 421
  • 422
  • 423
  • 424
  • 425
  • 426
  • 427
  • 428
  • 429
  • 430
  • 431
  • 432
  • 433
  • 434
  • 435
  • 436
  • 437
  • 438
  • 439
  • 440
  • 441
  • 442
  • 443
  • 444
  • 445
  • 446
  • 447
  • 448
  • 449
  • 450
  • 451
  • 452
  • 453
  • 454
  • 455
  • 456
  • 457
  • 458
  • 459
  • 460
  • 461
  • 462
  • 463
  • 464
  • 465
  • 466
  • 467
  • 468
  • 469
  • 470
  • 471
  • 472
  • 473
  • 474
  • 475
  • 476
  • 477
  • 478
  • 479
  • 480
  • 481
  • 482
  • 483
  • 484
  • 485
  • 486
  • 487
  • 488
  • 489
  • 490
  • 491
  • 492
  • 493
  • 494
  • 495
  • 496
  • 497
  • 498
  • 499
  • 500
  • 501
  • 502
  • 503
  • 504
  • 505
  • 506
  • 507
  • 508
  • 509
  • 510
  • 511
  • 512
  • 513
  • 514
  • 515
  • 516
  • 517
  • 518
  • 519
  • 520
  • 521
  • 522
  • 523
  • 524
  • 525
  • 526
  • 527
  • 528
  • 529
  • 530
  • 531
  • 532
  • 533
  • 534
  • 535
  • 536
  • 537
  • 538
  • 539
  • 540
  • 541
  • 542
  • 543
  • 544
  • 545
  • 546
  • 547
  • 548
  • 549
  • 550
  • 551
  • 552
  • 553
  • 554
  • 555
  • 556
  • 557
  • 558
  • 559
  • 560
  • 561
  • 562
  • 563
  • 564
  • 565
  • 566
  • 567
  • 568
  • 569
  • 570
  • 571
  • 572
  • 573
  • 574
  • 575
  • 576
  • 577
  • 578
  • 579
  • 580
  • 581
  • 582
  • 583
  • 584
  • 585
  • 586
  • 587
  • 588
  • 589
  • 590
  • 591
  • 592
  • 593
  • 594
  • 595
  • 596
  • 597
  • 598
  • 599
  • 600
  • 601
  • 602
  • 603
  • 604
  • 605
  • 606
  • 607
  • 608
  • 609
  • 610
  • 611
  • 612
  • 613
  • 614
  • 615
  • 616
  • 617
  • 618
  • 619
  • 620
  • 621
  • 622
  • 623
  • 624
  • 625
  • 626
  • 627
  • 628
  • 629
  • 630
  • 631
  • 632
  • 633
  • 634
  • 635
  • 636
  • 637
  • 638
  • 639
  • 640
  • 641
  • 642
  • 643
  • 644
  • 645
  • 646
  • 647
  • 648
  • 649
  • 650
  • 651
  • 652
  • 653
  • 654
  • 655
  • 656
  • 657
  • 658
  • 659
  • 660
  • 661
  • 662
  • 663
  • 664
  • 665
  • 666
  • 667
  • 668
  • 669
  • 670
  • 671
  • 672
  • 673
  • 674
  • 675
  • 676
  • 677
  • 678
  • 679
  • 680
  • 681
  • 682
  • 683
  • 684
  • 685
  • 686
  • 687
  • 688
  • 689
  • 690
  • 691
  • 692
  • 693
  • 694
  • 695
  • 696
  • 697
  • 698
  • 699
  • 700
  • 701
  • 702
  • 703
  • 704
  • 705
  • 706
  • 707
  • 708
  • 709
  • 710
  • 711
  • 712
  • 713
  • 714
  • 715
  • 716
  • 717
  • 718
  • 719
  • 720
  • 721
  • 722
  • 723
  • 724
  • 725
  • 726
  • 727
  • 728
  • 729
  • 730
  • 731
  • 732
  • 733
  • 734
  • 735
  • 736
  • 737
  • 738
  • 739
  • 740
  • 741
  • 742
  • 743
  • 744
  • 745
  • 746
  • 747
  • 748
  • 749
  • 750
  • 751
  • 752
  • 753
  • 754
  • 755
  • 756
  • 757
  • 758
  • 759
  • 760
  • 761
  • 762
  • 763
  • 764
  • 765
  • 766
  • 767
  • 768
  • 769
  • 770
  • 771
  • 772
  • 773
  • 774

比赛结果:

测试结果还是比较令人满意的,但是因为铜片是自己手工制作不太精准多或者少了几毫米,线的长度也长了七毫米(希望成绩不要作废QAQ,这三天睡眠没有超过12小时,没功劳也有苦劳QWQ),下次一定要严格按照标准来进行。

比赛收获:

不管结果好坏,认识了几位一起参加比赛的朋友,挺好的,也同时刷新了我对猪队友的认识(真正地猪队友是他啥都不干就算啦,还整天给我们俩甩脸子,让他拿一箱子,扔在地上一脚踢过来,服了,)三人队伍变成俩人队伍,还有一个一直在旁边给你抬杠(2+1<2;丫的,还胡乱改我代码,只想说一句***)。
(之前与别人闹矛盾,都会想一下自己的错误,这次真想不出来~~~~)
总之比赛完还是挺爽的,体会到那种累的不想动弹的感觉。人生的宝贵财富。
下一年加油哈。

比赛结果:

额,果然不出所料,没拿奖,哎~~,就因为那个线比比赛要求长了五毫米(通宵三天泡在实验室,努力与汗水都付之东流,心里满满的不甘,难受,Orz),也没办法,只能怪自己不细心吧,没能按照要求,这可能也是未来的社会所要求的吧,没有规矩不成方圆,不过这些所谓的规矩到底是真的起到了提高拔优的作用,还是说扼杀了一些更好的创意与想法。(不知所言)。(补写于2019-9-3,20:51)