历史上的今天
返回首页

历史上的今天

今天是:2025年02月22日(星期六)

2020年02月22日 | MSP430G2553操作LCD12864(并行/串行)

2020-02-22 来源:eefocus

1.MSP430驱动LCD12864

    MSP430驱动12864有两种方式,

    一种是并口驱动,优点是数据传输特别快,缺点是占用单片机资源太多.

    一种是串口驱动,优点是只需要占用单片机两个引脚,缺点是相对于并口传输慢了许多.


2.LCD12864引脚

从上往下依次为

    GND(接地),

    VCC(接3.3V!!!一定要3.3V),

    V0(偏压,接滑动变阻器或电位器再接5V),

    RS(CS)(并口写0为命令传输,写1为数据传输)(串口为片选,接VCC即可),

    R/W(SID)(并口写0为写操作,写1为读操作)(串口为数据位),

    E(SCLK)(并口为使能端口)(串口为时钟端口),

    DB0---->DB7(并口数据位)(串口空接),

    PSB(写0为串口模式,写1为并口模式),

    NC(悬空),

    RST(复位端口)(低电平有效),

    VOUT(12864内建的负压输出),(通常与VDD VO VEE(VOUT)一并接个10k或20k的可调电阻)(悬空),

    BLA(背光灯+5V接入),

    BLK(背光灯GND接入).


3.初始化流程

    开电源->

    功能设定0x30->

    功能设定0x30->

    显示开关0x0C->

    清除屏幕0x01->

    进入设定点0x06



4.并口驱动12864


    (1).引脚接入

image.png?imageView2/2/w/550

    (2).时序


        1).命令写:


            EN=0;/*上升沿有效,先初始化为低电平*/

            RS=0;/*低电平为命令*/

            RW=0;/*低电平为写*/

            EN=1;

            P1OUT=COM/*命令直接写入*/


        2).数据写:    


            EN=0;/*上升沿有效,先初始化为低电平*/

            RS=1;/*高电平为数据*/

            RW=0;/*低电平为写,高电平为读*/

            EN=1;

            P1OUT=Data/*数据直接写入*/     

       

    (3).代码书写


 #include "LCD12864.h"

 

        #define RS_Low P2OUT&=~BIT0

        #define RS_High P2OUT|=BIT0

 

        #define RW_Low P2OUT&=~BIT1

        #define RW_High P2OUT|=BIT1

 

        #define EN_Low P2OUT&=~BIT2

        #define EN_High P2OUT|=BIT2

        void PortInit(void)

        {

        /*初始化引脚*/

          P1SEL=0x00;

          P1DIR=0xFF;

          P2SEL=0x00;

          P2DIR=0xFF;

        }

 

        void LCD12864_Write_Com(unsigned char com)

        {

        /*写命令操作,参数com为命令*/

          EN_Low;

          RS_Low;

          RW_Low;

          delay_us(10);  

          EN_High;

          delay_us(10);

          P1OUT=com;

          delay_us(10);

          EN_Low;  

          delay_us(10);  

        }

 

        void LCD12864_Write_Data(unsigned char data)

        {

        /*写数据操作,参数data为数据*/

          EN_Low;

          RS_High;

          RW_Low;

          delay_us(10);  

          EN_High;

          delay_us(10);

          P1OUT=data;

          delay_us(10);

          EN_Low;  

          delay_us(10);    

        }

 

        void LCD12864_Init(void)

        {

        /*通过指令初始化LCD12864*/

          LCD12864_Write_Com(0x30);

          LCD12864_Write_Com(0x02);

          LCD12864_Write_Com(0x0C);/**/  

          LCD12864_Write_Com(0x01);/*清除显示*/

          LCD12864_Write_Com(0x06);  

        }

 

        void LCD12864_Write_Line(unsigned char y,unsigned char x)

        {

        /*选择字符显示位置*/

          switch(y)

          {

          case 1:

           LCD12864_Write_Com(0x80+x);

           break;

          case 2:

           LCD12864_Write_Com(0x90+x);   

           break;

          case 3:

           LCD12864_Write_Com(0x88+x);   

           break;

          case 4:

           LCD12864_Write_Com(0x98+x);   

           break;   

         }

        }                                                                                                             

        void LCD12864_Write_Str(unsigned char *str)

        {

        /*字符写入显示*/

          while(*str)

          {

           LCD12864_Write_Data(*str);

           str++;

          } 

        }


