查看: 3381|回复: 1

基于SAM4N的串行方式控制LCD12864液晶屏

[复制链接]
  • TA的每日心情
    开心
    2021-12-2 16:03
  • 签到天数: 271 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-10-25 23:50:49 | 显示全部楼层 |阅读模式
    分享到:
         今天是试用的最后一天,突然想实现对LCD12864液晶屏的控制,由于在SAM4N评估板上引出的都是单个分开的IO口,所以就想着用串行方式编程来实现对LCD的控制,于是就查找了下相应的资料,串行方式所需IO只有5个,分别是CS(片选信号线),SID(数据线),sck(时钟信号线),PSB(并/串行选择信号线),RST(复位信号线),由于根据手册上说的液晶屏上电后会自动复位,所以就没接,还有这里我是选择串行方式驱动,所以PSB线直接接地,这里就只用了三线控制12864屏了,
    lcdtime.jpg

    这是有关驱动液晶屏的时序图,
    相应的程序如下(三线分别接在开发板的A11,A12,A13上)
    #define LCD_CS     PIO_PA11_IDX
    #define LCD_SID    PIO_PA12_IDX
    #define LCD_SCK    PIO_PA13_IDX

    #define SET_CS    do {ioport_set_pin_level(LCD_CS, IOPORT_PIN_LEVEL_HIGH);} while (0)
    #define SET_SID   do {ioport_set_pin_level(LCD_SID, IOPORT_PIN_LEVEL_HIGH);} while (0)
    #define SET_SCK   do {ioport_set_pin_level(LCD_SCK, IOPORT_PIN_LEVEL_HIGH);} while (0)

    #define CLR_CS    do {ioport_set_pin_level(LCD_CS, IOPORT_PIN_LEVEL_LOW);} while (0)
    #define CLR_SID   do {ioport_set_pin_level(LCD_SID, IOPORT_PIN_LEVEL_LOW);} while (0)
    #define CLR_SCK   do {ioport_set_pin_level(LCD_SCK, IOPORT_PIN_LEVEL_LOW);} while (0)

      void w_bit(char en)    //写一位数据{
            if(en==1)
            {
                     SET_SID;
                     SET_SCK;
                     delay_us(10);
                     CLR_SCK;
            }
            else
            {
                    CLR_SID;
                    SET_SCK;
                    delay_us(10);
                    CLR_SCK;
            }
    }

    void w_byte(char byt)   //写8位数据
    {
            for(char j1=0;j1<8;j1++)
            {
                    w_bit(((byt)>>(7-j1))&0x01);
                    delay_us(10);
            }
    }



    void init_lcd(void)
    {
            delay_us(3);
            Lcd_w_com(0x34);
            delay_ms(5);
            Lcd_w_com(0x30);
            delay_ms(5);
            Lcd_w_com(0x0c);
            delay_ms(5);
            Lcd_w_com(0x01);
            delay_ms(5);
    }

    void Lcd_w_com(char data)
    {
            CLR_CS;
            SET_CS;
            CLR_SCK;
            SET_SID;
            delay_us(10);
            w_byte(0xf8);
            w_byte(data&0xf0);
            w_byte(data<<4);
            delay_ms(1);
            CLR_CS;
           
    }

    void Lcd_w_dat(char data)
    {
                    CLR_CS;
                    SET_CS;
                    CLR_SCK;
                    SET_SID;
                    delay_us(10);
                    w_byte(0xfa);
                    w_byte(data&0xf0);
                    w_byte(data<<4);
                    delay_ms(1);
                    CLR_CS;
    }

    驱动写好了,其它的就简单了。
    image1.jpg
    image2.jpg
    image3.jpg
    image4.jpg


    这是主程序一部分
    const char dis1[]={"    爱板网      "};
    const char dis2[]={"Ateml 评估套件  "};
    const char dis3[]={"  用户:昱枫    "};
    const char dis4[]={"SAM4N_X_PLAINED "};
    const char dis5[]={"  THANK  YOU    "};
    int main(void)
    {
            sysclk_init();
            board_init();

        init_lcd();
            clr_screen();
           
            while(1)
            {
           
                   
            clr_screen();
            Lcd_w_com(0x80);
            for(s=0;s<16;s++)
            {
                    Lcd_w_dat(dis1);
            }
            Lcd_w_com(0x34);
            delay_us(10);
            Lcd_w_com(0x04);
           
            Lcd_w_com(0x30);
           
            Lcd_w_com(0x90);
            for(s=0;s<16;s++)
            {
                    Lcd_w_dat(dis2);
            }
            Lcd_w_com(0x88);
            for(s=0;s<16;s++)
            {
                    Lcd_w_dat(dis3);
            }
            Lcd_w_com(0x98);
            for(s=0;s<16;s++)
            {
                    Lcd_w_dat(dis4);
            }
           
            delay_s(5);
            lcdflag();
           
                    //clr_screen();
                    //Lcd_w_com(0x34);
                   
                    //Lcd_w_com(0x04);
                    //Lcd_w_com(0x05);
                    //Lcd_w_com(0x06);
                    //Lcd_w_com(0x07);
                    //delay_s(5);
                    clr_screen();
                   
                    Lcd_w_com(0x80);
                    for(s=0;s<16;s++)
                    {
                            Lcd_w_dat(0x30+s);
                    }
                    Lcd_w_com(0x90);
                    for(s=0;s<16;s++)
                    {
                            Lcd_w_dat(0x40+s);
                    }
                    Lcd_w_com(0x88);
                    for(s=0;s<16;s++)
                    {
                            Lcd_w_dat(0x50+s);
                    }
                    Lcd_w_com(0x98);
                    for(s=0;s<16;s++)
                    {
                            Lcd_w_dat(0x60+s);
                    }
                    delay_s(5);
                    lcdflag();
           
            clr_screen();
           
            photodis(bmp);
            delay_s(5);
            clr_screen();
           
            Lcd_w_com(0x80);
            for (s=0;s<16;s++)
            {
                    Lcd_w_dat(dis5);
            }
            Lcd_w_com(0x90);
            for (s=0;s<16;s++)
            {
                    Lcd_w_dat(0xd0+s);
            }
            Lcd_w_com(0x88);
            for (s=0;s<16;s++)
            {
                    Lcd_w_dat(0xb0+s);
            }
            Lcd_w_com(0x98);
            for (s=0;s<16;s++)
            {
                    Lcd_w_dat(0xc0+s);
            }
            delay_s(5);
            clr_screen();
           
            }

    }
    这里我设置A11,A12,A13端口设置为输出是在board_init()函数里面设置的

    下面是相关视频和相应程序

    Lcd12864串行驱动.rar (3.88 KB, 下载次数: 1)
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-10-26 08:17:10 | 显示全部楼层
    顶一个~~~~~~~~~~~~·
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 23:36 , Processed in 0.120957 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.