Cjy_JDxy 发表于 2019-9-24 21:48

【HC32L136 demo板】+HT1621

今天写了个HT1621的驱动程序,开发环境keil。
/******************************************************************************
* Include files
******************************************************************************/
#include "gpio.h"

/******************************************************************************
* Local pre-processor symbols/macros ('#define')
******************************************************************************/

/******************************************************************************
* Global variable definitions (declared in header file with 'extern')
******************************************************************************/

/******************************************************************************
* Local type definitions ('typedef')
******************************************************************************/

/******************************************************************************
* Local function prototypes ('static')
******************************************************************************/

/******************************************************************************
* Local variable definitions ('static')                                    *
******************************************************************************/

/******************************************************************************
* Local pre-processor symbols/macros ('#define')
******************************************************************************/
#define Smg_a    0x80
#define Smg_b    0x40
#define Smg_c    0x20
#define Smg_d    0x01
#define Smg_e    0x02
#define Smg_f    0x08
#define Smg_g    0x04
#define Smg_dp   0x10

#define Bmp0Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f
#define Bmp1Map          Smg_b | Smg_c
#define Bmp2Map          Smg_a | Smg_b | Smg_d | Smg_e | Smg_g
#define Bmp3Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_g
#define Bmp4Map          Smg_b | Smg_c | Smg_f | Smg_g
#define Bmp5Map          Smg_a | Smg_c | Smg_d | Smg_f | Smg_g
#define Bmp6Map          Smg_a | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
#define Bmp8Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
#define Bmp9Map          Smg_a | Smg_b | Smg_c | Smg_d | Smg_f | Smg_g
#define Bmp7Map          Smg_a | Smg_b | Smg_c
#define BmpAMap          Smg_a | Smg_b | Smg_c | Smg_e | Smg_f | Smg_g
#define BmpBMap          Smg_c | Smg_d | Smg_e | Smg_f | Smg_g
#define BmpCMap          Smg_a | Smg_d | Smg_e | Smg_f
#define BmpDMap          Smg_b | Smg_c | Smg_d | Smg_e | Smg_g
#define BmpEMap          Smg_a | Smg_d | Smg_e | Smg_f | Smg_g
#define BmpFMap          Smg_a | Smg_e | Smg_f | Smg_g

#define CS_0         Gpio_ClrIO(GpioPortB, GpioPin5)
#define CS_1         Gpio_SetIO(GpioPortB, GpioPin5)
#define WR_0         Gpio_ClrIO(GpioPortB, GpioPin7)
#define WR_1         Gpio_SetIO(GpioPortB, GpioPin7)
#define DA_0         Gpio_ClrIO(GpioPortB, GpioPin8)
#define DA_1         Gpio_SetIO(GpioPortB, GpioPin8)

const unsigned char SegCode[] = {Bmp0Map,Bmp1Map,Bmp2Map,Bmp3Map,Bmp4Map,Bmp5Map,Bmp6Map,Bmp7Map,Bmp8Map,Bmp9Map,BmpAMap,BmpBMap,BmpCMap,BmpDMap,BmpEMap,BmpFMap};
unsigned char DpyNum = {Smg_g,Smg_g,Smg_g,Smg_g,Smg_g,Smg_g}; //显示缓冲区

unsigned int i;
void COMMAND_HT1621(unsigned char comm)
{
        unsigned char i;
        CS_0;
       
        WR_0;
        for(i=0;i<3;i++)      //写命令
        {
                if((0x04<<i)&0x04)DA_1;    //100
                else                DA_0;
                WR_0;
                WR_1;
        }
        for(i=0;i<9;i++)      //写命令数据
        {
                if((comm<<i)&0x80)DA_1;    //100
                else                DA_0;
                WR_0;
                WR_1;
        }
        CS_1;
       
}

