• 美国的本质和终极目的决定,和中国必定是始终不断战事硝烟。 2019-06-15
  • 端午将至,我们更加要严格自律,不能趁过节之际搞吃喝送礼、公车私用、公款旅游等,要严防不正之风反弹回潮。做好自己的分内之事,安分守己,加强自我管理和监督,严格遵守 2019-06-15
  • 熊猫启航计划即将启动 让世界聆听大熊猫声音 2019-06-03
  • 尽管管理层一任一任地换,但是以每年IPO数量的多少作为反映政绩的主要标志,而对于股市下跌、市值(包括国有股)损失、经济晴雨表失真、投资者利益巨亏等等,则不在考核 2019-05-31
  • 打倒控房抄者有理,去分房好! 2019-05-26
  • 90后女生抛下帝都生活 仅花了6万元建了一幢别墅! ——凤凰网房产 2019-05-26
  • 陈全国在新疆果业集团调研 2019-05-21
  • “神剧”不再横行,抗战剧回到正轨 2019-05-18
  • 【专题】打一场扶贫攻坚硬仗 河北在行动 2019-05-16
  • 河北千名贫困儿童脊椎健康救助公益活动正式启动 2019-04-23
  • “四好农村路”助力乡村振兴 城市道路增亮让回家路更明亮 2019-04-20
  • 中纪委:有干部不信马列信鬼神 触犯纪律信小圈子 2019-04-20
  • 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 快乐12基本走势图:社区导航

     

    广东十一选五开奖图

    搜索
    查看: 876|回复: 6
    打印 上一主题 下一主题

    [分享] LCD1602动态显示--基于MSP430F149单片机

    [复制链接]

    广东十一选五开奖图 www.guu6.com 4975

    TA的帖子

    19

    TA的资源

    一粒金砂(高级)

    Rank: 3Rank: 3

    跳转到指定楼层
    楼主
    发表于 2019-3-12 08:46 | 只看该作者 |倒序浏览 |阅读模式
    main.c


    /***************************************************
    程序功能:动态显示文字“welcome!”
    ----------------------------------------------------
    测试说明:观察液晶显示
    ****************************************************/
    #include  
    #include  "Cry1602.h"
    #define uchar unsigned char
    uchar *s1 = "welcome!";


    void main( void )
    {
        uchar i;
        WDTCTL = WDT_ADLY_250;               //间隔定时器,定时16ms


        LcdReset();
        DispStr(4,0,s1);
        LocateXY(0,9);                      //确定写入字符的显示位置
        LcdWriteCommand(0x07, 1);           //整体显示左移
        for(i = 12; i > 0; i--)
        {
            LcdWriteData(0x20);
            //延时250ms
            IFG1 &= ~WDTIFG;
            while(!(IFG1 & WDTIFG));
            IFG1 &= ~WDTIFG;
        }
        while(1)
        {
            LcdWriteCommand(0x05, 1);           //整体显示右移


            for(i = 24; i > 0; i--)  
            {
                LcdWriteData(0x20);
                //延时250ms
                IFG1 &= ~WDTIFG;
                while(!(IFG1 & WDTIFG));
                IFG1 &= ~WDTIFG;
            }




            LcdWriteCommand(0x07, 1);           //整体显示左移


            for(i = 24; i > 0; i--)
            {
                LcdWriteData(0x20);
                //延时250ms
                IFG1 &= ~WDTIFG;
                while(!(IFG1 & WDTIFG));
                IFG1 &= ~WDTIFG;
            }
        }   
    }


    cry1602.h


    void DispStr(unsigned char x,unsigned char y,unsigned char *ptr);
    void DispNChar(unsigned char x,unsigned char y, unsigned char n,unsigned char *ptr);
    void LocateXY(unsigned char x,unsigned char y);
    void Disp1Char(unsigned char x,unsigned char y,unsigned char data);
    void LcdReset(void);
    void LcdWriteCommand(unsigned char cmd,unsigned char chk);
    void LcdWriteData( unsigned char data );
    void WaitForEnable(void);
    void Delay5ms(void);


    cry1602.c


    #include
    #include "cry1602.h"
    typedef unsigned char uchar;
    typedef unsigned int  uint;


    /**************宏定义***************/
    #define DataDir     P4DIR
    #define DataPort    P4OUT               
    #define Busy        0x80
    #define CtrlDir     P3DIR
    #define CLR_RS P3OUT&=~BIT0;    //RS = P3.0   
    #define SET_RS P3OUT|=BIT0;
    #define CLR_RW P3OUT&=~BIT1;   //RW = P3.1
    #define SET_RW P3OUT|=BIT1;
    #define CLR_EN P3OUT&=~BIT2;   //EN = P3.2
    #define SET_EN P3OUT|=BIT2;
    /***********************************************
    函数名称:DispStr
    功    能:让液晶从某个位置起连续显示一个字符串
    参    数:x--位置的列坐标
              y--位置的行坐标
              ptr--指向字符串存放位置的指针
    返回值  :无
    ***********************************************/
    void DispStr(uchar x,uchar y,uchar *ptr)
    {
        uchar *temp;
        uchar i,n = 0;


        temp = ptr;
        while(*ptr++ != '\0')   n++;    //计算字符串有效字符的个数


        for (i=0;i
        {
            Disp1Char(x++,y,temp);
            if (x == 0x0f)
            {
               x  = 0;
               y ^= 1;
            }
        }
    }
    /*******************************************
    函数名称:DispNchar
    功    能:让液晶从某个位置起连续显示N个字符
    参    数:x--位置的列坐标
              y--位置的行坐标
              n--字符个数
              ptr--指向字符存放位置的指针
    返回值  :无
    ********************************************/
    void DispNChar(uchar x,uchar y, uchar n,uchar *ptr)
    {
        uchar i;


        for (i=0;i
        {
            Disp1Char(x++,y,ptr);
            if (x == 0x0f)
            {
               x = 0;
            y ^= 1;
            }
        }
    }
    /*******************************************
    函数名称:LocateXY
    功    能:向液晶输入显示字符位置的坐标信息
    参    数:x--位置的列坐标
              y--位置的行坐标
    返回值  :无
    ********************************************/
    void LocateXY(uchar x,uchar y)
    {
        uchar temp;


        temp = x&0x0f;
        y &= 0x01;
        if(y)   temp |= 0x40;  //如果在第2行
        temp |= 0x80;


        LcdWriteCommand(temp,1);
    }
    /*******************************************
    函数名称:Disp1Char
    功    能:在某个位置显示一个字符
    参    数:x--位置的列坐标
              y--位置的行坐标
              data--显示的字符数据
    返回值  :无
    ********************************************/
    void Disp1Char(uchar x,uchar y,uchar data)
    {
        LocateXY( x, y );           
        LcdWriteData( data );      
    }
    /*******************************************
    函数名称:LcdReset
    功    能:对1602液晶??榻懈次徊僮?/font>
    参    数:无
    返回值  :无
    ********************************************/
    void LcdReset(void)
    {
        CtrlDir |= 0x07;                 //控制线端口设为输出状态
        DataDir  = 0xFF;                 //数据端口设为输出状态


        LcdWriteCommand(0x38, 0);       //规定的复位操作
        Delay5ms();
        LcdWriteCommand(0x38, 0);      
        Delay5ms();
        LcdWriteCommand(0x38, 0);
        Delay5ms();


        LcdWriteCommand(0x38, 1);       //显示模式设置
        LcdWriteCommand(0x08, 1);       //显示关闭
        LcdWriteCommand(0x01, 1);       //显示清屏
        LcdWriteCommand(0x06, 1);       //写字符时整体不移动
        LcdWriteCommand(0x0c, 1);       //显示开,不开游标,不闪烁
    }
    /*******************************************
    函数名称:LcdWriteCommand
    功    能:向液晶??樾慈朊?/font>
    参    数:cmd--命令,
              chk--是否判忙的标志,1:判忙,0:不判
    返回值  :无
    ********************************************/
    void LcdWriteCommand(uchar cmd,uchar chk)
    {


        if (chk) WaitForEnable();   // 检测忙信号?


        CLR_RS;
        CLR_RW;
        _NOP();


        DataPort = cmd;             //将命令字写入数据端口
        _NOP();                 


        SET_EN;                     //产生使能脉冲信号
        _NOP();
        _NOP();
        CLR_EN;         
    }


    /*******************************************
    函数名称:LcdWriteData
    功    能:向液晶显示的当前地址写入显示数据
    参    数:data--显示字符数据
    返回值  :无
    ********************************************/
    void LcdWriteData( uchar data )
    {
        WaitForEnable();        //等待液晶不忙


        SET_RS;
        CLR_RW;
        _NOP();


        DataPort = data;        //将显示数据写入数据端口
        _NOP();


        SET_EN;                 //产生使能脉冲信号
        _NOP();
        _NOP();
        CLR_EN;     
    }
    /*******************************************
    函数名称:WaitForEnable
    功    能:等待1602液晶完成内部操作
    参    数:无
    返回值  :无
    ********************************************/
    void WaitForEnable(void)
    {
        P4DIR &= 0x00;  //将P4口切换为输入状态


        CLR_RS;
        SET_RW;
        _NOP();
        SET_EN;
        _NOP();
        _NOP();


        while((P4IN & Busy)!=0);  //检测忙标志


        CLR_EN;


        P4DIR |= 0xFF;  //将P4口切换为输出状态
    }   


    /*******************************************
    函数名称:Delay5ms
    功    能:延时约5ms
    参    数:无
    返回值  :无
    ********************************************/
    void Delay5ms(void)
    {
        uint i=40000;
        while (i != 0)
        {
            i--;
        }
    }



    8

    TA的帖子

    1

    TA的资源

    一粒金砂(初级)

    Rank: 1

    沙发
    发表于 2019-3-12 09:19 | 只看该作者
    谢谢分享


    1343

    TA的帖子

    6

    TA的资源

    版主

    Rank: 6Rank: 6

    板凳
    发表于 2019-3-12 13:18 | 只看该作者
    1) 首先谢谢楼主分享
    2) 超过1ms的延时,可以做成定时事件轮询或配合消息机制,最好不要用while(!(IFG1 & WDTIFG));这种死等待的方式,这种方式没有实时性可谈,特别是系统比较大时,功能比较多时,结果不堪设想

    点评

    这个程序里,还真是需要死等,不过这个延时时间可以根据实测结果适当缩短  详情 回复 发表于 2019-3-14 11:39
    专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void


    828

    TA的帖子

    0

    TA的资源

    纯净的硅(中级)

    Rank: 5Rank: 5

    4
    发表于 2019-3-12 14:52 | 只看该作者
    感谢分享,学习学习~~
    存储芯片/MCU/SRAM/PSRAM/DDR/FLASH/MRAM。web.www.sramsun.com  QQ3161422826 TEL:13751192923


    7492

    TA的帖子

    4948

    TA的资源

    版主

    Rank: 6Rank: 6

    资源大师勋章

    5
    发表于 2019-3-14 11:39 | 只看该作者
    懒猫爱飞 发表于 2019-3-12 13:18
    1) 首先谢谢楼主分享
    2) 超过1ms的延时,可以做成定时事件轮询或配合消息机制,最好不要用while(!(IFG1  ...

    这个程序里,还真是需要死等,不过这个延时时间可以根据实测结果适当缩短

    点评

    1) 死等不死等主要看程序架构, 2) 你要以把程序写成死等,然后处理下一步 3) 我也可以做成状态机,配合定时器使用,分不同的步骤(状态)去执行,照样可以完成  详情 回复 发表于 2019-3-14 15:05


    1343

    TA的帖子

    6

    TA的资源

    版主

    Rank: 6Rank: 6

    6
    发表于 2019-3-14 15:05 | 只看该作者
    tiankai001 发表于 2019-3-14 11:39
    这个程序里,还真是需要死等,不过这个延时时间可以根据实测结果适当缩短

    1) 死等不死等主要看程序架构,
    2) 你要以把程序写成死等,然后处理下一步
    3) 我也可以做成状态机,配合定时器使用,分不同的步骤(状态)去执行,照样可以完成
    专注智能产品的研究与开发,专注于电子电路的生产与制造……QQ:2912615383,电子爱好者群: void


    1

    TA的帖子

    0

    TA的资源

    一粒金砂(初级)

    Rank: 1

    7
    发表于 2019-3-14 20:47 | 只看该作者
    恩?为啥我LCD没有显示呀,编译是没错的,你们都可以用吗


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

    • 论坛活动 E手掌握

      扫码关注
      EEWORLD 官方微信

    • EE福利  唾手可得

      扫码关注
      EE福利 唾手可得

    Archiver|手机版|小黑屋|广东十一选五开奖图 ( 京ICP证 060456 )

    GMT+8, 2019-6-19 14:09 , Processed in 0.244776 second(s), 17 queries , Gzip On, MemCache On.

    快速回复 广东十一选五开奖图 返回列表
  • 美国的本质和终极目的决定,和中国必定是始终不断战事硝烟。 2019-06-15
  • 端午将至,我们更加要严格自律,不能趁过节之际搞吃喝送礼、公车私用、公款旅游等,要严防不正之风反弹回潮。做好自己的分内之事,安分守己,加强自我管理和监督,严格遵守 2019-06-15
  • 熊猫启航计划即将启动 让世界聆听大熊猫声音 2019-06-03
  • 尽管管理层一任一任地换,但是以每年IPO数量的多少作为反映政绩的主要标志,而对于股市下跌、市值(包括国有股)损失、经济晴雨表失真、投资者利益巨亏等等,则不在考核 2019-05-31
  • 打倒控房抄者有理,去分房好! 2019-05-26
  • 90后女生抛下帝都生活 仅花了6万元建了一幢别墅! ——凤凰网房产 2019-05-26
  • 陈全国在新疆果业集团调研 2019-05-21
  • “神剧”不再横行,抗战剧回到正轨 2019-05-18
  • 【专题】打一场扶贫攻坚硬仗 河北在行动 2019-05-16
  • 河北千名贫困儿童脊椎健康救助公益活动正式启动 2019-04-23
  • “四好农村路”助力乡村振兴 城市道路增亮让回家路更明亮 2019-04-20
  • 中纪委:有干部不信马列信鬼神 触犯纪律信小圈子 2019-04-20
  • 鸟瞰“中国围屋之乡” 造型独特如城堡 2019-04-16
  • 先想好如何处理可能的危害,要有经济“卫国战争”的准备,要将困难多设想一点,想到了就不会很被动。 2019-04-16
  • 实现中华民族伟大复兴是近代以来中华民族最伟大的梦想(认真学习宣传贯彻党的十九大精神) 2019-04-13
  • 顶上娱乐城 东方珍兽什么时候好打 多特蒙德vs拜仁慕尼黑视频直播 中岸水手vs墨尔本胜利 平安彩票秒速时时彩 河南快三购买规则 广东十一选五直播开奖结果查询 2019守护幸福六肖中特图片 热血传奇十五周年 球球大作战教程 北京赛车pk10玩法教学 港式五张怎么玩 最新湖北30选5开奖 御龙在天扇子技能加点 墨尔本胜利恒大 福彩3d开奖结果