81 lines
2.5 KiB
C
Executable File
81 lines
2.5 KiB
C
Executable File
#include "zlg7290.h"
|
||
#include "i2c.h"
|
||
|
||
#define wAddr (uint16_t)0x70U //ZLG7290写器件地址
|
||
#define rAddr (uint16_t)0x71U //ZLG7290读器件地址
|
||
#define DpramAddr (uint16_t)0x10 //ZLG7290显示缓冲区起始子地址
|
||
#define KeyAddr (uint16_t)0x01 //ZLG7290键值寄存器子地址
|
||
|
||
uint8_t keyval[]={0x03,0x1c,0x1b,0x1a,0x14,0x13,0x12,0x0c,
|
||
0x0b,0x0a,0x19,0x11,0x09,0x01,0x02}; //键码表
|
||
|
||
uint8_t SegCode[]={0xfc,0x0c,0xda,0xf2,0x66,0xb6,0xbe,0xe0,
|
||
0xfe,0xe6,0xee,0x3e,0x9c,0x7a,0x00}; //字段码表
|
||
|
||
/***************按键字符的提取****************/
|
||
uint8_t ZLG7290_Read_Key(void)
|
||
{
|
||
uint8_t i;
|
||
uint8_t buf[1];
|
||
//每次从ZLG7290的键值寄存器读取按键键值,存放到buf缓冲区中
|
||
while(HAL_I2C_Mem_Read(&hi2c1,rAddr,KeyAddr,1,buf,1,0x10) != HAL_OK ){};
|
||
for(i=0;i<15;i++) /*查询键码表*/
|
||
{
|
||
if(buf[0] == keyval[i])
|
||
break;
|
||
}
|
||
return i; //获取当前按键字符所对应的十六进制数
|
||
}
|
||
/***************数码管显示控制****************/
|
||
void ZLG7290_Write1Byte(uint16_t r,uint8_t *p) //写一位字段码
|
||
{
|
||
while(HAL_I2C_Mem_Write(&hi2c1,wAddr,r,1,p,1,0x10) !=HAL_OK){};
|
||
}
|
||
void ZLG7290_Write(uint8_t *buf) //写8位字段码
|
||
{
|
||
uint8_t DBuff[8];
|
||
uint8_t i;
|
||
uint16_t p = DpramAddr;
|
||
uint8_t *p1;
|
||
for(i=0;i<8;i++)
|
||
{
|
||
DBuff[i] = SegCode[buf[i]]; //求各字符的字段码
|
||
}
|
||
p1 = &DBuff[0]; //p1指向待显示字符的字段码
|
||
for(i=0;i<8;i++)
|
||
{
|
||
ZLG7290_Write1Byte(p++,p1++); //调用一次,写一位字段码
|
||
HAL_Delay(5);
|
||
}
|
||
}
|
||
/***************数码管历史显示读取****************/
|
||
void ZLG7290_Read_SMG(uint8_t *SMG_buf)
|
||
{
|
||
//uint8_t SMG_buf[8];
|
||
while(HAL_I2C_Mem_Read(&hi2c1,rAddr,DpramAddr,I2C_MEMADD_SIZE_8BIT,SMG_buf,8,0x10) != HAL_OK){};
|
||
}
|
||
|
||
|
||
void I2C_ZLG7290_WriteOneByte(I2C_HandleTypeDef *I2Cx,uint8_t I2C_Addr,uint8_t addr,uint8_t value)
|
||
{
|
||
while( HAL_I2C_Mem_Write(I2Cx, I2C_Addr, addr, I2C_MEMADD_SIZE_8BIT, &value, 0x01, 0x10) != HAL_OK ){};
|
||
}
|
||
|
||
/*******************************************************************************
|
||
* Function Name : I2C_24C64_Write
|
||
* Description :
|
||
* Input :
|
||
* Output : None
|
||
* Return :
|
||
* Attention : None
|
||
*******************************************************************************/
|
||
|
||
void I2C_ZLG7290_Write(I2C_HandleTypeDef *I2Cx,uint8_t I2C_Addr,uint8_t addr,uint8_t *buf,uint8_t num)
|
||
{
|
||
while(num--)
|
||
{
|
||
I2C_ZLG7290_WriteOneByte(I2Cx, I2C_Addr,addr++,*buf++);
|
||
HAL_Delay(5);
|
||
}
|
||
}
|