This repository has been archived on 2024-01-06. You can view files and clone it, but cannot push or open issues or pull requests.
justhomework/EmbededSTM32/LAB_04-2/Core/Src/zlg7290.c

57 lines
1.7 KiB
C
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);
}