void HT1621_Display(void)
{
        unsigned char i;
        CS_0;                        //片选CS
        WR_0;
        for(i=0;i<3;i++)                   //写命令
        {
                if((0x05<<i)&0x04)DA_1;
                else                DA_0;
                WR_0;
                WR_1;
        }
        for(i=0;i<6;i++)                   //写地址
        {
                if((20<<i)&0x20)    DA_1;//20对应 SEG地址
                else                DA_0;
                WR_0;
                WR_1;
        }
        for(i=0;i<8;i++)                   //写数据
        {
                if((DpyNum<<i)&0x80)   DA_1;
                else                      DA_0;
                WR_0;
                WR_1;
        }
        for(i=0;i<8;i++)                   //写数据
        {
                if((DpyNum<<i)&0x80)   DA_1;
                else                      DA_0;
                WR_0;
                WR_1;
        }
        for(i=0;i<8;i++)                   //写数据
        {
                if((DpyNum<<i)&0x80)   DA_1;
                else                      DA_0;
                WR_0;
                WR_1;
        }
        for(i=0;i<8;i++)                   //写数据
        {
                if((DpyNum<<i)&0x80)   DA_1;
                else                      DA_0;
                WR_0;
                WR_1;
        }
        for(i=0;i<8;i++)                   //写数据
        {
                if((DpyNum<<i)&0x80)   DA_1;
                else                      DA_0;
                WR_0;
                WR_1;
        }
        for(i=0;i<8;i++)                   //写数据
        {
                if((DpyNum<<i)&0x80)   DA_1;
                else                      DA_0;
                WR_0;
                WR_1;
        }
        CS_1;                        //释放CS
}

void LCD_Init(void)
{
        COMMAND_HT1621(0x01);         //SYS EN
        COMMAND_HT1621(0x03);         //LCD ON
        COMMAND_HT1621(0x29);         //4 COM1/3 BIAS
        HT1621_Display();             //clear screen
}
/*****************************************************************************
* Function implementation - global ('extern') and local ('static')
******************************************************************************/
/**
******************************************************************************
** \briefMain function of project
**
** \return uint32_t return value, if needed
**
** This sample
**
******************************************************************************/
int32_t main(void)
{
    stc_gpio_config_t pstcGpioCfg;

    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);

    ///< 端口方向配置->输出
    pstcGpioCfg.enDir = GpioDirOut;
    ///< 端口驱动能力配置->高驱动能力
    pstcGpioCfg.enDrv = GpioDrvH;
    ///< 端口上下拉配置->无上下拉
    pstcGpioCfg.enPuPd = GpioNoPuPd;
    ///< 端口开漏输出配置->开漏输出关闭
    pstcGpioCfg.enOD = GpioOdDisable;
    ///< 端口输入/输出值寄存器总线控制模式配置->AHB
    pstcGpioCfg.enCtrlMode = GpioAHB;

    ///< GPIO IO PD05初始化(PD05在STK上外接LED)
    Gpio_Init(GpioPortD, GpioPin5, &pstcGpioCfg);
    Gpio_Init(GpioPortB, GpioPin5, &pstcGpioCfg);
                Gpio_Init(GpioPortB, GpioPin7, &pstcGpioCfg);
    Gpio_Init(GpioPortB, GpioPin8, &pstcGpioCfg);
                LCD_Init();
                DpyNum = Smg_a|Smg_d|Smg_g;            //"三"
                DpyNum = SegCode;
                DpyNum = SegCode;
                DpyNum = SegCode;
                DpyNum = SegCode;
                DpyNum = SegCode;

                HT1621_Display();               //刷新LCD
    while(1)
    {
//      ///< 端口PD05设置为高电平(LED点亮)
//      Gpio_SetIO(GpioPortD, GpioPin5);

//      delay1ms(1000);
//      
//      ///< 端口PD05设置为低电平(LED关闭)
//      Gpio_ClrIO(GpioPortD, GpioPin5);
//      
//      delay1ms(1000);
    }
}

/******************************************************************************
* EOF (not truncated)
******************************************************************************/



caizhiwei 发表于 2019-9-25 09:33

不错啊,妹子,不过mcu内部集成了断码液晶驱动器了,可以节省成本

Cjy_JDxy 发表于 2019-9-25 10:13

caizhiwei 发表于 2019-9-25 09:33
不错啊,妹子,不过mcu内部集成了断码液晶驱动器了,可以节省成本

我是男的
页: [1]
查看完整版本: 【HC32L136 demo板】+HT1621