智能车制作

标题: 【求教】谁做过北科那种键盘加液晶调参的,希望能学习一下 [打印本页]

作者: lch152060    时间: 2019-12-10 21:57
标题: 【求教】谁做过北科那种键盘加液晶调参的,希望能学习一下
类似于图片这种,我能想到的是用CH355做  这样oled加键盘只需要一对ic但是程序这块一致搞不定,希望大佬可以教一下
下面是我的程序:
ch455。c
/*********************************************************************/
* * 函数功能:IIC产生起始信号函数 * 输入参数:无 * 输出参数:无 */
void CH455_I2c_Start()
{   
  DIR_OUT();   
  SCL1();   //SCL = high;   
  simiic_delay();
  SDA1();   //SDA = high;   
  simiic_delay();  
  SDA0();    //SDA = low;   
  simiic_delay();   
  SCL0();    //SCL = low;   
  simiic_delay();
}
/* * 函数功能:IIC产生停止信号 * 输入参数:无 * 输出参数:无 */
void CH455_I2c_Stop()
{   
  DIR_OUT();   
  SCL0();     //SCL = low;   
  simiic_delay();   
  SDA0();     //SDA = low;   
  simiic_delay();   
  SCL1();    //SCL = high;   
  simiic_delay();   
  SDA1();    //SDA = high;   

void CH455_I2c_WrByte(unsigned char IIC_Byte)
{   
  unsigned char i;   
  DIR_OUT();
  for(i = 0; i < 8; i++)   
  {        
    if(IIC_Byte & 0x80)            
      SDA1();   //SDA=high;        
    else            
      SCL0();  //SDA=low;        
    simiic_delay();      
    SCL1();      //SCL=high;        
   simiic_delay();      
    SCL0();       //SCL=low;        
    simiic_delay();      
    IIC_Byte<<=1;   
  }   
  simiic_delay();
  SDA1();          //SDA=1;   
  simiic_delay();  
  SCL1();          //SCL=1;   
  simiic_delay();
  SCL0();           //SCL=0;   
  simiic_delay();
}
unsigned char  CH455_I2c_RdByte( void )  //读一个字节数据
{        
  unsigned char i, bytedata;   
  DIR_IN();    //将数据设置为输入模式   
  simiic_delay();   
  SDA1();      //数据线拉高   
simiic_delay();  
  SDA0();   
simiic_delay();   
    for(i = 0; i < 8; i++)      //读8位数据   
    {        
      SCL1();        
      simiic_delay();      
      bytedata <<= 1;        
      simiic_delay();   
      bytedata |= (gpio_get(SEEKFREE_SDA));        
      simiic_delay();   
      SCL0();      
      simiic_delay();
    }   
    DIR_OUT();          //数据线设置回输出模式   
    SDA1();         //SDA=1;   
   simiic_delay();
    SCL1();         //SCL=1;   
   simiic_delay();  
   SCL0();           //SCL=0;   
   simiic_delay();  
    return bytedata;//返回数据
}
void CH455_Write( uint16 cmd ) //写命令
{
        CH455_I2c_Start();               //启动总线   
// simiic_start();
        CH455_I2c_WrByte(((uint8)(cmd>>7)&CH455_I2C_MASK)|CH455_I2C_ADDR);   
        CH455_I2c_WrByte((uint8)cmd);     //发送数据   
        CH455_I2c_Stop();                 //结束总线
    //    simiic_stop();
}
extern uint8 keycode;
uint8 CH455_Read( void )  //读取按键
{
//  uint8 keycode;   
  // simiic_start();
  CH455_I2c_Start();                //启动总线   
  CH455_I2c_WrByte((uint8)(CH455_GET_KEY>>7)&CH455_I2C_MASK|0x01|CH455_I2C_ADDR);   
  keycode=CH455_I2c_RdByte();      //读取数据
//simiic_stop();
   CH455_I2c_Stop();                //结束总线
  return keycode;
}
/********************************************************************************/
ch455.h
/********************************************************************************/
* ********************************************************************************************* */
// 设置系统参数命令
#define CH455_BIT_ENABLE 0x01  // 开启/关闭位
#define CH455_BIT_SLEEP  0x04  // 睡眠控制位
#define CH455_BIT_7SEG  0x08  // 7段控制位
#define CH455_BIT_INTENS1 0x10  // 1级亮度
#define CH455_BIT_INTENS2 0x20  // 2级亮度
#define CH455_BIT_INTENS3 0x30  // 3级亮度
#define CH455_BIT_INTENS4 0x40  // 4级亮度
#define CH455_BIT_INTENS5 0x50  // 5级亮度
#define CH455_BIT_INTENS6 0x60  // 6级亮度
#define CH455_BIT_INTENS7 0x70  // 7级亮度
#define CH455_BIT_INTENS8 0x00  // 8级亮度
#define CH455_SYSOFF     0x0400           // 关闭显示、关闭键盘
#define CH455_SYSON         ( CH455_SYSOFF | CH455_BIT_ENABLE ) // 开启显示、键盘
#define CH455_SLEEPOFF     CH455_SYSOFF // 关闭睡眠
#define CH455_SLEEPON     ( CH455_SYSOFF | CH455_BIT_SLEEP ) // 开启睡眠
#define CH455_7SEG_ON     ( CH455_SYSON | CH455_BIT_7SEG ) // 开启七段模式
#define CH455_8SEG_ON     ( CH455_SYSON | 0x00 )         // 开启八段模式
#define CH455_SYSON_4     ( CH455_SYSON | CH455_BIT_INTENS4 ) // 开启显示、键盘、4级亮度
#define CH455_SYSON_8     ( CH455_SYSON | CH455_BIT_INTENS8 ) // 开启显示、键盘、8级亮度
   
// 加载字数据命令
#define CH455_DIG0  0x1400   // 数码管位0显示,需另加8位数据
#define CH455_DIG1  0x1500   // 数码管位1显示,需另加8位数据
#define CH455_DIG2  0x1600   // 数码管位2显示,需另加8位数据
#define CH455_DIG3  0x1700   // 数码管位3显示,需另加8位数据
   
// 读取按键代码命令
#define CH455_GET_KEY 0x0700     // 获取按键,返回按键代码

// CH455接口定义
#define  CH455_I2C_ADDR  0x40   // CH455的地址
#define  CH455_I2C_MASK  0x3E   // CH455的高字节命令掩码


/****************************************************************/
留的是硬件IIC引脚
    //因此这里使用硬件IIC初始化6050,如需使用软件IIC,可以将软件iic引脚修改为SDA 接A13  SCL接A14
    //然后使用软件IIC初始化函数即可
    //硬件IIC速度明显优于软件IIC
   // mpu6050_init_hardware();
   
    EnableInterrupts;
    while(1)
    {
          CH455_Write( CH455_SYSON );         //抗干扰,定时刷新CH455寄存器  
//          CH455_Write( CH455_DIG0 | 0XFF );   
          switch((CH455_Read()/8)%8)   
          {   
                    case 0:key=0;break;   
                    case 1:key=1;break;   
                    case 2:key=2;break;   
                    case 3:key=3;break;   
                    case 4:key=4;break;   
                    case 5:key=5;break;   
                    case 6:key=6;break;   
          default:  key=10;  
          }
   }
}
求大佬指教

