1676|4

3

帖子

0

资源

一粒金砂(初级)

基于MSP430G2553的LCD1602问题,求教

这是一段MSP430G2553做出来的LCD1602的字符循环显示程序,有两个问题,第一个是现在字符循环速度太快了,怎么把循环速度改慢;第二个问题是,怎么改能去掉循环显示,只在屏幕上显示不移动的字符,在线等,谢了。
主程序
#include
#include "cry1602.h"
#define uchar unsigned char
uchar *s1 = "mmmmmmmmmmmmmmmmmmmmmm";
void main(void)
{
    WDTCTL = WDT_ADLY_250;
    uchar *s2;
    uchar j,k,l;
    uchar i = 0;
    s2 = s1;
    LcdReset();
    while(*s1++ != '\0') i++;
    while(1)
    {
        for(j = 0;j < i;j++)
    {
        l = j;
        for(k = 0;k < 16;k++)
        {
            if(l < i)
            Disp1Char(k,0,s2[l++]);
            else
            Disp1Char(k,0,' ');
        }
        IFG1 &= ~WDTIFG;
        IFG1 &= ~WDTIFG;
        IFG1 &= ~WDTIFG;
        }
    }
}
子程序
#include
#include"cry1602.h"
/*宏定义*/
#define datadir P1DIR
#define dataport P1OUT
#define busy 0x80
#define ctrldir P2DIR
#define CLR_RS P2OUT &= ~BIT0;
#define SET_RS P2OUT |= BIT0;
#define CLR_RW P2OUT &= ~BIT1;
#define SET_RW P2OUT |= BIT1;
#define CLR_EN P2OUT &= ~BIT2;
#define SET_EN P2OUT |= BIT2;
/*让液晶从某个位置起连续显示一个字符串*/
void DispStr(uchar x,uchar y,uchar *ptr)
{
    uchar*temp;
    uchari,n = 0;
    temp= ptr;
    while(*ptr++ != '\0') n++;
    for(i = 0; i < n; i++)
    {
        Disp1Char(x++,y,temp[i]);
        if(x == 0x0f)
        {
            x=0;
            y^=1;
        }
    }
/*让液晶从某个位置起连续显示一个字符串*/
    void DispNChar(ucharx,uchar y,uchar n,uchar *ptr)
    {
        uchari;
        for(i = 0; i < n; i++)
        {
            Disp1Char(x++,y,ptr[i]);
            if(x == 0x0f)
            {
                x=0;
                y^=1;
            }
        }
    }
/*向液晶输入显示字符位置的坐标信息*/
    void LocateXY(ucharx,uchar y)
    {
        uchartemp;
        temp= x&0x0f;
        y&= 0x01;
        if(y)
            temp|= 0x40;
        temp|= 0x80;
        LcdWriteCommand(temp,1);
    }
/*在某个位置显示一个字符*/
    void Disp1Char(ucharx,uchar y,uchar data)
    {
        LocateXY(x,y);
        LcdWriteData(data);
    }
/*对1602液晶模块进行复位操作*/   
    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);
    }
/*向液晶模块写入命令*/
    void LcdWriteCommand(ucharcmd,uchar chk)
    {
        if(chk) WaitForEnable();
        CLR_RS;
        CLR_RW;
        _NOP();
        dataport= cmd;
        _NOP();
        SET_EN;
        _NOP();
        _NOP();
        CLR_EN;
    }
/*向液晶显示的当前地址写入显示数据*/
    void LcdWriteData(uchardata)
    {
        WaitForEnable();
        SET_RS;
        CLR_RW;
        _NOP();
        dataport= data;
        _NOP();
        SET_EN;
        _NOP();
        _NOP();
        CLR_EN;
    }
/*等待1602液晶完成内部操作*/
    void WaitForEnable(void)
    {
        P1DIR&= 0X00;
        CLR_RS;
        SET_RW;
        _NOP();
        SET_EN;
        _NOP();
        _NOP();
        while((P1IN & busy) !=0);
        CLR_EN;
        P1DIR|= 0xff;
    }
/*延时约5ms*/
    void Delay5ms(void)
    {
        uinti = 40000;
        while(i != 0)
        {
            i--;
        }
    }
}

回复

1777

帖子

0

资源

五彩晶圆(初级)

第一个问题,增加循环延时时间,第二个问题,去掉循环显示的代码

点评

问题是代码怎么改呢  详情 回复 发表于 2014-11-20 20:00

回复

3

帖子

0

资源

一粒金砂(初级)

bobde163 发表于 2014-11-20 19:59
第一个问题,增加循环延时时间,第二个问题,去掉循环显示的代码

问题是代码怎么改呢

点评

既然是要学习,可以先慢慢地把代码看懂,再改不迟  详情 回复 发表于 2014-11-20 21:16

回复

1777

帖子

0

资源

五彩晶圆(初级)

35646016 发表于 2014-11-20 20:00
问题是代码怎么改呢

既然是要学习,可以先慢慢地把代码看懂,再改不迟

回复

97

帖子

2

资源

一粒金砂(中级)

第一个问题可以修改延时函数哦!第二个问题可以去掉显示函数!
/*延时约5ms*/
    void Delay5ms(void)
    {
        uinti = 40000;
        while(i != 0)
        {
            i--;
        }
    }

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

关闭
站长推荐上一条 1/3 下一条

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表