MSP430 Launchpad串行/并行12864显示

2019-10-21来源: eefocus关键字:MSP430  串行  并行  12864显示

#include "msp430g2553.h"

#define uint unsigned int

#define uchar unsigned char

 

/*****************************************

 RS--->>P2.0

 RW--->>P2.1

 E---->>P2.2   

 PSB-->>P2.3  

 PAUSE>>P2.4

 RES-->>P2.5

******************************************/

#define DataPort P1OUT        //MCU P2<------> LCM

 

/*

void DelayMs(uint x)

{

    uint a,b;

    for(a=0;a

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

}

*/

 

 

void DelayUs2x(unsigned char t)

{   

 while(--t);

}

 

void DelayMs(unsigned char t)

{

     

 while(t--)

 {

     //大致延时1mS

     DelayUs2x(245);

DelayUs2x(245);

 }

}

 

 

void DelayUs(uint x)

{

    uint a,b;

    for(a=0;a

      for(b=0;b<2;b++);

}

//检测忙位

void Check_Busy()

{  

    P2OUT&=0xFE;     //RS=0

    P2OUT |=0x02;    //RW=1

    P2OUT |=0x04;    //E=1

    DataPort=0xFF;   //

    P1DIR=0x00;     //数据端口设为输入状态

    while((P2IN&0x80)==0x80);//忙则等待

    P1DIR=0xFF;    //数据端口还原为输出状态

    P2OUT&=0xFB;

}

 

/*---------------------写命令------------------------*/

void Write_Cmd(unsigned char Cmd)

{

Check_Busy();

P2OUT&=0xFE;   //RS=0;

P2OUT&=0xFD;  //RW=0;

P2OUT |=0x04;  //E=1;

DataPort=Cmd;

DelayUs(5);

P2OUT&=0xFB;  //E=0;

DelayUs(5);

}

/*------------------------------------------------

                    写数据

------------------------------------------------*/

void Write_Data(unsigned char Data)

{

Check_Busy();

P2OUT |=0x01;     //RS=1;

P2OUT&=0xFD;      //RW=0;

P2OUT |=0x04;      //E=1;

DataPort=Data;

DelayUs(5);

P2OUT&=0xFB;      //E=0;

DelayUs(5);

}

 

void Init_ST7920()

{  

   DelayMs(40);           //大于40MS的延时程序

   P2OUT |=0x08;         //PSB=1;  设置为8BIT并口工作模式

   DelayMs(1);            //延时

   P2OUT&=0xDF;           //RES=0;  复位

   DelayMs(1);            //延时

   P2OUT |=0x20;          //RES=1;    复位置高

   DelayMs(10);

   Write_Cmd(0x30);       //选择基本指令集

   DelayUs(50);         //延时大于100us

   Write_Cmd(0x30);       //选择8bit数据流

   DelayUs(20);         //延时大于37us

   Write_Cmd(0x0c);       //开显示(无游标、不反白)

   DelayUs(50);         //延时大于100us

   Write_Cmd(0x01);       //清除显示,并且设定地址指针为00H

   DelayMs(15);           //延时大于10ms

   Write_Cmd(0x06);       //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位,光标从右向左加1位移动

   DelayUs(50);         //延时大于100us

}

 

/*------------------------------------------------

                   显示字符串

x:横坐标值,范围0~8

y:纵坐标值,范围1~4

------------------------------------------------*/

void LCD_PutString(unsigned char x,unsigned char y,char *s)

 switch(y)

     {

  case 1: Write_Cmd(0x80+x);break;

  case 2: Write_Cmd(0x90+x);break;

  case 3: Write_Cmd(0x88+x);break;

  case 4: Write_Cmd(0x98+x);break;

      default:break;

}

 while(*s>0)

   { 

      Write_Data(*s);

      s++;

      DelayUs(100);  //

   }

}

 

 

int main(void)

{

   

    char* string1="12864LCD Demo";

    char* string2="Demo for Msp430";

    char* string3="Launch pad G2553";

    char* string4="电控》微电》哈哈》";

    WDTCTL = WDTPW + WDTHOLD;//关闭看门狗

    P1DIR=0xFF;//配置P1为输出,作为数据端口

    P2DIR=0xFF;//配置P2为输出,作为控制端口

    Init_ST7920();

    while(1)

    {

   

    LCD_PutString(0,1,string1);

    DelayUs(20);

    LCD_PutString(0,2,string2);

    DelayUs(20);

    LCD_PutString(0,3,string3);

    DelayUs(20);

    LCD_PutString(0,4,string4);

    DelayUs(20);

    }

}

 

/********************************

上边是并行,下边是串行


*******************************/


 


#include  "msp430g2553.h"

 

#define CS1 P1OUT |=0x01

#define CS0 P1OUT &=0x01

#define SID1 P1OUT |=0x02

#define SID0 P1OUT &=~0x02

#define SCLK1 P1OUT |=0x04

#define SCLK0 P1OUT &=~0x04

 

 

void DelayUs2x(unsigned char t)

{   

 while(--t);

}

 

void delay_1ms(unsigned char t)

{

     

 while(t--)

 {

     //大致延时1mS

     DelayUs2x(245);

DelayUs2x(245);

 }

}

 

 

void sendbyte(unsigned char zdata)

{

unsigned int i;

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

{

if((zdata << i) & 0x80)

{

SID1;

}

else

{

SID0;

}

SCLK0;

SCLK1;

}

}

 

void write_com(unsigned char cmdcode)

