設置 | 登錄 | 註冊

目前共有3篇帖子。

【程序】STM32單片機通過DAC向1602液晶提供對比度電壓,不使用外部電位器

1樓 巨大八爪鱼 2017-3-5 14:35
/* LCD1602引腳2(VDD)必須接5V電壓, 不可以接3.3V電壓。其他引腳(包括引腳15-背光電源正)都可以接3.3V電壓 */
/* 必須把J-Link設為不供電(更改內部跳線), 然後另插上USB線,才能得到5V的電壓 */
#include <stm32f10x.h>

#define RS_0 (GPIOA->BRR = GPIO_BRR_BR0)
#define RS_1 (GPIOA->BSRR = GPIO_BSRR_BS0)
#define RW_0 (GPIOA->BRR = GPIO_BRR_BR1)
#define RW_1 (GPIOA->BSRR = GPIO_BSRR_BS1)
#define E_0 (GPIOA->BRR = GPIO_BRR_BR2)
#define E_1 (GPIOA->BSRR = GPIO_BSRR_BS2)

void delay(void)
{
    uint16_t i;
    for (i = 0; i < 10; i++);
}

void LCD1602_BusyWait(void)
{
    RS_0;
    RW_1;
    E_1;
    GPIOC->CRL = 0x44444444; // 讀端口
    while (GPIOC->IDR & GPIO_IDR_IDR7);
    GPIOC->CRL = 0x33333333;
    E_0;
}

void LCD1602_WriteCmd(uint8_t cmd)
{
    LCD1602_BusyWait();
    RS_0;
    RW_0;
    GPIOC->ODR = cmd;
    E_1;
    delay();
    E_0;
}

void LCD1602_WriteData(uint8_t data)
{
    LCD1602_BusyWait();
    RS_1;
    RW_0;
    GPIOC->ODR = data;
    E_1;
    delay();
    E_0;
}

void LCD1602_WriteString(const char *s)
{
    while (*s)
        LCD1602_WriteData(*s++);
}

void LCD1602_Init(void)
{
    LCD1602_WriteCmd(0x38);
    LCD1602_WriteCmd(0x01);
    LCD1602_WriteCmd(0x0c);
}

int main(void)
{
    RCC->APB1ENR = RCC_APB1ENR_DACEN;
    RCC->APB2ENR = RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN;
    
    GPIOA->CRL = 0x00000333; // RS, RW, E設為輸出, PA4~5設為模擬輸出, 其中PA4接LCD_3(對比度端口), PA5接電壓表正極
    GPIOC->CRL = 0x33333333; // 數據端口設為輸出
    
    // 設置背光電壓
    DAC->CR = DAC_CR_EN1 | DAC_CR_EN2;
    DAC->DHR8R1 = 69; // 通道1為液晶提供對比度電壓, 約1.0V
    DAC->DHR8R2 = DAC->DHR8R1; // 通道2供電壓表顯示電壓
    
    LCD1602_Init();
    LCD1602_WriteString("Hello World!");
    LCD1602_WriteCmd(0xc0);
    LCD1602_WriteString("STM32F103RCT6");
    while (1);
}
2樓 巨大八爪鱼 2017-3-5 14:39
delay函數用於延長E信號的高電平時間,一般情況下for循環裏面的循環值至少要為10液晶才能正常工作。
因為STM32單片機工作速度非常快,如果不延時,那麼程序運行時液晶什麼都不會顯示。

另外,delay函數裏面的變量i可以聲明為uint8_t類型:
void delay(void)
{
    uint8_t i;
    for (i = 0; i < 10; i++);
}
3樓 巨大八爪鱼 2017-3-5 14:40
LCD1602_BusyWait函數也是必不可少的,如果在寫命令或指令前不執行這個函數,則液晶也會什麼都不顯示。

內容轉換:

回覆帖子
內容:
用戶名: 您目前是匿名發表。
驗證碼:
看不清?換一張
©2010-2025 Purasbar Ver3.0 [手機版] [桌面版]
除非另有聲明,本站採用知識共享署名-相同方式共享 3.0 Unported許可協議進行許可。