1.驅(qū)動LCD注意點(diǎn):
若有某點(diǎn)不亮,可能是PB23引腳RST功能開啟導(dǎo)致,下載時不勾選使能RST即可,
如大部分點(diǎn)不亮,可能是開啟仿真導(dǎo)致,PB14和PB15為com2和com3。
2.第一個參數(shù)選擇使能的com,第二個參數(shù)選擇驅(qū)動電壓,2級分壓對應(yīng)VCC電壓,3級分壓對應(yīng)2/3VCC電壓。
LCD_Init(LCD_1_4_Duty, LCD_1_3_Bias); //LCD初始化
void LCD_Init(LCDDutyTypeDef duty, LCDBiasTypeDef bias)
{
R32_PIN_CONFIG2 = 0xfffeff3f; // 關(guān)閉使用的LCD引腳的數(shù)字輸入
R16_PIN_ALTERNATE |= RB_DEBUG_EN; // 操作LCD時,需關(guān)閉debug
R32_LCD_CMD = 0x1ffff << 8;
R32_LCD_CMD |= RB_LCD_SYS_EN | RB_LCD_ON |
(LCD_CLK_128 << 5) |
(duty << 3) |
(bias << 2);
}
typedef enum
{
LCD_1_2_Duty = 0, // COM0-COM1
LCD_1_3_Duty, // COM0-COM2
LCD_1_4_Duty, // COM0-COM3
}LCDDutyTypeDef;
typedef enum
{
LCD_1_2_Bias = 0, // 2級分壓
LCD_1_3_Bias, // 3級分壓
}LCDBiasTypeDef;
3.下面的代碼需要對應(yīng)著芯片手冊和LCD屏手冊來看,
下面我們來舉個例子:
芯片的SEG0和SEG1引腳接在LCD屏幕的PIN3和PIN4,PIN3和PIN4控制著第一個8,那么我們給R32_LCD_RAM0 低八位寫入對應(yīng)數(shù)據(jù)即可顯示,例程傳入的0x7d顯示出來是數(shù)字0,數(shù)字0只有G段和CP1不需要亮,那對應(yīng)的二進(jìn)制是01111101(0x7d),1F對應(yīng)最低位,CP1對應(yīng)最高位。
芯片的SEG2和SEG3引腳接在LCD屏幕的PIN5和PIN6,PIN5和PIN6控制著第二個8,那么我們給R32_LCD_RAM0 低八位左移8位寫入對應(yīng)數(shù)據(jù)即可顯示,例程傳入的0x60顯示出來是數(shù)字1,數(shù)字1只有B段和C段需要亮,那對應(yīng)的二進(jìn)制是01100000(0x60),2F對應(yīng)最低位,CP2對應(yīng)最高位。
芯片的SEG4和SEG5引腳接在LCD屏幕的PIN7和PIN8,PIN7和PIN8控制著第三個8,那么我們給R32_LCD_RAM0 低八位左移16位寫入對應(yīng)數(shù)據(jù)即可顯示,例程傳入的0x3e顯示出來是數(shù)字2,數(shù)字2只有F段,C段和CP3不需要亮,那對應(yīng)的二進(jìn)制是00111110(0x3e),3F對應(yīng)最低位,CP3對應(yīng)最高位。
芯片的SEG6和SEG7引腳接在LCD屏幕的PIN9和PIN10,PIN9和PIN10控制著第四個8,那么我們給R32_LCD_RAM0 低八位左移24位寫入對應(yīng)數(shù)據(jù)即可顯示,例程傳入的0x7a顯示出來是數(shù)字3,數(shù)字3只有F段,E段和CP4不需要亮,那對應(yīng)的二進(jìn)制是01111100(0x7a),4F對應(yīng)最低位,CP4對應(yīng)最高位。
芯片的SEG8和SEG9引腳接在LCD屏幕的PIN19和PIN18,PIN19和PIN18控制著第五個8,那么我們給R32_LCD_RAM1 低八位寫入對應(yīng)數(shù)據(jù)即可顯示,例程傳入的0x63顯示出來是數(shù)字4,數(shù)字4只有B段,C段,F段和G段需要亮,那對應(yīng)的二進(jìn)制是01100011(0x63),5F對應(yīng)最低位,CP7對應(yīng)最高位。
芯片的SEG10和SEG11引腳接在LCD屏幕的PIN17和PIN16,PIN17和PIN16控制著第六個8,那么我們給R32_LCD_RAM1 低八位左移8位寫入對應(yīng)數(shù)據(jù)即可顯示,例程傳入的0x5b顯示出來是數(shù)字5,數(shù)字5只有B段,E段和CP8不需要亮,那對應(yīng)的二進(jìn)制是01011011(0x5b),6F對應(yīng)最低位,CP8對應(yīng)最高位。
芯片的SEG12和SEG13引腳接在LCD屏幕的PIN15和PIN14,PIN15和PIN14控制著第七個8,那么我們給R32_LCD_RAM1 低八位左移16位寫入對應(yīng)數(shù)據(jù)即可顯示,例程傳入的0x5f顯示出來是數(shù)字6,數(shù)字6只有B段和CP9不需要亮,那對應(yīng)的二進(jìn)制是01011111(0x5f),7F對應(yīng)最低位,CP9對應(yīng)最高位。
芯片的SEG14和SEG15引腳接在LCD屏幕的PIN17和PIN18,PIN17和PIN18控制著第八個8,那么我們給R32_LCD_RAM1 低八位左移24位寫入對應(yīng)數(shù)據(jù)即可顯示,例程傳入的0x70顯示出來是數(shù)字7,數(shù)字7只有A段,B段和C段需要亮,那對應(yīng)的二進(jìn)制是01110000(0x70),8F對應(yīng)最低位,最高位給0。
芯片的SEG16引腳接在LCD屏幕的PIN20,PIN20控制著CP5和CP6,那么我們給R32_LCD_RAM2 低八位寫入對應(yīng)數(shù)據(jù)即可顯示,例程傳入的0x03顯示出來一個冒號,冒號只有CP5和CP6需要亮,那對應(yīng)的二進(jìn)制是00000011(0x03),CP6對應(yīng)最低位,CP5對應(yīng)最高位。
顯示8傳0x7F,顯示9傳7B.

