135 lines
3.9 KiB
C
135 lines
3.9 KiB
C
|
||
|
||
#ifndef __TM1637_H__
|
||
#define __TM1637_H__
|
||
|
||
#include "config.h"
|
||
|
||
#ifndef LEDKEY_TM1637
|
||
#define LEDKEY_TM1637 0
|
||
#endif
|
||
|
||
|
||
// tm1637 提供 8x2键盘 和 6 个8段数码管 的控制
|
||
|
||
//-----------------------------------------------------------------
|
||
/*
|
||
-------------------------------------------------------------------------------------------------
|
||
| bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 |
|
||
|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|
|
||
| 命令类型 | 保留,为0 | 不同模式定义 |
|
||
|-----------------------|-----------------------|-----------------------------------------------|
|
||
| | | | | 0 | 0 | 写数据到显示寄存器
|
||
| 数据设置 | | | | 1 | 0 | 读键扫数据
|
||
| 0 1 | | | 0 | | | 自动地址增加
|
||
| | | | 1 | | | 固定地址
|
||
| | | 0 | | | | 普通模式
|
||
| | | 1 | | | | 测试模式(内部使用)
|
||
|-----------------------|-----------------------|-----------------------------------------------|
|
||
| | | 0 | 0 | 0 | 0 | 显示地址0
|
||
| 地址设置 | | 0 | 0 | 0 | 1 | 显示地址1
|
||
| 1 1 | | 0 | 0 | 1 | 0 | 显示地址2
|
||
| | | 0 | 0 | 1 | 1 | 显示地址3
|
||
| | | 0 | 1 | 0 | 0 | 显示地址4
|
||
| | | 0 | 1 | 0 | 1 | 显示地址5
|
||
|-----------------------|-----------------------|-----------------------------------------------|
|
||
| | | | 0 | 0 | 0 | 设置脉冲宽度为 1/16
|
||
| 显示控制 | | | 0 | 0 | 1 | 设置脉冲宽度为 2/16
|
||
| 1 0 | | | 0 | 1 | 0 | 设置脉冲宽度为 4/16
|
||
| | | | 0 | 1 | 1 | 设置脉冲宽度为 10/16
|
||
| | | | 1 | 0 | 0 | 设置脉冲宽度为 11/16
|
||
| | | | 1 | 0 | 1 | 设置脉冲宽度为 12/16
|
||
| | | | 1 | 0 | 0 | 设置脉冲宽度为 13/16
|
||
| | | | 1 | 0 | 1 | 设置脉冲宽度为 14/16
|
||
| | | 0 | | | | 显示关
|
||
| | | 1 | | | | 显示开
|
||
|-----------------------|-----------------------|-----------------------------------------------|
|
||
|
||
由于该芯片的控制时序和接口协议和标准I2C有差别(没有地址字段,每个字节的传输顺序不一样 LSB 标准是 MSB),所以,本芯片采用软件模拟I2C实现。
|
||
|
||
*/
|
||
|
||
//--------------------------
|
||
|
||
// bit7 bit6 命令类型
|
||
#define DATA_CMD_BITS 0x40 // 数据设置命令
|
||
#define ADDR_CMD_BITS 0xC0 // 地址设置命令(显示寄存器地址)
|
||
#define DISP_CTRL_BITS 0x80 // 显示控制
|
||
|
||
//--------------------------
|
||
// 数据设置命令的定义
|
||
// 数据设置命令 bit1 bit0
|
||
#define WRITE_LED_REG 0x00 // 写数据到显示寄存器
|
||
#define READ_KEY_VAL 0x02 // 读按键命令
|
||
|
||
// 数据设置命令 bit2
|
||
#define ADDR_AUTO_INC 0x00 // 地址自动增加
|
||
#define ADDR_FIXED 0x04 // 地址固定
|
||
|
||
//--------------------------
|
||
// 地址设置命令的定义
|
||
#define LED_REG_BEG_ADDR 0x00
|
||
|
||
|
||
#define LED_REG1_ADDR (LED_REG_BEG_ADDR+0x00)
|
||
#define LED_REG2_ADDR (LED_REG_BEG_ADDR+0x01)
|
||
#define LED_REG3_ADDR (LED_REG_BEG_ADDR+0x02)
|
||
#define LED_REG4_ADDR (LED_REG_BEG_ADDR+0x03)
|
||
#define LED_REG5_ADDR (LED_REG_BEG_ADDR+0x04)
|
||
#define LED_REG6_ADDR (LED_REG_BEG_ADDR+0x05)
|
||
|
||
|
||
//--------------------------
|
||
// 显示设置命令的定义
|
||
#define DISP_OFF 0x00
|
||
#define DISP_ON 0x08
|
||
|
||
#define DISP_LEV(lev) ((lev)&0x07)
|
||
|
||
//---------------------------------------
|
||
|
||
// 按键数据, 键值定义 (16个按键)
|
||
#define KEY_NONE 0xFF
|
||
|
||
#define KEY_K1SG1 0xF7
|
||
#define KEY_K1SG2 0xF6
|
||
#define KEY_K1SG3 0xF5
|
||
#define KEY_K1SG4 0xF4
|
||
#define KEY_K1SG5 0xF3
|
||
#define KEY_K1SG6 0xF2
|
||
#define KEY_K1SG7 0xF1
|
||
#define KEY_K1SG8 0xF0
|
||
|
||
#define KEY_K2SG1 0xEF
|
||
#define KEY_K2SG2 0xEE
|
||
#define KEY_K2SG3 0xED
|
||
#define KEY_K2SG4 0xEC
|
||
#define KEY_K2SG5 0xEB
|
||
#define KEY_K2SG6 0xEA
|
||
#define KEY_K2SG7 0xE9
|
||
#define KEY_K2SG8 0xE8
|
||
|
||
|
||
|
||
//------------------------------------------------------------------------------
|
||
|
||
// 读取键值
|
||
u8 TM1637ReadKey(void);
|
||
|
||
// 写显示寄存器(地址自增)
|
||
void TM1637WriteLedData(u8 baddr, u8 * pBuff, u8 disp);
|
||
|
||
// 设置显示模式(开关和亮度)
|
||
void TM1637SetLedDisp(u8 disp);
|
||
|
||
|
||
//------------------------------------------------------------------------------
|
||
|
||
//
|
||
|
||
|
||
|
||
#endif
|
||
|
||
|