0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于华大Cortex-M0+内核芯片实现段码式LCD液晶显示屏的设计

电子设计 来源:网络整理 作者:佚名 2019-11-28 08:00 次阅读

1.项目介绍

不管是LED数码管,还是段码式LCD液晶显示屏,在显示上都是由各个段位组合显示成我们想要的字符的。本项目中采用的是4位段码式LCD显示屏,每一位由A~G共7个段位组成,另外还有P1~P4共4个点段位。为了实现在显示程序上的可移植性和通用性,本项目通过数据结构的设计形式结合驱动LCD显示芯片内部RAM的操作方法,给出一种既适合LED数码管,也适合段码式LCD液晶显示屏的程序设计方法。

2.开发环境

软件开发环境:Keil MDK 5.25,HC32005_SDK

硬件设计软件:立创EDA

3.硬件设计

3.1.原理图设计

硬件设计上使用了华大的Cortex-M0+内核的HC32F005C6PA作为主控芯片,整个系统电压工作在3.3V~5V之间,简单的电源设计和复位电路,使用内部24MHz晶振,通用的SWD在线调试和下载接口,在硬件外围电路上省了不少的空间。4个用户自定义按键、2个串口全部引出,一个连接SP232芯片进行RS-232通讯,另一个直接引出TTL作调试监控用、还有一个4位的LCD段码式液晶屏,使用TM1621驱动芯片,作为显示接口。

3.2.PCB设计

3.3.焊接调试

3.4.华大MCU初次使用,调试体会

基于华大Cortex-M0+内核芯片实现段码式LCD液晶显示屏的设计

4.程序设计

4.1.TM1621驱动设计

TM1621芯片内部带有静态显示内存(RAM),RAM以32*4位格式存储所显示的数据。RAM的数据直接映像到LCD驱动器,也就是说可以通过修改RAM的数据内容,来修改液晶屏显示的内容。对应的COM和SEG所对应的RAM映像图可以参考TM1621的数据手册。对于TM1621我们有4个基础的主要函数,分别如下所述:

4.1.1.void TM1621_Write(uint16_t value, uint8_t length),这是TM1621最底层的函数, 是将value这个数据的高length个bit位写入到TM1621芯片内部,例如:

TM1621_Write(0x8020/*0b 1000 0000 0010 0000*/, 0x0C); // SYS_EN,将0x8020这个数值的高12位写入到TM1621芯片

4.1.2.void TM1621_UpdateRAM(void),更新TM1621显示RAM,将全局数组暂存储的RAM数据统一一次性的更新到TM1621芯片内,使用的是TM1621的WRITE命令,命令概述详见TM1621数据手册。

4.1.3.void TM1621_ModifyRAM(uint8_t index, uint8_t bit, uint8_t flag),修改TM1621显示RAM,根据数据结构及算法确认修改的TM1621显示RAM的下标和位下标,flag是置位和清除的操作标志。统一修改完成后,需要调用TM1621_UpdateRAM函数更新TM1621的显示RAM,更新液晶屏显示。

4.1.4.void TM1621_Init(void),TM1621芯片初始化配置操作,详见程序设计说明。

4.2.显示设计

4.2.1.定义显示字符和段位的映射表,如下代码给出了38个常用的显示字符:

typedef struct

{

char ch; /*字符索引*/

uint8_t segment[8]; /*字符对应的段编码*/

} DIGITRON_STRUCT;

const DIGITRON_STRUCT DIGITRON_TABLE[38] =

