历史上的今天
返回首页

历史上的今天

今天是:2025年06月20日(星期五)

正在发生

2020年06月20日 | 课程作业记录6:MSP430G2553+LCD1602字符滚动

2020-06-20 来源:eefocus

首先,这次实验设计中我们实现的是在LCD1602上进行的字符滚动,用的单片机是MSP430G2553,跑的软件是CCS。是一个非常简单的程序设计,但是我C语言和单片机这部分都学得很差哈哈,放上来给大家参考参考,同时鼓舞一下大家的信心。


软件程序部分


该程序主要由主程序源程序main.c、子程序源程序LCD.c和子程序头文件LCD.h构成。采用这种程序结构,使程序更加清晰,一目了然,减少程序错误的机会,增强了程序的可移植性。在程序设计中MSP430G2553中P1口作为并行数据输出端,P2.0、P2.1、P2.2分别作为LCD1602液晶的RS、RW、E端。


1)主函数main.c


#include

#include "LCD.h"


#define uint unsigned int

#define uchar unsigned char


void main(void)

  {

    WDTCTL = WDTPW | WDTHOLD;

    P1DIR=0xff;

    P2DIR=0xff;

    uchar *table0="Lanzhou         ";

    uchar *table1="University      ";

    while(1)

    {

        Display(table0,table1);

        Delay_1s();

        Cycling(table0,table1);

    }

      }


2)子函数LCD.c


#include

#include"LCD.h"


#define uint unsigned int

#define uchar unsigned char


//延时1ms程序

void Delay_1ms(void)

{

    uchar i,j;

    for(i=0;i<10;i++)

    {

        for(j=0;j<20;j++);

    }

}


//延时1s程序

void Delay_1s(void)

{

    int i,j;

    for(i=0;i<100;i++)

    {

        for(j=0;j<1000;j++);

    }

}


//液晶显示程序

void Display(uchar *table0,uchar *table1)

{

    uchar i,j;//定义计数值

    Reset();//初始化


    Instruction(0x80);//写指令

    for(i=0;i<16;i++)//发送数据第一行

    {

        DataWrite(table0[i]);

    }

    Instruction(0xc0);

    for(j=0;j<16;j++)//发送数据第二行

    {

        DataWrite(table1[j]);

    }

}


//循环显示程序

void Cycling(uchar *table0,uchar *table1)

{

    int m,n;

    //当一次循环完成时,跳回到初始状态

    for (n=0;n<17;n++)

    {

        if (n==16)

                {

                    uchar *table0="Lanzhou         ";

                    uchar *table1="University      ";

                }

        else

        {

                for(m=1;m<16;m++)

                {

                    table0[m-1]=table0[m];

                    table1[m-1]=table1[m];

                    table0[15]=" ";

                    table1[15]=" ";

                }//移位循环程序

        }

    }

}


//查询忙碌标志信号程序

void Busy(void)

{

    do

    {

        CLR_EN;

        SET_RW;

        CLR_RS;

        SET_EN;

        busy=dat;

        CLR_EN;

        Delay_1ms();

    }

    while(busy&&0x80==1);

}


//写指令到LCM程序

void Instruction(uchar a)

{

    Busy();

    CLR_EN;

    CLR_RW;

    CLR_RS;

    SET_EN;

    dat=a;

    CLR_EN;

}


//写数据到LCM程序

void DataWrite(uchar a)

{

    Busy();

    CLR_EN;

    CLR_RW;

    SET_RS;

    SET_EN;

    P1OUT=a;

    CLR_EN;

}


//启动LCM程序

void Reset(void)

{

    Instruction(0x38);

    Instruction(0x0c);

    Instruction(0x06);

}


3)子函数头文件LCD.h


#define uchar unsigned char

#define dat P1OUT

#define CLR_RS P2OUT&=~BIT0;//RS=P2.0

#define SET_RS P2OUT|=BIT0;

#define CLR_RW P2OUT&=~BIT1;//RW=P2.1

#define SET_RW P2OUT|=BIT1;

#define CLR_EN P2OUT&=~BIT2;//EN=P2.2

#define SET_EN P2OUT|=BIT2;

uchar busy;

void Delay_1ms(void);//延时程序

void Delay_1s(void);//延时程序

void Display(uchar* table0,uchar* table1);//显示程序

void Cycling(uchar *table0,uchar *table1);//循环程序

void Busy(void);//液晶查忙程序

void DataWrite(uchar a);//液晶写数据程序

void Reset(void);//液晶初始化

void Instruction(uchar a);//液晶写指令程序


硬件部分:

在这里插入图片描述

我画的图,大家按这张图连应该没问题的嗷,嘿嘿。

推荐阅读

史海拾趣

Barkston Plastics Engineering Ltd.公司的发展小趣事

面对国内市场的饱和,Barkston Plastics Engineering Ltd.开始寻求国际化发展的道路。然而,国际市场环境的复杂性和文化差异给公司带来了诸多挑战。在经历了一系列的市场调研和风险评估后,Barkston成功打入欧洲市场,通过与当地企业的合作,逐步扩大了其国际影响力。这一国际化发展进程不仅为公司带来了更广阔的市场空间,也提升了其在全球电子行业中的地位。

DSMI Electronics SA公司的发展小趣事

随着技术的不断进步和市场需求的增长,DSMI Electronics SA公司开始寻求与国际知名品牌的合作。通过与多家国际大公司的合作,DSMI不仅提升了自身的技术水平和生产能力,还扩大了市场份额。特别是在嵌入式系统领域,DSMI的产品得到了广泛应用,成为了行业内的重要供应商之一。

