You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
303 lines
8.5 KiB
303 lines
8.5 KiB
/*********************************************************************
|
|
* INCLUDES
|
|
*/
|
|
|
|
#include "bsp_AiP650E.h"
|
|
#include "debug_drv.h"
|
|
|
|
/*********************************************************************
|
|
* LOCAL VARIABLES
|
|
*/
|
|
u8 s_7number[10] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; // 7段显示方式0~9
|
|
u8 s_8number[10] = {0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF}; // 8段显示方式0~9
|
|
|
|
/*************************************************************
|
|
|
|
SYSOFF 4800 系统禁止,时钟振荡,不显示 √
|
|
SYSON 4801 系统使能,开启显示,按键,8 级亮度
|
|
SLEEPOFF 4800 睡眠禁止
|
|
SLEEPON 4804 睡眠使能,时钟停振
|
|
7SEG_ON 4809 系统使能,7 段显示
|
|
8SEG_ON 4801 系统使能,8 段显示,DP 作 SEG 显示驱动,8 级亮度
|
|
SYSON_1,8SEG_ON 4811 系统使能,8 段显示,1 级亮度
|
|
SYSON_2,8SEG_ON 4821 系统使能,8 段显示,2 级亮度
|
|
SYSON_3,8SEG_ON 4831 系统使能,8 段显示,3 级亮度
|
|
SYSON_4,8SEG_ON 4841 系统使能,8 段显示,4 级亮度
|
|
SYSON_5,8SEG_ON 4851 系统使能,8 段显示,5 级亮度
|
|
SYSON_6,8SEG_ON 4861 系统使能,8 段显示,6 级亮度
|
|
|
|
SYSON_7,8SEG_ON 4871 系统使能,8 段显示,7 级亮度
|
|
SYSON_8,8SEG_ON 4801 系统使能,8 段显示,8 级亮度
|
|
SYSON_1,7SEG_ON 4819 系统使能,7 段显示,1 级亮度
|
|
SYSON_2,7SEG_ON 4829 系统使能,7 段显示,2 级亮度
|
|
SYSON_3,7SEG_ON 4839 系统使能,7 段显示,3 级亮度
|
|
SYSON_4,7SEG_ON 4849 系统使能,7 段显示,4 级亮度
|
|
SYSON_5,7SEG_ON 4859 系统使能,7 段显示,5 级亮度
|
|
SYSON_6,7SEG_ON 4869 系统使能,7 段显示,6 级亮度
|
|
SYSON_7,7SEG_ON 4879 系统使能,7 段显示,7 级亮度
|
|
SYSON_8,7SEG_ON 4809 系统使能,7 段显示,8 级亮度
|
|
DIG0 68XX 写 DIG0 的 8 段显示数据,‘1’亮,‘0’暗。
|
|
DIG1 6AXX 写 DIG1 的 8 段显示数据,‘1’亮,‘0’暗。
|
|
DIG2 6CXX 写 DIG2 的 8 段显示数据,‘1’亮,‘0’暗。
|
|
DIG3 6EXX 写 DIG0 的 8 段显示数据,‘1’亮,‘0’暗。
|
|
GET_KEY 4F00 读取按键数据
|
|
|
|
|----------------------------------------------------------------|
|
|
| led5 led1 led2 | ref
|
|
| |
|
|
| 88 88 88 | show
|
|
| DIG56 DIG45 DIG23 | sch
|
|
| 12 34 12 | ic
|
|
| SEG_CLK2 SEG_CLK1 |
|
|
| num12 num34 num56 |
|
|
| |
|
|
| ch2+ 12 ch1+34 ch1+12|
|
|
| | -----------------------------------------------|
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
|---------------|
|
|
num ic,addr
|
|
|
|
|
|
|
|
|
|
**************************************************/
|
|
u8 num_ic_addr[6][2]=////[行][列]
|
|
{
|
|
D_iicch_DIG2,0x68,////0 1,
|
|
D_iicch_DIG2,0x6a,////1 2,
|
|
D_iicch_DIG1,0x6c,////2 3,
|
|
D_iicch_DIG1,0x6e,////3 4,
|
|
D_iicch_DIG1,0x68,////4 5,
|
|
D_iicch_DIG1,0x6a ////5 6,
|
|
|
|
|
|
};
|
|
void L1_LEDSEG_init(void)
|
|
{
|
|
|
|
L0_IICMx_INIT(D_iicch_DIG1,1);
|
|
L0_IICMx_INIT(D_iicch_DIG2,1);
|
|
L0_IICMx_INIT(D_iicch_DIG4,1);
|
|
|
|
L2_IICMx_Write1Reg(D_iicch_DIG1,0x68,0xff);
|
|
L2_IICMx_Write1Reg(D_iicch_DIG1,0x6a,0xff);
|
|
L2_IICMx_Write1Reg(D_iicch_DIG1,0x6c,0xff);
|
|
L2_IICMx_Write1Reg(D_iicch_DIG1,0x6e,0xff);
|
|
L2_IICMx_Write1Reg(D_iicch_DIG1,0x48,0x21);
|
|
|
|
L2_IICMx_Write1Reg(D_iicch_DIG2,0x68,0xff);
|
|
L2_IICMx_Write1Reg(D_iicch_DIG2,0x6a,0xff);
|
|
// L2_IICMx_Write1Reg(D_iicch_DIG2,0x6c,0xff);
|
|
// L2_IICMx_Write1Reg(D_iicch_DIG2,0x6e,0xff);
|
|
L2_IICMx_Write1Reg(D_iicch_DIG2,0x48,0x21);
|
|
|
|
|
|
/*********
|
|
D_SEG_DIO2_INIT();
|
|
D_SEG_CLK2_INIT();
|
|
|
|
|
|
D_SEG_DIO1_INIT();
|
|
D_SEG_CLK1_INIT();
|
|
|
|
L0_LEDSEG1_SendData(0x68,0xff);
|
|
L0_LEDSEG1_SendData(0x6a,0xff);
|
|
L0_LEDSEG1_SendData(0x6c,0xff);
|
|
L0_LEDSEG1_SendData(0x6e,0xff);
|
|
L0_LEDSEG1_SendData(0x48,0x21);
|
|
*******/
|
|
}
|
|
|
|
void L0_LEDSEG1_SetNumber(uint8_t index, uint8_t mode, uint8_t num)
|
|
{
|
|
uint8_t numValue = 0;
|
|
|
|
if(mode == 7) // 7段显示方式
|
|
{
|
|
numValue = s_7number[num];
|
|
}
|
|
else if(mode == 8) // 8段显示方式
|
|
{
|
|
numValue = s_8number[num];
|
|
}
|
|
|
|
/// printf("index:%02x, num:%02x\n", indexAddr, numValue);
|
|
/// TM1650_Write(indexAddr, numValue);
|
|
L2_IICMx_Write1Reg(num_ic_addr[index][0],num_ic_addr[index][1],numValue);
|
|
|
|
}
|
|
|
|
/********************
|
|
void L0_LEDSEG1_SendData(unsigned char H,unsigned char L )
|
|
{
|
|
unsigned char ack=8;
|
|
unsigned char BitCnt=8;//一字节8位
|
|
//设置SDA 口为输出
|
|
L0_LEDSEG1_SDA_OFF();
|
|
Lc_delay_us(2);///FIXme 移植的饿时候需要验证
|
|
L0_LEDSEG1_SCL_OFF();
|
|
Lc_delay_us(1);
|
|
///
|
|
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
|
|
{
|
|
if((H << BitCnt ) & 0x80)
|
|
{ L0_LEDSEG1_SDA_ON(); //判断发送位
|
|
}
|
|
else
|
|
{ L0_LEDSEG1_SDA_OFF();
|
|
}
|
|
Lc_delay_us(1);
|
|
L0_LEDSEG1_SCL_ON(); //置时钟线为高,通知被控器开始接收数据位
|
|
Lc_delay_us(1);
|
|
L0_LEDSEG1_SCL_OFF();
|
|
Lc_delay_us(1);
|
|
}//8clk
|
|
L0_LEDSEG1_SDA_ON(); //8位发送完后释放数据线,准备接收应答位
|
|
L0_LEDSEG1_SCL_ON();
|
|
Lc_delay_us(1);
|
|
///gRccUs05 += L0_I2C_SDA_ask();
|
|
L0_LEDSEG1_SCL_OFF();
|
|
|
|
Lc_delay_us(1);
|
|
|
|
for(BitCnt = 0;BitCnt < 8;BitCnt ++) //要传送的数据长度为8位
|
|
{
|
|
if((L << BitCnt ) & 0x80)
|
|
{ L0_LEDSEG1_SDA_ON(); //判断发送位
|
|
}
|
|
else
|
|
{ L0_LEDSEG1_SDA_OFF();
|
|
}
|
|
Lc_delay_us(1);
|
|
L0_LEDSEG1_SCL_ON(); //置时钟线为高,通知被控器开始接收数据位
|
|
Lc_delay_us(1);
|
|
L0_LEDSEG1_SCL_OFF();
|
|
Lc_delay_us(1);
|
|
}//8clk
|
|
L0_LEDSEG1_SDA_ON(); //8位发送完后释放数据线,准备接收应答位
|
|
L0_LEDSEG1_SCL_ON();
|
|
Lc_delay_us(1);
|
|
///gRccUs05 += L0_I2C_SDA_ask();
|
|
L0_LEDSEG1_SCL_OFF();
|
|
|
|
Lc_delay_us(1);
|
|
L0_LEDSEG1_SCL_ON();
|
|
Lc_delay_us(1);
|
|
L0_LEDSEG1_SDA_ON();
|
|
Lc_delay_us(2);///FIXme 移植的饿时候需要验证
|
|
}
|
|
|
|
******************/
|
|
|
|
void L3_test_ledseg(u8 filter)
|
|
{
|
|
if(filter == pd->filter)
|
|
{///filter num d1 d2 d3 ....dn
|
|
//// FD 08 11 22 33 44 55 66 77 88
|
|
switch (pd->ocr)
|
|
{
|
|
case 0x11:
|
|
printf("ch(%X):%X=%x ",(int)pd->R1,(int)pd->R2 ,(int)pd->R3);
|
|
|
|
L2_IICMx_Write1Reg(pd->R1,pd->R2 ,pd->R3);
|
|
|
|
/// L0_LEDSEG1_SendData(pd->R1 ,pd->R2);
|
|
break;
|
|
case 0x12:
|
|
printf("num(%X):%X=%x ",(int)pd->R1,(int)pd->R2 ,(int)pd->R3);
|
|
|
|
L0_LEDSEG1_SetNumber(pd->R1,pd->R2 ,pd->R3);
|
|
////F2 02 08 04 12
|
|
/// L0_LEDSEG1_SendData(pd->R1 ,pd->R2);
|
|
break;
|
|
|
|
|
|
|
|
default:
|
|
printf(" pp error\r\n ");
|
|
|
|
break;
|
|
};
|
|
|
|
printf("333");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
@brief 显示设置
|
|
@param brightness -[in] 亮度1~8级
|
|
@param mode -[in] 7/8段显示方式
|
|
@param state -[in] 开启/关闭显示
|
|
@return 无
|
|
|
|
void TM1650_SetDisplay(uint8_t brightness,uint8_t mode,uint8_t state)
|
|
{
|
|
if(state)
|
|
{
|
|
if(mode == 7) // 7段显示方式
|
|
{
|
|
TM1650_Write(0x48, brightness*16 + 1*4 + 1);
|
|
}
|
|
else if(mode == 8) // 8段显示方式
|
|
{
|
|
TM1650_Write(0x48, brightness*16 + 1);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
TM1650_Write(0x48, 0x00); // 关闭显示
|
|
}
|
|
}
|
|
|
|
@brief 显示数字
|
|
@param index -[in] 第几个数
|
|
@param mode -[in] 7/8段显示方式
|
|
@param num -[in] 显示数
|
|
@return 无
|
|
|
|
void TM1650_SetNumber(uint8_t index, uint8_t mode, uint8_t num)
|
|
{
|
|
uint8_t indexAddr = 0;
|
|
uint8_t numValue = 0;
|
|
|
|
if(index == 1)
|
|
{
|
|
indexAddr = 0x68;
|
|
}
|
|
else if(index == 2)
|
|
{
|
|
indexAddr = 0x6A;
|
|
}
|
|
else if(index == 3)
|
|
{
|
|
indexAddr = 0x6C;
|
|
}
|
|
else if(index == 4)
|
|
{
|
|
indexAddr = 0x6E;
|
|
}
|
|
|
|
if(mode == 7) // 7段显示方式
|
|
{
|
|
numValue = s_7number[num];
|
|
}
|
|
else if(mode == 8) // 8段显示方式
|
|
{
|
|
numValue = s_8number[num];
|
|
}
|
|
|
|
printf("index:%02x, num:%02x\n", indexAddr, numValue);
|
|
TM1650_Write(indexAddr, numValue);
|
|
}
|
|
|
|
*************/
|
|
/****************************************************END OF FILE****************************************************/
|
|
|