{

CS1;

sendbyte(0xf8);   //1 1 1 1 RS RW 0   写操作RW=0 11111000写数据 11111010写指令

sendbyte(cmdcode & 0xf0);

sendbyte((cmdcode << 4) & 0xf0);

delay_1ms(1);

CS0;

}

 

void write_data(unsigned char Dispdata)

{

CS1;

sendbyte(0xfa);

sendbyte(Dispdata & 0xf0);

sendbyte((Dispdata << 4) & 0xf0);

delay_1ms(1);

CS0;

}

 

void Put_String(unsigned int x,unsigned int y,unsigned char* s)

{

switch(y)

     {

  case 1: write_com(0x80+x);break;

  case 2: write_com(0x90+x);break;

  case 3: write_com(0x88+x);break;

  case 4: write_com(0x98+x);break;

      default:break;

}

    while(*s>0)

   { 

      write_data(*s);

      s++;

      DelayUs2x(50);

   }

}

 

void lcdinit()

{

delay_1ms(200);

write_com(0x30);  //功能设定:基本指令集

delay_1ms(20);

write_com(0x0c);  //显示状态:整体显示,游标关

delay_1ms(20);

write_com(0x01);  //清空显示

delay_1ms(200);

}

 

int main( void )

{

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

P1DIR=0xFF;

P1OUT=0x00;

lcdinit();

while(1)

{

       Put_String(1,1,"speed");   

                

}

}

关键字:MSP430  串行  并行  12864显示 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic477814.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:MSP430F5529之捕获模式下的HCSR04超声测距(粗略)
下一篇:MSP430常见问题之LCD 显示驱动类

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MSP430G2553与MSP430F5336系列单片机总结[4]——比较器B的使用
比较器B是什么,顾名思义,它其实就是用来比较模拟电压+输入端和-输入端的电压大小,然后设置输出信号CBOUT的值的,如果 + 端电压高于 - 端电压,则CBOUT置高,否则置低。主要的控制寄存器有CBCTL0,CBCTL1,CBCTL2,CBCTL3,CBINT,CBIV,在MSP430G2553中没有比较器B,但是F5336中有,所以接下来的代码全都是F5336的比较器B使用程序:1.比较器B输入通道CB0接外部模拟输入信号,并且引至比较器+输入端,内部参考电压发生器利用共享电压源产生2.0V参考电压。最后当CB0输入模拟信号电压高于2.0V时,CBOUT输出高电平,当CB0输入模拟信号电压低于2.0V时,输出低电平
发表于 2019-11-06
怎么用keil5实现MSP432E401Y点灯
**第一步**先去官网下载芯片包在keil这个序列中选择TI公司相对应的芯片包下载后在pack installer->import->I agree ->finish出现绿色图标,就代表成功。第二步下载模板模板链接打开工程,选择正确的芯片出现下载失败或者没法编译时选择正确的编译器版本插好线接下来Debug的配置是选择正确的芯片flash然后点击编译下载就好了第三步下面两个网站可以下载资料开发板资料芯片资料从开发板原理图可以知道LED灯的引脚接下来是简单流水灯
发表于 2019-11-06
怎么用keil5实现MSP432E401Y点灯
MSP432E401Y-PWM的生成和占空比的调整
 * MSP432E4 Empty Project * * Description: An empty project that uses DriverLib * *                MSP432E401Y *             ------------------ *         /||          
发表于 2019-11-06
MSP432时钟系统CS
MSP432共有六个时钟源,五个时钟,下面分别由我来介绍一下时钟源分别有以下几个LFXTCLK:低频振荡器(LFXT),可与低频32768-Hz手表配套使用,晶体,标准晶体,谐振器,或外部时钟源在32千赫或以下的范围。当在旁路模式下,LFXTCLK可以由32 khz或以下的外部方波信号驱动的范围内。HFXTCLK:高频振荡器(HFXT),可与1-MHz至48-MHz范围内的标准晶体或谐振器一起使用。在旁路模式下,HFXTCLK可以通过外部方波信号驱动。DCOCLK:内部数字控制振荡器(DCO),默认频率为可编程频率和3 mhz频率。VLOCLK:内部极低功率低频振荡器(VLO),典型频率为9.4 khzREFOCLK:内部低功率
发表于 2019-11-06
MSP432E401Y单片机智能小车测速功能
 * MSP432E401Y * Description:本函数实现定时和测速功能   * 引脚:PD0->编码器输入信号 *         * Author: Robin.J***************************************************************************//* DriverLib Includes */#include <ti/devices/msp432e4/driverlib/driverlib.h>/* Standard
发表于 2019-11-06
MSP432学习笔记:IAR的环境配置(官方demo程序的测试)
近来入手一块MSP432,折腾了一天,终于把官方demo程序导入IAR,可以愉快的写代码了,以下是我个人的解决办法。首先,如果要使用IAR对TI的单片机进行开发,首先要下载对应的单片机型号的MSPWARE,本人目前使用的是TI的MSP432P401R的launchpad,对应的MSPWARE的下载地址为msp432ware下载地址,下载完成后默认路径安装即可,安装完成后可以在安装路径下找到下图的文件IAR的下载安装在这里就不做赘述了,需要注意的是IAR的版本应该为IAR for ARM版本,这个千万不能搞错,否则可能会吃很多问题,不能正常运行。正确安装完IAR后应该是这个样子的,我现在安装的是最新的版本,测试没有问题准备工作完成
发表于 2019-11-06
MSP432学习笔记:IAR的环境配置(官方demo程序的测试)
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

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