STM8单片机对LCD模块的驱动.doc

上传人:白大夫 文档编号:3273868 上传时间:2019-08-07 格式:DOC 页数:5 大小:24KB
返回 下载 相关 举报
STM8单片机对LCD模块的驱动.doc_第1页
第1页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《STM8单片机对LCD模块的驱动.doc》由会员分享,可在线阅读,更多相关《STM8单片机对LCD模块的驱动.doc(5页珍藏版)》请在三一文库上搜索。

1、STM8单片机对LCD模块的驱动STM8L152XX系列带有片上段式LCD驱动程序,这为低成本应用和高密度系统设计提供了保证,利用片上LCD驱动模块,可以有效的控制系统整体功耗,简化系统结构,从整体来说可靠性得到提高。此处不介绍LCD驱动模块的原理以及驱动时序,请参考STM8原版英文说明文档,已描述的很详细,以下介绍其寄存器的配置方法以及编程方法。时钟,系统时钟同样用来产生LCD驱动时钟,通过时钟模块配置:CLK_PCKENR2|=S3; /LCD 使能LCD模块时钟CLK_CRTCR=S7|S6|S5|S1; /RTC以上配置根据实际时钟进行调整,我在此处采用FCLK=HSI=16MHZ,所

2、以LCDclk=16M/128=125KHZ我的LCD为六个数字的段式LCD,1/3偏压方式,4根COM线,12根COM线,这两个参数请读者自己查找自己的LCD资料找到,对于驱动LCD来说这两个参数最重要,以下为寄存器配置:LCD_CR1=S5|S2|S1;/1/3偏压1/4占空比LCD_CR2=S6|S4|S0;/3.3VLCD_FRQ=54;/FCK=125000/2*16=128000/512=244Frame=244/4=61HZLCD_PM0=0xFF;LCD_PM1=0x0F;LCD_CR3|=S6;首先由偏压方式决定了驱动到LCD段码上的电压种类,占空比(标准并非如此翻译)Dut

3、y值决定扫过每根COM线的时序比例,由于我将VLCD与VCC接在一起了,所以选择外部电源参考3.3V,若选择内部,则可以进一步选择最高输出电压大小,实测发现选大些对比度可提高一些。LCD_FRQ用于配置扫描更新频率,具体计算不想说,文档里都有。最后是配置那些接在LCD上的COM线和SEG线为LCD驱动复用有效模式,否则仍可以作为IO口使用,最后开启LCD驱动模块扫描。配置完以上寄存器之后,LCD模块已开始工作,它是通过从LCD_RAM0-LCD_RAM12这一组寄存器来控制显示内容的,这时向LCD_RAM0-LCD_RAM12写入数据会发现有段码显示在LCD上,作为应用层,需要找到这种关系。查

4、手里这块LCD资料列出段码表如下所示:/*-SEG:012345678910111DX22DX33DX14D4P5D5P6D6P1E1C2E2C3E3C4E4C5E5C6E6C1G1B2G2B3G3B4G4B5G5B6G6B1F1A2F2A3F3A4F4A5F5A6F6ACODE:AFBGCEPD-*/于是我把一个字节最高位至最低位从A段到D段按如上CODE顺序进行排列,并得到段表码如下:constuint8LCD_CodeTable=0xED,0x28,0xB5,0xB9,0x78,0xD9,0xDD,0xA8,0xFD,0xF9,0xFC,0x5D,0x15,0x3D,0xD5,0xD4,

5、0x5C,0x10,0xC5,0xA9,0x00;这些段码表分别对应于以下字符:0,1,2,3,4,5,6,7,8,9,A,b,c,d,E,F,h,-,注,最后一个为空格为编程方便,我对字符进行编码:A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U依次和上面的字符相对应为六个字符定义显示内容缓冲区:uint8LCD_DisplayBuffer6;voidLCD_SetSegValue(void)uint16T,SEG4;uint8i,j,Code6;for(i=0;i6;i+)Code5-i=LCD_CodeTableLCD_DisplayBufferiif(

6、LCD_DisplayBufferifor(i=0;i4;i+)for(T=0,j=0;j6;j+)T=2;T|=(CodejCodej=2;SEGi=T;LCD_RAM0=(uint8)(SEG0);/COM0-B7:0LCD_RAM1=(uint8)(SEG08);/COM0-B11:8LCD_RAM3=(uint8)(SEG14);/COM1-B3:0-HLCD_RAM4=(uint8)(SEG14);/COM1-B11:4LCD_RAM7=(uint8)(SEG2);/COM2-B7:0LCD_RAM8=(uint8)(SEG28);/COM2-B11:8LCD_RAM10=(uint

7、8)(SEG34);/COM3-B3:0-HLCD_RAM11=(uint8)(SEG34);/CoM3-B11:4以上这段程序将LCD_DisplayBuffer中的六个字符解码后写入LCD模块的显示缓冲区中,最终显示成相应字符,这其中用每个字符的最高位代表是否含有小数点位,若为高则点亮相当的小数点,否则关闭。至于LCD_RAM的更新和拆分方法,此外不再描述,文档中已相当详细。围绕以上刷新程序,可得到如下常用方法:/清显示voidLCD_Clear(uint8Index)uint8i;if(Index=0xFF)for(i=0;i6;i+)LCD_DisplayBufferi=U-A;els

8、eLCD_DisplayBufferIndex=U-A;LCD_SetSegValue();/写显示缓冲区点voidLCD_ShowSpecial(uint8Saddr,uint8Char)if(Char0)LCD_DisplayBufferSaddr|=0x80;elseLCD_DisplayBufferSaddr/显示字符voidLCD_ShowChar(uint8Saddr,uint8Char)LCD_DisplayBufferSaddrLCD_DisplayBufferSaddr|=Char;LCD_SetSegValue();/显示字符串voidLCD_ShowString(uint

9、8Saddr,void*Text)uint8T,P,*Str;Str=(uint8*)Text;while(*Str0)T=*Str+;P=LCD_DisplayBufferSaddr;LCD_DisplayBufferSaddr+=(PLCD_SetSegValue();/显示数字voidLCD_ShowNumber(uint8Saddr,uint16Number,uint8Length)uint8P;Saddr+=Length-1;while(Length-)P=LCD_DisplayBufferSaddr;LCD_DisplayBufferSaddr=(PSaddr-;Number/=10;LCD_SetSegValue();由以上函数库,可以方便的显示出如LCD_ShowString(0,“BCDEF”)(显示“12345“),LCD_ShowNumber(0,1244,4)(显示”1244“),等等。配合一些简单的数据结构,便可得到一个相对复杂点的菜单操作界面。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1