/* * File: CH455.c * Author: JiangXiaowei */ #include "ch455g.h" // 修改该文件以适应硬件环境/单片机型号等 #include "delay.h" #include "iic2.h" //#include "includes.h" //定义 //#define CH455H_LED_NUM 16 //uint32_t ch455h_Time_duty[CH455H_LED_NUM]; //占空比 //uint8_t ch455h_Time_en[CH455H_LED_NUM]; //使能 //uint8_t ch455h_Time_en_process; //全局使能 void CH455_Init(void) { iic2_init(); CH455_Write( CH455_7SEG_ON ); //八段式 CH455_Write( CH455_SYSON_2 ); //2级亮度 } void CH455_Write( UINT16 cmd ) //写命令 { IIC2_Start();//启动总线 IIC2_Send_Byte(((UINT8)(cmd>>7)&CH455_I2C_MASK)|CH455_I2C_ADDR); IIC2_NAck(); IIC2_Send_Byte((UINT8)cmd);//发送数据 IIC2_NAck(); IIC2_Stop();//结束总线 } UINT8 CH455_Read( void ) //读取按键 { UINT8 keycode; IIC2_Start();//启动总线 IIC2_Send_Byte(((UINT8)(CH455_GET_KEY>>7)&CH455_I2C_MASK)|0x01|CH455_I2C_ADDR); IIC2_NAck(); keycode = IIC2_Read_Byte(0);//发送数据 IIC2_Stop();//结束总线 return keycode; } void CH455H_LED_test(void){ static uint16_t led=0; CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F)); CH455_Write( CH455_DIG1 | ((led>>4) & 0x0F)); CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F)); CH455_Write( CH455_DIG3 | ((led>>12) & 0x0F)); led++; } /*----------------------------------------------------------- * 16 12 8 4 * 15 11 7 3 * 14 10 6 2 * 13 9 5 1 *------------------------------------------------------------*/ void CH455H_LED_set(uint16_t led){ led = (((led & 0xaaaa) >> 1) | ((led & 0x5555) << 1)); led = (((led & 0xcccc) >> 2) | ((led & 0x3333) << 2)); led = (((led & 0xf0f0) >> 4) | ((led & 0x0f0f) << 4)); led = (((led & 0xff00) >> 8) | ((led & 0x00ff) << 8)); //左边是高位,第二版 CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F)); CH455_Write( CH455_DIG1 | ((led>>4) & 0x0F)); CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F)); CH455_Write( CH455_DIG3 | ((led>>12) & 0x0F)); //左边是高位,第一版 // CH455_Write( CH455_DIG0 | ((led>>12) & 0x0F)); // CH455_Write( CH455_DIG1 | ((led>>0) & 0x0F)); // CH455_Write( CH455_DIG2 | ((led>>4) & 0x0F)); // CH455_Write( CH455_DIG3 | ((led>>8) & 0x0F)); } void CH455H_LED_test00(short led){ led = (((led & 0xaaaa) >> 1) | ((led & 0x5555) << 1)); led = (((led & 0xcccc) >> 2) | ((led & 0x3333) << 2)); led = (((led & 0xf0f0) >> 4) | ((led & 0x0f0f) << 4)); led = (((led & 0xff00) >> 8) | ((led & 0x00ff) << 8)); //左边是高位 CH455_Write( CH455_DIG0 | ((led>>12) & 0x0F)); CH455_Write( CH455_DIG1 | ((led>>0) & 0x0F)); CH455_Write( CH455_DIG2 | ((led>>4) & 0x0F)); CH455_Write( CH455_DIG3 | ((led>>8) & 0x0F)); //左边是低位 // CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F)); // CH455_Write( CH455_DIG1 | ((led>>12) & 0x0F)); // CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F)); // CH455_Write( CH455_DIG3 | ((led>>4) & 0x0F)); } void CH455H_LED_test2(void){ static uint16_t led=0; CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F)); CH455_Write( CH455_DIG1 | ((led>>4) & 0x0F)); CH455_Write( CH455_DIG2 | ((led>>8) & 0x0F)); CH455_Write( CH455_DIG3 | ((led>>12) & 0x0F)); led=~led; } void CH455H_LED_test3(void){ static uint16_t led=0; CH455_Write( CH455_DIG0 | ((led>>0) & 0x0F)); led++; led&=0x000F; }