CH582M本身是蓝牙方面的应用,特点就是低功耗,为此我给它配了一个几乎是零功耗的LCD段码屏。
LCD段码屏有静态驱动和动态驱动。
静态驱动:只有一个公共端COM,每个像素都是单独电极引出。优点是和动态驱动相比显示效果好一些,缺点是引脚多。
动态驱动:2个及以上的公共端COM,每个电极至少控制2个以上的像素,需要时间分割扫描方式驱动。
我采用的就是静态驱动的LCD段码屏。可以显示3个“8”和2个“.”,一共需要24个IO进行控制。
单纯的显示只需要COM和SEG相互为相反电平就可以,不显示为相同的电平。
用这个简单的段码屏显示后面的试验的数据。
#include "CH58x_common.h"
__attribute__((aligned(4))) UINT32 CapBuf[100];
UINT8V capFlag = 0;
void main()
{
UINT8 i;
SetSysClock( CLK_SOURCE_PLL_60MHz );
GPIOB_SetBits( GPIO_Pin_20 );
GPIOB_ModeCfg( GPIO_Pin_20, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_22 );
GPIOB_ModeCfg( GPIO_Pin_22, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_10 );
GPIOB_ModeCfg( GPIO_Pin_10, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_12 );
GPIOB_ModeCfg( GPIO_Pin_12, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_19 );
GPIOB_ModeCfg( GPIO_Pin_19, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_0 );
GPIOB_ModeCfg( GPIO_Pin_0, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_2 );
GPIOB_ModeCfg( GPIO_Pin_2, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_1 );
GPIOB_ModeCfg( GPIO_Pin_1, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_3 );
GPIOB_ModeCfg( GPIO_Pin_3, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_5 );
GPIOB_ModeCfg( GPIO_Pin_5, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_7 );
GPIOB_ModeCfg( GPIO_Pin_7, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_11 );
GPIOB_ModeCfg( GPIO_Pin_11, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_13 );
GPIOB_ModeCfg( GPIO_Pin_13, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_15 );
GPIOB_ModeCfg( GPIO_Pin_15, GPIO_ModeOut_PP_5mA );
GPIOA_SetBits( GPIO_Pin_5 );
GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeOut_PP_5mA );
GPIOA_SetBits( GPIO_Pin_0 );
GPIOA_ModeCfg( GPIO_Pin_0, GPIO_ModeOut_PP_5mA );
GPIOA_SetBits( GPIO_Pin_2 );
GPIOA_ModeCfg( GPIO_Pin_2, GPIO_ModeOut_PP_5mA );
GPIOA_SetBits( GPIO_Pin_15 );
GPIOA_ModeCfg( GPIO_Pin_15, GPIO_ModeOut_PP_5mA );
GPIOA_SetBits( GPIO_Pin_13 );
GPIOA_ModeCfg( GPIO_Pin_13, GPIO_ModeOut_PP_5mA );
GPIOA_SetBits( GPIO_Pin_11 );
GPIOA_ModeCfg( GPIO_Pin_11, GPIO_ModeOut_PP_5mA );
GPIOA_SetBits( GPIO_Pin_7 );
GPIOA_ModeCfg( GPIO_Pin_7, GPIO_ModeOut_PP_5mA );
GPIOA_SetBits( GPIO_Pin_9 );
GPIOA_ModeCfg( GPIO_Pin_9, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_8 );
GPIOB_ModeCfg( GPIO_Pin_8, GPIO_ModeOut_PP_5mA );
GPIOB_SetBits( GPIO_Pin_16 );
GPIOB_ModeCfg( GPIO_Pin_16, GPIO_ModeOut_PP_5mA );
GPIOB_InverseBits( GPIO_Pin_20 );
TMR0_TimerInit( FREQ_SYS / 30 ); // 设置定时时间 ms
TMR0_ITCfg( ENABLE, TMR0_3_IT_CYC_END ); // 开启中断
PFIC_EnableIRQ( TMR0_IRQn );
while( 1 )
;
}
__INTERRUPT
__HIGH_CODE
void TMR0_IRQHandler( void ) // TMR0 定时中断
{
if ( TMR0_GetITFlag( TMR0_3_IT_CYC_END ) )
{
TMR0_ClearITFlag( TMR0_3_IT_CYC_END ); // 清除中断标志
GPIOB_InverseBits( GPIO_Pin_20 );
GPIOB_InverseBits( GPIO_Pin_22 );
GPIOB_InverseBits( GPIO_Pin_10 );
GPIOB_InverseBits( GPIO_Pin_12 );
GPIOB_InverseBits( GPIO_Pin_19 );
GPIOB_InverseBits( GPIO_Pin_0 );
GPIOB_InverseBits( GPIO_Pin_2 );
GPIOB_InverseBits( GPIO_Pin_1 );
GPIOB_InverseBits( GPIO_Pin_3 );
GPIOB_InverseBits( GPIO_Pin_5 );
GPIOB_InverseBits( GPIO_Pin_7 );
GPIOB_InverseBits( GPIO_Pin_11 );
GPIOB_InverseBits( GPIO_Pin_13 );
GPIOB_InverseBits( GPIO_Pin_15 );
GPIOA_InverseBits( GPIO_Pin_5 );
GPIOA_InverseBits( GPIO_Pin_0 );
GPIOA_InverseBits( GPIO_Pin_2 );
GPIOA_InverseBits( GPIO_Pin_15 );
GPIOA_InverseBits( GPIO_Pin_13 );
GPIOA_InverseBits( GPIO_Pin_11 );
GPIOA_InverseBits( GPIO_Pin_7 );
GPIOA_InverseBits( GPIO_Pin_9 );
GPIOB_InverseBits( GPIO_Pin_8 );
GPIOB_InverseBits( GPIO_Pin_16 );
}
}
|