作者: 优乐美    时间: 2019-12-11 10:37
这个是哪里的视频?
作者: The-answer    时间: 2019-12-11 13:39
如果不是io特别少的芯片,不非得用这个吧
作者: 快上车    时间: 2019-12-11 21:33
不一定要键盘,这样太浪费板子面积了。至于算法方面,搞个结构体就能做液晶调参了,自个多琢磨吧
作者: cs538138    时间: 2019-12-12 09:54
4楼正解,一个五向解决问题
作者: aytc100    时间: 2019-12-12 10:54
优乐美 发表于 2019-12-11 10:37
这个是哪里的视频?

电磁受地下钢筋影响.mp4

作者: aytc100    时间: 2019-12-12 11:01
IIC总线受上下文影响比较大,新手建议用SPI总线的器件
作者: shenyidui'shou    时间: 2019-12-12 21:02
我们用的摇杆,感觉也不错
作者: 优乐美    时间: 2020-1-10 18:02
附件为模块演示视频  1.3寸OLED+ch455矩阵键盘+无源蜂鸣器  IIC驱动接口

作者: 优乐美    时间: 2020-1-11 11:10
https://v.youku.com/v_show/id_XN ... j.8428770.3416059.1
演示视频链接

作者: The-answer    时间: 2020-3-7 16:07
优乐美 发表于 2020-1-10 18:02
附件为模块演示视频  1.3寸OLED+ch455矩阵键盘+无源蜂鸣器  IIC驱动接口

找不到店铺呀

作者: 优乐美    时间: 2020-3-9 20:38
The-answer 发表于 2020-3-7 16:07
找不到店铺呀

https://item.taobao.com/item.htm ... amp;id=612453053761





欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2