注册会员
- 积分
- 160
- 威望
- 92
- 贡献
- 60
- 兑换币
- 60
- 注册时间
- 2018-11-4
- 在线时间
- 4 小时
|
类似于图片这种,我能想到的是用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;
}
}
}
求大佬指教
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|