历史上的今天
返回首页

历史上的今天

今天是:2025年02月19日(星期三)

正在发生

2020年02月19日 | STM8L152的LCD模块原理及驱动

2020-02-19 来源:eefocus

STM8L182内部集成了一个高达320个像素LCD的驱动模块。框图如下:

1. 配置LCD的时钟源、分频比、占空比、偏移电压、启用LCD端口复用功能、清晰度,并使能LCD功能。


void LCD_Config(void)

{


    /* Enable RTC CLK */

    CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);


    /* Enable RTC CLK */

    CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);


    /* Choice CLK Source, HSI_Freq = 16M, RTC_Freq = 500Khz*/

    CLK_RTCClockConfig(CLK_RTCCLKSource_HSI,CLK_RTCCLKDiv_32); 


    /* Frequence = 500K/(32+16)  Frame_Freq = Frequence/Duty = 60Hz */

    LCD_Init(LCD_Prescaler_32, LCD_Divider_16, LCD_Duty_1_8,

    LCD_Bias_1_3, LCD_VoltageSource_External);     


    /* Enable PM */

    LCD_PortMaskConfig(LCD_PortMaskRegister_0, 0xFF); 

    LCD_PortMaskConfig(LCD_PortMaskRegister_1, 0x0F); 

    LCD_PortMaskConfig(LCD_PortMaskRegister_2, 0x00); 

    LCD_PortMaskConfig(LCD_PortMaskRegister_3, 0x00);

    LCD_PortMaskConfig(LCD_PortMaskRegister_4, 0x00); 

    LCD_PortMaskConfig(LCD_PortMaskRegister_5, 0x00);


    /*  LCD_Contrast_Level_7: Medium Density / High Density Maximum Voltage = 3.30V / 3.51V */

    LCD_ContrastConfig(LCD_Contrast_Level_7);


   /* No dead time */

    LCD_DeadTimeConfig(LCD_DeadTime_0); 


   /* LCD_PulseOnDuration_7: Pulse ON duration = 7/CLKprescaler */

    LCD_PulseOnDurationConfig(LCD_PulseOnDuration_7);

    LCD_Cmd(ENABLE); 

}


其中LCD_PortMaskRegister: The LCD register index in the port mask matrix.相关的寄存器为:

只用到12个SEG,置位PM0的8位和PM1的低4位。


2. 关闭、打开、清屏操作


void LCD_OFF(void)

{

 CLK_PeripheralClockConfig(CLK_Peripheral_RTC, DISABLE);

 CLK_PeripheralClockConfig(CLK_Peripheral_LCD, DISABLE);

}

void LCD_ON(void)

{

 CLK_PeripheralClockConfig(CLK_Peripheral_RTC, ENABLE);

 CLK_PeripheralClockConfig(CLK_Peripheral_LCD, ENABLE);

}

void LCD_Clear(void)

