tagetage 发表于 2022-3-14 09:43

【沁恒CH582】3配备零功耗LCD段码屏

<p><span style="font-size:16px;">CH582M本身是蓝牙方面的应用,特点就是低功耗,为此我给它配了一个几乎是零功耗的LCD段码屏。</span></p>

<p><span style="font-size:16px;">LCD段码屏有<strong>静态驱动</strong>和<strong>动态驱动</strong>。<br />
<strong>静态驱动</strong>:只有一个公共端COM,每个像素都是单独电极引出。优点是和动态驱动相比显示效果好一些,缺点是引脚多。<br />
<strong>动态驱动</strong>:2个及以上的公共端COM,每个电极至少控制2个以上的像素,需要时间分割扫描方式驱动。<br />
我采用的就是静态驱动的LCD段码屏。可以显示3个&ldquo;8&rdquo;和2个&ldquo;.&rdquo;,一共需要24个IO进行控制。</span></p>

<p><span style="font-size:16px;">单纯的显示只需要COM和SEG相互为相反电平就可以,不显示为相同的电平。</span></p>

<p><span style="font-size: 16px;">用这个简单的段码屏显示后面的试验的数据。</span></p>

<p>#include &quot;CH58x_common.h&quot;</p>

<p>__attribute__((aligned(4))) &nbsp; UINT32 CapBuf;<br />
UINT8V capFlag = 0;</p>

<p><br />
void main()<br />
{<br />
&nbsp; UINT8 i;</p>

<p>&nbsp; SetSysClock( CLK_SOURCE_PLL_60MHz );</p>

<p>&nbsp; GPIOB_SetBits( GPIO_Pin_20 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_20, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_22 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_22, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_10 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_10, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_12 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_12, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_19 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_19, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_0 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_0, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_2 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_2, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_1 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_1, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_3 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_3, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_5 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_5, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_7 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_7, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_11 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_11, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_13 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_13, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_15 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_15, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOA_SetBits( GPIO_Pin_5 );<br />
&nbsp; GPIOA_ModeCfg( GPIO_Pin_5, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOA_SetBits( GPIO_Pin_0 );<br />
&nbsp; GPIOA_ModeCfg( GPIO_Pin_0, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOA_SetBits( GPIO_Pin_2 );<br />
&nbsp; GPIOA_ModeCfg( GPIO_Pin_2, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOA_SetBits( GPIO_Pin_15 );<br />
&nbsp; GPIOA_ModeCfg( GPIO_Pin_15, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOA_SetBits( GPIO_Pin_13 );<br />
&nbsp; GPIOA_ModeCfg( GPIO_Pin_13, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOA_SetBits( GPIO_Pin_11 );<br />
&nbsp; GPIOA_ModeCfg( GPIO_Pin_11, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOA_SetBits( GPIO_Pin_7 );<br />
&nbsp; GPIOA_ModeCfg( GPIO_Pin_7, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOA_SetBits( GPIO_Pin_9 );<br />
&nbsp; GPIOA_ModeCfg( GPIO_Pin_9, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_8 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_8, GPIO_ModeOut_PP_5mA );<br />
&nbsp; GPIOB_SetBits( GPIO_Pin_16 );<br />
&nbsp; GPIOB_ModeCfg( GPIO_Pin_16, GPIO_ModeOut_PP_5mA );</p>

<p>&nbsp; GPIOB_InverseBits( GPIO_Pin_20 );</p>

<p>&nbsp; TMR0_TimerInit( FREQ_SYS / 30 ); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 设置定时时间 ms<br />
&nbsp; TMR0_ITCfg( ENABLE, TMR0_3_IT_CYC_END ); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 开启中断<br />
&nbsp; PFIC_EnableIRQ( TMR0_IRQn );</p>

<p>&nbsp; while( 1 )<br />
&nbsp; &nbsp; ;<br />
}</p>

<p>__INTERRUPT<br />
__HIGH_CODE<br />
void TMR0_IRQHandler( void ) &nbsp; &nbsp; &nbsp; &nbsp;// TMR0 定时中断<br />
{<br />
&nbsp; if ( TMR0_GetITFlag( TMR0_3_IT_CYC_END ) )<br />
&nbsp; {<br />
&nbsp; &nbsp; TMR0_ClearITFlag( TMR0_3_IT_CYC_END ); &nbsp; &nbsp; &nbsp;// 清除中断标志<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_20 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_22 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_10 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_12 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_19 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_0 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_2 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_1 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_3 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_5 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_7 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_11 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_13 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_15 );<br />
&nbsp; &nbsp; GPIOA_InverseBits( GPIO_Pin_5 );<br />
&nbsp; &nbsp; GPIOA_InverseBits( GPIO_Pin_0 );<br />
&nbsp; &nbsp; GPIOA_InverseBits( GPIO_Pin_2 );<br />
&nbsp; &nbsp; GPIOA_InverseBits( GPIO_Pin_15 );<br />
&nbsp; &nbsp; GPIOA_InverseBits( GPIO_Pin_13 );<br />
&nbsp; &nbsp; GPIOA_InverseBits( GPIO_Pin_11 );<br />
&nbsp; &nbsp; GPIOA_InverseBits( GPIO_Pin_7 );<br />
&nbsp; &nbsp; GPIOA_InverseBits( GPIO_Pin_9 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_8 );<br />
&nbsp; &nbsp; GPIOB_InverseBits( GPIO_Pin_16 );</p>

<p>&nbsp; }<br />
}<br />
</p>

lugl4313820 发表于 2022-3-14 13:09

这个可以呀,等待你更加精采的作品。
页: [1]
查看完整版本: 【沁恒CH582】3配备零功耗LCD段码屏