查看: 6574|回复: 9

[大赛作品提交] LaunchPad 修改12864串口驱动程序

  [复制链接]
  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-8-23 10:36:42 | 显示全部楼层 |阅读模式
    分享到:
    主函数main.c#include <msp430g2553.h>
    #include"LCD12864P.h"

    void main()
    {
            WDTCTL = WDTPW + WDTHOLD;
            Ini_Lcd();
               lcd_pos(1,0);
               Disp_HZ("液晶12864",5);
               lcd_pos(3,4);
               Disp_HZ("欢迎使用",4);
               lcd_pos(2,3);
               Disp_SZ(0);
               Disp_SZ(3);
        while(1);
    }

    LCD12864P.c
    #include<msp430g2553.h>
    #define BIT(x)        (1 << (x))
    #define uint unsigned int
    #define uchar unsigned char
    uchar LCD_table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};//0123456789

    void Send(uchar type,uchar transdata);

    #define cyCS      0    //P1.0,片选信号
    #define cySID     1    //P1.1,串行数据
    #define cyCLK     2    //P1.2,同步时钟
    #define cyPORT    P1OUT
    #define cyDDR     P1DIR

    void delay_1ms()
    {
            uint i;
            for(i=0;i<1140;i++);
    }

    void delay_nms(uint n)
    {
        uint i = 0;
        for(i = n;i > 0;i--)
            delay_1ms();
    }

    void Ini_Lcd(void)
    {
            cyDDR |= BIT(cyCLK) + BIT(cySID) + BIT(cyCS);   //相应的位端口设置为输出
            delay_nms(600);                 //延时等待液晶完成复位
            Send(0,0x30);  /*功能设置:一次送8位数据,基本指令集*/
            delay_nms(10);
            Send(0,0x02);  /*DDRAM地址归位*/
            delay_nms(5);
            Send(0,0x0c);  /*显示设定:开显示,不显示光标,不做当前显示位反白闪动*/
            delay_nms(5);
            Send(0,0x01);  /*清屏,将DDRAM的位址计数器调整为“00H”*/
            delay_nms(500);
            Send(0,0x06);  /*功能设置,点设定:显示字符/光标从左到右移位,DDRAM地址加1*/
            delay_nms(10);
    }

    void Send(uchar type,uchar transdata)//0-写控制命令,1-写数据
    {
            uchar firstbyte = 0xf8;
            uchar temp;
            uchar i,j = 3;

            if(type) firstbyte |= 0x02;

            cyPORT |= BIT(cyCS);
            cyPORT &= ~BIT(cyCLK);
            while(j > 0)
            {
                    if(j == 3) temp = firstbyte;
                    else if(j == 2) temp = transdata&0xf0;
                    else  temp = (transdata << 4) & 0xf0;

                    for(i = 8;i > 0;i--)
                    {
                            if(temp & 0x80)        cyPORT |= BIT(cySID);
                            else                        cyPORT &= ~BIT(cySID);
                            cyPORT |= BIT(cyCLK);
                            temp <<= 1;
                            cyPORT &= ~BIT(cyCLK);
                    }
                    //三个字节之间一定要有足够的延时,否则易出现时序问题
                    if(j == 3)        delay_nms(1);
                    else               delay_nms(1);

                    j--;
            }

            cyPORT &= ~BIT(cySID);
            cyPORT &= ~BIT(cyCS);
    }

    void lcd_pos(uchar x,uchar y)//定位
    {
             uchar pos;
              switch(x)
              {
                case 1:pos=0x80;break;
                case 2:pos=0x90;break;
                case 3:pos=0x88;break;
                case 4:pos=0x98;break;
                default:pos=0x80;
              }
              pos += y;
              Send(0,pos);
    }

    void Disp_HZ(const uchar * pt,uchar num)//显示汉字
    {
        uchar i;
               for(i = 0;i < (num*2);i++)
               Send(1,*(pt++));
    }

    void Disp_SZ(uchar shuzi)//显示一个数字
    {
        Send(1,LCD_table[shuzi]);
    }

    LCD12864P.h
    #ifndef LCD12864_H_
    #define LCD12864_H_
    #define uint unsigned int
    #define uchar unsigned char
    extern uchar LCD_table[];//0123456789
    extern void delay_1ms();
    extern void delay_nms(uint n);
    extern void Ini_Lcd(void);
    extern void Send(uchar type,uchar transdata);//0-写控制命令,1-写数据
    extern void lcd_pos(uchar x,uchar y);//定位
    extern void Disp_HZ(const uchar * pt,uchar num);//显示汉字
    extern void Disp_SZ(uchar shuzi);//显示一个数字
    #endif /* LCD12864_H_ */

    180102h9atclvrdd7c7rtr_jpg_thumb.jpg
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-8-25 12:42
  • 签到天数: 692 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2012-8-25 07:27:15 | 显示全部楼层
    改天上传一个自己做的例程,并口的,和大家分享一下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2020-9-28 10:10
  • 签到天数: 1018 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2012-8-25 07:57:01 | 显示全部楼层
    fengye5340 发表于 2012-8-25 07:27
    改天上传一个自己做的例程,并口的,和大家分享一下

    期待你的分享啊!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2013-7-19 23:00
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2013-7-11 22:59:13 | 显示全部楼层
    大神求指导啊,为什么我用的时候,显示屏总是会出乱码呢
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2016-7-28 09:42
  • 签到天数: 292 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-8-18 10:33:36 来自手机 | 显示全部楼层
    说的不错,
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-7-24 09:00
  • 签到天数: 205 天

    连续签到: 1 天

    [LV.7]常住居民III

    发表于 2014-5-26 13:15:38 | 显示全部楼层
    学习了,以前移植只会并口的。。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-12-17 10:55:49 | 显示全部楼层
    你好,请教一下可以不??
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-5-8 23:24:16 | 显示全部楼层
    这个线是怎么连接的啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-5-8 23:25:24 | 显示全部楼层
    求解答,谢谢!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2016-7-15 17:14:27 | 显示全部楼层
    作者,你能把引脚连线的口告知一下吗,不胜感激
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

    手机版|小黑屋|与非网

    GMT+8, 2024-11-20 21:18 , Processed in 0.207258 second(s), 34 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.