unsigned char const lcd[11]={0x7d, 0x60, 0x3e, 0x7a, 0x63, 0x5b, 0x5f, 0x70, 0x03, 0x7f, 0x7b, };
LCD_WriteData0( lcd[0] ); LCD_WriteData1( lcd[1] ); LCD_WriteData2( lcd[2] ); LCD_WriteData3( lcd[3] ); LCD_WriteData4( lcd[4] ); LCD_WriteData5( lcd[5] ); LCD_WriteData6( lcd[6] ); LCD_WriteData7( lcd[7] ); LCD_WriteData8( lcd[8] );
#define LCD_WriteData0( d ) (R32_LCD_RAM0 = (R32_LCD_RAM0 & 0xffffff00) | ((UINT32)d)) /* 填充SEG0和SEG1驅(qū)動數(shù)值 */
#define LCD_WriteData1( d ) (R32_LCD_RAM0 = (R32_LCD_RAM0 & 0xffff00ff) | ((UINT32)d<<8)) /* 填充SEG2和SEG3驅(qū)動數(shù)值 */
#define LCD_WriteData2( d ) (R32_LCD_RAM0 = (R32_LCD_RAM0 & 0xff00ffff) | ((UINT32)d<<16)) /* 填充SEG4和SEG5驅(qū)動數(shù)值 */
#define LCD_WriteData3( d ) (R32_LCD_RAM0 = (R32_LCD_RAM0 & 0x00ffffff) | ((UINT32)d<<24)) /* 填充SEG6和SEG7驅(qū)動數(shù)值 */
#define LCD_WriteData4( d ) (R32_LCD_RAM1 = (R32_LCD_RAM1 & 0xffffff00) | ((UINT32)d)) /* 填充SEG8和SEG9驅(qū)動數(shù)值 */
#define LCD_WriteData5( d ) (R32_LCD_RAM1 = (R32_LCD_RAM1 & 0xffff00ff) | ((UINT32)d<<8)) /* 填充SEG10和SEG11驅(qū)動數(shù)值 */
#define LCD_WriteData6( d ) (R32_LCD_RAM1 = (R32_LCD_RAM1 & 0xff00ffff) | ((UINT32)d<<16)) /* 填充SEG12和SEG13驅(qū)動數(shù)值 */
#define LCD_WriteData7( d ) (R32_LCD_RAM1 = (R32_LCD_RAM1 & 0x00ffffff) | ((UINT32)d<<24)) /* 填充SEG14和SEG15驅(qū)動數(shù)值 */
#define LCD_WriteData8( d ) (R32_LCD_RAM2 = (R32_LCD_RAM2 & 0xffffff00) | ((UINT32)d)) /* 填充SEG16和SEG17驅(qū)動數(shù)值 */
4.驅(qū)動LCD低功耗需添加以下代碼:
#if 1 /* 配置喚醒源為 GPIO - PB0 */ GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_PU); GPIOB_ITModeCfg(GPIO_Pin_0, GPIO_ITMode_FallEdge); // 下降沿喚醒 PFIC_EnableIRQ(GPIO_B_IRQn); PWR_PeriphWakeUpCfg(ENABLE, RB_SLP_GPIO_WAKE, Long_Delay); VER = (*((PUINT32)ROM_CFG_VERISON)); if((VER&0xFF000000) == 0xFF000000) { aux_power = R16_AUX_POWER_ADJ; sys_safe_access_enable(); R16_AUX_POWER_ADJ |= RB_ULPLDO_ADJ; //睡眠前必須加此代碼 sys_safe_access_disable(); } // 注意當(dāng)主頻為80M時,Sleep睡眠喚醒中斷不可調(diào)用flash內(nèi)代碼。 LowPower_Sleep(RB_PWR_RAM24K | RB_PWR_RAM2K | RB_XT_PRE_EN); //只保留24+2K SRAM 供電 HSECFG_Current(HSE_RCur_100); // 降為額定電流(低功耗函數(shù)中提升了HSE偏置電流) if((VER&0xFF000000) == 0xFF000000) { sys_safe_access_enable(); R16_AUX_POWER_ADJ = aux_power; sys_safe_access_disable(); } #endif
浙公網(wǎng)安備 33010602011771號