{

  uint8_t i=0;

  for(i=0;i  {LCD_PageSelect(LCD_PageSelection_FirstPage);

    LCD->RAM[i]=0;

  LCD_PageSelect(LCD_PageSelection_SecondPage);

   LCD->RAM[i]=0;}

}


在LCD_Clear();函数中,因为项目中用到8个COM,所以有2个Page(LCD_PageSelection_FirstPage,LCD_PageSelection_FirstPage)。

3. 配置好LCD的相关寄存器,往LCD的RAM里面写数据。


例如这样一块屏:

根据规格书,的出对应的RAM列表

image.png?imageView2/2/w/550

#define  a       0x01    

#define  b       0x02    

#define  c       0x04    

#define  d       0x08    

#define  e       0x10    

#define  f        0x20   

#define  g       0x40 


#define NONE      0x00 


const unsigned int LCD_MODEL[]=   


{


  {a+b+c+d+e+f},               //0

  {c+b},                               //1

  {a+b+d+e+g},                   //2

  {a+c+b+d+g},                   //3

  {c+b+f+g},                        //4

  {a+c+f+d+g},                    //5

  {a+c+e+f+d+g},                //6

  {a+c+b},                           //7

  {a+c+e+b+f+d+g},            //8

  {a+c+b+f+d+g},                //9


}


/**


   * 假如显示0,0对应的值的二进制位01111111,通过对比表中的位置,进行移位赋值操作


   */


 


void Display_LCD_Num(u8 NUM)  

{

    LCD_PageSelect(LCD_PageSelection_FirstPage);


    /* 清除C、D段位的显示 */

    LCD->RAM[LCD_RAMRegister_0]&=(~0x03); 


    /* 写入C、D段位的值 */

    LCD->RAM[LCD_RAMRegister_0]|=(((LCD_MODEL[Data]>>1)&0x02)+((LCD_MODEL[Data]>>3)&0x01)); 


    /* 清除G、E段位的显示 */

    LCD->RAM[LCD_RAMRegister_3]&=(~0x30);

    LCD->RAM[LCD_RAMRegister_3]|=(((LCD_MODEL[Data]>>1)&0x20)+((LCD_MODEL[Data])&0x10)); 


     /* 清除B、F段位的显示 */

    LCD->RAM[LCD_RAMRegister_7]&=(~0x03);

    LCD->RAM[LCD_RAMRegister_7]|=((LCD_MODEL[Data]&0x02)+((LCD_MODEL[Data]>>5)&0x01));  


    /* 清除A段位的显示 */

    LCD->RAM[LCD_RAMRegister_10]&=(~0x10);

    LCD->RAM[LCD_RAMRegister_10]|=((LCD_MODEL[Data]<<4)&0x10);  //A  

}

推荐阅读

史海拾趣

HTSEMI( Jin Yu Semiconductor )公司的发展小趣事

随着技术实力的不断提升,金宇半导体开始积极拓展国内外市场。公司制定了详细的市场拓展计划,通过参加国际电子展、举办技术研讨会等方式,加强与客户的沟通和交流。同时,金宇半导体还加大了品牌建设的力度,通过广告宣传、媒体合作等多种方式提升品牌知名度和美誉度。这些努力使得金宇半导体的市场份额逐年攀升,品牌影响力也日益增强。

Galaxy Microelectronics公司的发展小趣事

江苏飞翼智能科技有限公司在无人机航模领域也有着深厚的积累。公司不仅自己购买零件组装各类航模,还积极参与国内航模比赛,凭借良好的飞机性能和一流的操控技术取得了不俗的成绩。尤其是涡喷航模,作为中高级的航模产品,其高难度的特技动作展示了飞翼智能在无人机技术方面的深厚功底。这些经验积累和技术创新为飞翼智能向无人机应用型企业转型奠定了坚实基础。

GWP Group公司的发展小趣事

飞翼科技(FEIYI)在多个领域的发展均体现了其创新驱动的发展战略。无论是无人机技术的智能化应用,还是绿色矿山技术的创新突破,亦或是电容式触摸感应芯片的市场领先,都离不开公司对技术创新的不断追求。飞翼科技积极与高校、研究机构及行业专家开展合作,集聚顶尖科技人才,共同推动技术进步和产业升级。同时,公司还注重知识产权保护,拥有国家专利技术300余项,为企业的持续发展提供了有力保障。通过这些努力,飞翼科技在电子行业中不断崛起,成为行业内的佼佼者。

ELMEC Technology Of America Inc公司的发展小趣事

随着环保意识的不断提高,ELMEC开始关注企业的环保责任。他们采用环保材料替代传统材料,减少生产过程中的污染排放。同时,公司还积极开展绿色能源研发和应用,降低能耗和碳排放。这些措施不仅为公司赢得了良好的社会声誉,也为推动电子行业的可持续发展做出了积极贡献。

科通(COMTEK)公司的发展小趣事

随着公司业务的不断拓展,科通技术开始与国际知名品牌展开合作。通过与Xilinx、Intel、SanDisk等全球领先的芯片原厂建立紧密的合作关系,科通技术获得了这些品牌的产品线授权,并为其在中国市场的拓展提供了有力的支持。这些合作不仅提升了科通技术的品牌影响力,也为其带来了更多的市场机会。

Auris公司的发展小趣事

Auris公司的创始人Federic Moll博士,被誉为手术机器人之父。他在2007年创立了Auris Health(原名Auris Surgical Robotics),总部位于美国加利福尼亚州圣卡洛斯。Moll博士此前已经成功创办了多家手术机器人企业,其中最为知名的是上市公司Intuitive Surgical,其达芬奇手术机器人技术已在全球范围内广泛应用。Moll博士的深厚技术背景和丰富的创业经验为Auris的起步奠定了坚实的基础。

问答坊 | AI 解惑

TSB11

老师,我还少一个MC14433…

查看全部问答>

FPGA引脚感应出倍频信号

使用altera cycloneIII, 外接20M晶振,接内部一个1:1的PLL(PLL输入20M, 输出也是20M), 在许多引脚上都感应出40M的脉冲波形,是什么原因啊?  …

查看全部问答>

怎样获得spy在shell中打印的某个数据呢?

各位高手,在shell中用spy可以查看各个任务以及总的cpu利用率,并用一个表列出结果,现在我只想取出空闲率这个数据,请问该怎样实现呢?…

查看全部问答>

pic秒表的问题!!!!急求!!!

#include #define uchar unsigned char #define uint unsigned long int #define RS RB4 #define E RE2 #define UPKEY RB1 #define DOWNKEY  RB2 #define CLRKEY  RB5 uchar table[]=\"  000:000:000  ...…

查看全部问答>

谁会用msp430调pcf8574啊?跪求

谁会用msp430调pcf8574啊?跪求 我自己写了一个,可惜不知什么原因,就是8574死活没有反应,无语了…

查看全部问答>

wince usb 识别问题,紧急求助~!!

手持设备,操作系统为WINCE,当USB接口接上电脑的时候为手持设备为disk mode,而接上带USB接口的充电器就充电, 现在的问题是:我怎样区分插上的另一头连接计算机的USB线,还是另一头个就是AC供电器的线。wince usb驱动里面 怎样标志他们的不同呢 ...…

查看全部问答>

STM32F103正交编码器问题

                                 STM32F103 最多能接多少个正交编码器?…

查看全部问答>

9B96的EPI模块能用于并行接口的AD吗?

如题,9B96的EPI模块能用于访问并行接口的AD吗? EPI模块为什么要强调地址总线,还有EPI时钟,这些好像不是为AD这样的东西准备的吧,那是不是说EPI模块就不能用于访问并行接口的AD呢? 完全不懂,请大家不要见笑,多多指教我哦………

查看全部问答>

声纳测距用什么芯片好

谁能告诉我声纳测距都可以用什么芯片?…

查看全部问答>