{

{‘ ’, {0, 0, 0, 0, 0, 0, 0, 0}},

{‘0’, {1, 1, 1, 1, 1, 1, 0, 0}},

{‘1’, {0, 1, 1, 0, 0, 0, 0, 0}},

{‘2’, {1, 1, 0, 1, 1, 0, 1, 0}},

{‘3’, {1, 1, 1, 1, 0, 0, 1, 0}},

{‘4’, {0, 1, 1, 0, 0, 1, 1, 0}},

{‘5’, {1, 0, 1, 1, 0, 1, 1, 0}},

{‘6’, {1, 0, 1, 1, 1, 1, 1, 0}},

{‘7’, {1, 1, 1, 0, 0, 0, 0, 0}},

{‘8’, {1, 1, 1, 1, 1, 1, 1, 0}},

{‘9’, {1, 1, 1, 1, 0, 1, 1, 0}},

{‘A’, {1, 1, 1, 0, 1, 1, 1, 0}},

{‘b’, {0, 0, 1, 1, 1, 1, 1, 0}},

{‘c’, {0, 0, 0, 1, 1, 0, 1, 0}},

{‘C’, {1, 0, 0, 1, 1, 1, 0, 0}},

{‘d’, {0, 1, 1, 1, 1, 0, 1, 0}},

{‘E’, {1, 0, 0, 1, 1, 1, 1, 0}},

{‘F’, {1, 0, 0, 0, 1, 1, 1, 0}},

{‘g’, {1, 1, 1, 1, 0, 1, 1, 0}},

{‘H’, {0, 1, 1, 0, 1, 1, 1, 0}},

{‘h’, {0, 0, 1, 0, 1, 1, 1, 0}},

{‘i’, {0, 0, 1, 0, 0, 0, 0, 0}},

{‘I’, {0, 0, 0, 0, 1, 1, 0, 0}},

{‘J’, {0, 1, 1, 1, 1, 0, 0, 0}},

{‘l’, {0, 0, 0, 0, 1, 1, 0, 0}},

{‘L’, {0, 0, 0, 1, 1, 1, 0, 0}},

{‘n’, {0, 0, 1, 0, 1, 0, 1, 0}},

{‘o’, {0, 0, 1, 1, 1, 0, 1, 0}},

{‘O’, {1, 1, 1, 1, 1, 1, 0, 0}},

{‘P’, {1, 1, 0, 0, 1, 1, 1, 0}},

{‘q’, {1, 1, 1, 0, 0, 1, 1, 0}},

{‘r’, {0, 0, 0, 0, 1, 0, 1, 0}},

{‘S’, {1, 0, 1, 1, 0, 1, 1, 0}},

{‘t’, {0, 0, 0, 1, 1, 1, 1, 0}},

{‘u’, {0, 0, 1, 1, 1, 0, 0, 0}},

{‘U’, {0, 1, 1, 1, 1, 1, 0, 0}},

{‘y’, {0, 1, 1, 1, 0, 1, 1, 0}},

{‘-’, {0, 0, 0, 0, 0, 0, 1, 0}},

};

4.2.2.定义段位的组成关系,如下给出了显示一位字符所需要的一个段组合,这些定义可以参照段码式LCD液晶屏的PIN引脚关系定义:

const char DISPLAY_DIGIT_TABLE[4][7][3] =

{

{“1A”, “1B”, “1C”, “1D”, “1E”, “1F”, “1G”},

{“2A”, “2B”, “2C”, “2D”, “2E”, “2F”, “2G”},

{“3A”, “3B”, “3C”, “3D”, “3E”, “3F”, “3G”},

{“4A”, “4B”, “4C”, “4D”, “4E”, “4F”, “4G”},

};

const char DISPLAY_POINT_TABLE[4][3] =

{

“P1”, “P2”, “P3”, “P4”

};

直白了说,就是我要在第一位上显示一个‘8’这个字符,那这个字符肯定是由“1A”, “1B”, “1C”, “1D”, “1E”, “1F”, “1G”这7个段位组合显示而成的。

4.2.3.定义段码式LCD液晶屏PIN引脚关系与TM1621驱动芯片显示RAM的对应关系表,如下代码所示:

const char LCD_CS_TABLE[4][32][3] =

{

{“1F”,“1A”,“2F”,“2A”,“3F”,“3A”,“4F”,“4A”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”},

{“1G”,“1B”,“2G”,“2B”,“3G”,“3B”,“4G”,“4B”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”},

{“1E”,“1C”,“2E”,“2C”,“3E”,“3C”,“4E”,“4C”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”},

{“P1”,“1D”,“P2”,“2D”,“P3”,“3D”,“P4”,“4D”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”,“ ”},

};

这个数组的每一行对应着一个COM,每一列对应着一个SEG,这样一个数据就直接映射成TM1621显示RAM中的每一个BIT位;但需要注意的是,这个数据是需要根据原理图的COM和SEG引脚的设计而定的;本项目在硬件设计上段码式LCD液晶的COM0~COM3分别对应的也是TM1621驱动芯片的COM0~COM3,所以在行的对应关系上与段码式LCD液晶屏PIN引脚关系保持一致,如果顺序不一致,那在数组的行顺序要也要做相应的对应排序;SEG段的数组对应关系设计和COM段的思想是一样的。

4.2.4.void DISPLAY_SearchCS(const char *str, uint8_t *com, uint8_t *seg),这是最关键的一个函数,结合硬件电路设计,查找某个显示字符对应的每一个段编码在TM1621显示RAM的下标和位下标。

4.2.5.void DISPLAY_Digit(uint8_t index, char ch, uint8_t blink, uint8_t flag),这是位显示函数,index是位下标,ch是需要显示字符,blink是闪烁标志,flag是刷新标志;通过这个函数,我们可以调用DISPLAY_Digit(0, ‘8’, 0, 1);在第一个位置上显一个不闪烁的8字。