Crameda Intersys公司的发展小趣事

作为一家有社会责任感的企业,Crameda Intersys公司不仅关注自身的经济效益,还积极履行社会责任。公司积极参与公益事业,支持教育、环保等领域的发展。同时,公司还注重环保和可持续发展,通过采用环保材料和节能技术,降低生产过程中的能耗和排放。这些举措不仅提升了公司的社会形象,也为社会的可持续发展做出了积极贡献。

这五个故事只是Crameda Intersys公司发展历程中的一部分,但它们足以展现出公司在电子行业中的成长轨迹和不懈追求。在未来的发展中,Crameda Intersys公司将继续以技术创新为引领,积极拓展市场渠道,培养更多优秀人才,加强质量管理和社会责任履行,为电子行业的发展贡献更多的力量。

CLAIREX公司的发展小趣事

Clairex Technologies成立于1993年,当时的市场上,航空电子部件的供应存在着严重的质量问题。老David Catter和一位商业伙伴发现了这一商机,他们提议改进并供应财富500强公司通用航空航空电子部门所需的零件。然而,创业的道路并非一帆风顺。他们面临着资金短缺、技术难题以及市场竞争激烈等多重挑战。但凭借对技术的深入理解和不懈的努力,Clairex团队成功设计出了一款性能卓越的光电导体,并在得克萨斯州普莱诺开始了生产。这一创新产品很快便赢得了市场的认可,为Clairex的发展奠定了坚实的基础。

Curtis Electromusic Specialties Inc公司的发展小趣事

CUI公司在发展过程中,始终注重市场拓展和品牌建设。公司通过与国内外知名企业的合作,不断拓宽产品应用领域,提升品牌影响力。同时,公司还积极参加各类行业展会和交流活动,与同行和客户建立紧密的合作关系,为公司的长期发展奠定了坚实的基础。

ETC2公司的发展小趣事

ETC2公司自创立之初,就专注于ETC技术的研发与创新。他们发现传统ETC系统存在信号识别率低、数据传输速度慢等问题,于是投入大量研发资源,成功开发出了新一代ETC设备。这款设备采用了先进的无线通信技术和高速数据处理芯片,大幅提升了信号识别率和数据传输速度,为高速公路收费系统带来了革命性的变革。ETC2公司的技术创新不仅赢得了市场的认可,也为其在电子行业中树立了良好的口碑。

问答坊 | AI 解惑

求简易数控直流电源

本帖最后由 paulhyde 于 2014-9-15 09:43 编辑 求简易数控直流电源论文  …

查看全部问答>

第三代研发管理模式:中国企业的必然选择

中国是人口最多,经济成长最快速的发展中国家。许多经济学家预测,中国大陆的GDP可能在20年内赶上美国,中国品牌的产品将普遍出现在全球市场上。虽然外界对于中国未来的预测是令国人兴奋的,不过现实上中国企业的生产力与国际竞争力正陷入持续成长 ...…

查看全部问答>

Verilog HDL UART

如题 很多给出的代码 没有过采样 本UART 测试过 稍作修改 就可以 用作它用! 时钟 源代码 [qq] 381312581 [/qq]…

查看全部问答>

关于主从通信

最近兄弟我在研究主机与从机的通信问题。碰到点问题想请教下各位大侠:   1、初步估计主从机之间通信机制不会涉及很复杂的协议,正常情况下,主从相连后,会有正常的菜单显示   2、主从机有三个触点相连,在从机上电时会在四 ...…

查看全部问答>

求助:第一个自写驱动 编译出错

我按着周立功的书做的,例如: 1.在C:\\WINCE500\\PLATFORM\\SMDK2410\\SRC\\DRIVERS\\目录下创建SimpleDriver目录; 2.C:\\WINCE500\\PLATFORM\\SMDK2410\\SRC\\DRIVERS\\GPIO目录下复制makefile文件到SimpleDriver目录;(我没有找到GPIO目录, ...…

查看全部问答>

PROTEL 99SE不能正常使用!

大家好!我安好了PROTEL 99SE并升级了SP6,但为什么新建时打不开呢?弹出一个对话框:root has been delete!各位大虾,这是个么子情况呢?求教,谢谢啦! …

查看全部问答>

【问TI】请问1138不起振问题

请问我画完PCB后,确认没有连线没有问题,然后焊板子,出来后发现有时候不起振,也就是不上电,请问这是什么原因呢?是改变布局有影响的原因吗?…

查看全部问答>

如何把数据写入EPCS中

我想把图片数据写入epcs的flash中 然后用fpga读取 VGA显示   但是我如何把图片的数据写入EPCS中 求指导!!…

查看全部问答>

谈谈嵌入式系统的可靠性(四)

降低模块间耦合,提高应用程序可靠性     另一个会严重降低应用程序可靠性的地方,就是模块间互相耦合,搅在一起。搅在一起的代码,就像一盘意大利面条,又杂又乱,如果代码写成这样的话,可靠性要高,上帝都会笑。    那么, ...…

查看全部问答>

新手第一次提问,真心调试了几天,有bug解决不了,求助!

硬件为MSP430G2553,小弟大一,还没有数电和模电基础,硬学试试。 麻烦先看看要求: 1.AD 模块的使用 使用内部ADC 模块持续测量一个外部电压(0—2.5V ) 2.定时器模块的使用 用 1  中测量的电压值决定两个 LED  中一 ...…

查看全部问答>