57 lines
1.7 KiB
C
Executable File
57 lines
1.7 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,8,SMG_buf,8,0x10) != HAL_OK);
|
||
}
|