5.程序移植性和通用性

在相同硬件驱动的情况下,对应不同设计的段码式LCD,我们只需要根据段码式LCD液晶屏PIN引脚关系,再结合硬件原理图电路设计,修改LCD_CS_TABLE数组即可实现如上显示功能。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4411

    浏览量

    167055
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1367

    浏览量

    114518
  • 液晶显示屏
    +关注

    关注

    1

    文章

    207

    浏览量

    27241
收藏 人收藏

    评论

    相关推荐

    LCD1602液晶显示屏的驱动设计与实现

    LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示的原理是利用
    的头像 发表于 12-08 11:24 9921次阅读
    <b class='flag-5'>LCD</b>1602<b class='flag-5'>液晶显示屏</b>的驱动设计与<b class='flag-5'>实现</b>

    LCD液晶显示屏实现多级嵌套菜单

    摘要: 介绍了在C 语言环境下,在LCD 液晶显示屏实现多级嵌套菜单的一种简便方法,提出了一个结构紧凑、实用的程序模型。关键词: 液晶显示屏; 多级菜单; 单片机; C 语言;
    发表于 07-14 08:41

    请问如何驱动LCD1602液晶显示屏

    LCD1602液晶显示屏的原理是什么?如何驱动LCD1602液晶显示屏
    发表于 01-17 08:29

    什么是SuperFine LCD/超炫丽液晶显示屏

    什么是SuperFine LCD/超炫丽液晶显示屏  超炫丽液晶显示屏(SuperFine LCD)就是在一般液晶屏幕亮度的涂层之外,再附
    发表于 01-23 09:58 644次阅读

    LCD液晶显示

    LCD液晶显示,用于测试单片机液晶显示屏显示正确与否
    发表于 11-19 17:30 11次下载

    基于MSP430控制的液晶显示屏设计与实现

    基于MSP430控制的液晶显示屏设计与实现
    发表于 10-13 08:48 32次下载

    字符型点阵式 LCD液晶显示屏液晶显示技术的详述

    一:字符型点阵式 LCD 液晶显示屏LCD 的应用很广泛,简单如手表上的液晶显示屏,仪表仪器上的液晶显示器或者是电脑笔记本上的
    发表于 11-22 10:36 21次下载
    字符型点阵式 <b class='flag-5'>LCD</b><b class='flag-5'>液晶显示屏</b>及<b class='flag-5'>液晶显示</b>技术的详述

    如何清洁TFT液晶显示屏

    TFT液晶显示屏使用一时间后,你会发现显示屏上常会吸附一层灰尘(关掉LCD后侧看更明显),有时还会不小心粘上各种水渍,这肯定将大大影响视觉效果,该如何清洁呢?
    发表于 05-14 15:32 1506次阅读

    如何选择LCD液晶显示屏厂家

    LCD液晶显示屏制作的厂家很多,但是在选择专业定制LCD液晶屏厂家时,应该选择哪一家液晶显示屏的生产厂家来进行制作,才能保证
    发表于 06-26 16:40 1225次阅读

    lcd液晶显示屏的两种驱动方法

    lcd液晶显示屏的驱动就是用来调整施加在液晶器件电极上的电位信号的相位、峰值、频率等,建立驱动电场,以实现液晶显示器件的
    发表于 06-24 10:41 1.9w次阅读

    LCD液晶显示屏如何有效进行防静电

    严寒的冬季除了气温很低,还有就是非常的干燥的。这对于LCD显示屏是不利的。那LCD液晶显示屏具体应该如何有效的防静电呢?
    发表于 12-09 08:00 27次下载

    LCD、OLED液晶显示屏完整中文资料合集

    LCD、OLED液晶显示屏完整中文资料合集
    发表于 01-17 09:39 94次下载

    如何提高液晶显示屏呢?

    可以通过改进液晶显示屏的面板技术来提高液晶显示屏的对比度,采用TN面板的显示屏对比度都比较低,可以通过IPS和VA技术,即使用IPS型面板和VA型面板的液晶显示屏,这两种面板的
    发表于 04-21 12:36 666次阅读

    液晶显示屏与led显示屏的区别

    所不同。 一、显示原理 1.1 液晶显示屏LCD液晶显示屏(Liquid Crystal Display,简称LCD)是一种利用
    的头像 发表于 10-12 10:39 859次阅读

    液晶显示屏是什么材料做的

    液晶显示屏(Liquid Crystal Display,简称LCD)是一种广泛使用的显示技术,它利用液晶材料的光学特性来控制光线的通过,从而实现
    的头像 发表于 10-12 10:41 617次阅读