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.

304 lines
8.5 KiB

1 year ago
/*********************************************************************
* 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_18SEG_ON 4811 使8 1
SYSON_28SEG_ON 4821 使8 2
SYSON_38SEG_ON 4831 使8 3
SYSON_48SEG_ON 4841 使8 4
SYSON_58SEG_ON 4851 使8 5
SYSON_68SEG_ON 4861 使8 6
SYSON_78SEG_ON 4871 使8 7
SYSON_88SEG_ON 4801 使8 8
SYSON_17SEG_ON 4819 使7 1
SYSON_27SEG_ON 4829 使7 2
SYSON_37SEG_ON 4839 使7 3
SYSON_47SEG_ON 4849 使7 4
SYSON_57SEG_ON 4859 使7 5
SYSON_67SEG_ON 4869 使7 6
SYSON_77SEG_ON 4879 使7 7
SYSON_87SEG_ON 4809 使7 8
DIG0 68XX DIG0 8 10
DIG1 6AXX DIG1 8 10
DIG2 6CXX DIG2 8 10
DIG3 6EXX DIG0 8 10
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****************************************************/