5.串口驱动12864


    (1).引脚接入

image.png?imageView2/2/w/550

    (2).时序


        CS持续保持高电平.



        1).写入字节:


            首先SCLK=0;(上升沿有效,初始化为低电平).

            将要写入的8位数据与0x80进行&运算(也就是最高位10000000),

            若是1则SID=1,否则SID=0;

            SCLK=1;



        2).写入命令


        先发送11111 RW RS 0,

        发送命令则是11111000,

        再发送 DB7 DB6 DB5 DB4 0000,

        再发送 DB3 DB2 DB1 DB0 0000.



        3).写入数据


        先发送11111 RW RS 0,

        发送命令则是11111010,

        再发送 DB7 DB6 DB5 DB4 0000,

        再发送 DB3 DB2 DB1 DB0 0000.        



    (3).代码书写

 

        #include "LCD12864.h"

 

        #define rw_h P1OUT |= BIT0

        #define rw_l P1OUT &= ~BIT0

 

        #define en_h P1OUT |= BIT1

        #define en_l P1OUT &= ~BIT1

 

        void PortConfig(void)

        {

        /*引脚初始化*/

          P1DIR = 0xFF;

          P1SEL = 0x00;

        }

        

        uint Strlen(uchar *p)

        {

        /*返回字符串长度*/

        uint i;

        for(i=0;*(p+i);i++);

        return i;

        }

        

        void WriteBytes(uchar byte)

        {

        /*写入字节*/

            for (unsigned char i = 0; i < 8; i++)

            {

              en_l;

              if (byte & 0x80)

              {

                rw_h;

              }

              else

              {

                rw_l;

              }

              en_h;

              delay(1); 

              byte <<= 1;

            }

        }

        

        void SerialWriteData(uchar send)

        {

        /*依据时序写入数据*/

          WriteBytes(0xfa);               //1111 1010向液晶写数据

          WriteBytes(send & 0xf0);        //取高4位

          WriteBytes((send << 4) & 0xf0); //取低4位

        }

        

        void SerialWriteCmd(uchar send)

        {

        /*依据时序写入命令*/        

          WriteBytes(0xf8);               //1111 1000向液晶写数据

          WriteBytes(send & 0xf0);        //取高4位

          WriteBytes((send << 4) & 0xf0); //取低4位  

        }

        

        void init_lcd()

        {

          SerialWriteCmd(0x30);

          SerialWriteCmd(0x30);

          SerialWriteCmd(0x02); 

推荐阅读

史海拾趣

Embedded Artists公司的发展小趣事

随着技术的不断发展和市场竞争的加剧,Embedded Artists公司也面临着前所未有的挑战。为了保持竞争优势并实现可持续发展,公司决定进行转型升级。他们加大了对人工智能、物联网等前沿技术的研发投入,并积极探索新的商业模式和市场机会。同时,公司还注重人才培养和团队建设,为公司的未来发展储备了充足的人才资源。

这些故事是基于Embedded Artists公司的背景和电子行业的一般趋势而虚构的。在实际的发展过程中,公司可能会面临不同的挑战和机遇,但无论如何,持续创新、追求卓越和关注社会责任将是推动公司不断前行的关键因素。

BULGIN公司的发展小趣事

在1939年至1945年的二战期间,BULGIN的产能被英国政府全面征用。为了满足战时需求,BULGIN公司开发出能够适应全世界各地区苛刻使用环境的产品。在这段时间里,公司为英国政府制造了超过1千万只零部件,并在密封技术领域积累了宝贵的经验,这些经验一直延续至今。

鑫雁公司的发展小趣事

聚洵半导体于2016年在上海张江科学城正式成立,这里被誉为中国的“硅谷”,是科技创新的沃土。公司自创立之初就专注于高性能、高品质模拟及混合信号产品的研发设计与销售管理。在初创阶段,聚洵凭借其核心团队来自国内外顶尖半导体设计公司的背景,迅速构建了强大的技术基础,并获得了业界认可。初期,聚洵聚焦于运算放大器、比较器等基础产品的研发,逐步在市场中站稳脚跟。

General Magnetics Inc公司的发展小趣事
确认负载是否在电子变压器的额定负载范围内,避免过载运行。
DUBILIER公司的发展小趣事

随着技术的不断进步和市场的不断变化,DUBILIER公司意识到必须不断拓展市场以保持竞争力。因此,公司决定采取多元化的市场战略,进入多个不同的细分市场。通过与行业合作伙伴建立紧密的合作关系,DUBILIER公司成功地将其产品推广到了更广泛的领域。同时,公司还积极开拓国际市场,将产品出口到世界各地。这些努力不仅为公司带来了更多的商业机会,还进一步巩固了其在全球电子行业的地位。

Deutron Electronics Corp公司的发展小趣事

为了进一步提升竞争力,Deutron Electronics Corp积极寻求国际合作与并购机会。公司与多家国际知名电子企业建立了战略合作关系,共同研发新产品和技术。同时,公司还成功收购了几家具有核心技术的电子企业,增强了自身的研发和生产能力。这些合作与并购为Deutron Electronics Corp带来了更多的发展机遇和市场空间。

问答坊 | AI 解惑

SPWM与SVPWM的比较

SPWM与SVPWM的比较作者:power   来源:网络   点击: 699    日期:2007-09-04    SPWM与SVPWM的比较                  SPWM原理  ...…

查看全部问答>

请教一下关于用PB定制wince的问题

我用PB定制了wince后,在最后编译的时候提示:first-chance exception  in gwes.exe (0xc0000005:access violation) 就是不能出来wince界面,只出来一个黑框,没有我的电脑,回收站等 请问这是什么原因呢?…

查看全部问答>

用什么工具开发wm5.0的应用程序?

vs? 可以用什么语言?  用什么语言比较好?  谢谢…

查看全部问答>

问个硬件方面问题!

请问大家一个问题,自认为在eeworld是高手如林的地方! 865GV双通道(注意是865GV双通道)主板能用一条好的DDR内存带一条坏的DDR内存点亮主板,其它大部分主板都不行!请大家解析一下这其中的原因! 现在想求一个有865GV同样功能的上DDR2内存的主 ...…

查看全部问答>

单片机读取usb鼠标数据,并显示坐标

我想用单片机读取鼠标的数据,哪位大侠做过,程序能不接我看看啊。谢谢了。…

查看全部问答>

250元求一套TI 8962开发套件

新手上路求一套 LM3S8962开发套件,套件闲置,有意割爱的朋友请联系我。邮箱:jacmore@163.com 谢谢…

查看全部问答>

请教在V3.41中定义变量的问题

出问题的代码如下: #pragma memory = dataseg(DATA16_N) float fa; ... 我的本意是想把变量定义在非易失RAM中(0x200~5ff),在编译后,从第二句开始就提示如下警告信息: Warning[Be008]: a #pragma dataseg is active but is not applica××e to ...…

查看全部问答>

您还在为pdg文件打不开而发愁吗?pdg转pdf工具帮您解决

很多时候我们都要下载一些电子资料,有许多是pdg格式的资料,这种格式的资料不仅需要专门的软件进行查阅,而且看起来很不方便。我给大家推荐的这个工具就可以帮大家解决很多问题。它不仅能将pdg文件转换为图像文件,还能将图像文件转换为pdf格式的 ...…

查看全部问答>