# MSP430 Launchpad串行/并行12864显示

时间 2013-06-26
标签 MSP430 Launchpad 串行 并行 12864显示
原文 http://blog.csdn.net/coderwuqiang/article/details/9181853

    #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<x;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<x;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");

    	}

    }

相关文章

- 1. MSP430学习笔记8-ST7920 12864液晶显示并行接口
- 2. C51 12864串行显示程序
- 3. 12864液晶并行方式显示
- 4. Launchpad msp430 PWM实验
- 5. Launchpad msp430 Flash探索
- 6. arm 力天电子lpc2148无字库12864显示一行多个汉字（串行）
- 7. arm 力天电子lpc2148无字库12864显示多行多个汉字（串行）
- 8. 12864显示图片
- 9. MSP430 LaunchPad IO外部中断
- 10. 串行 并行
- 更多相关文章...

相关标签/搜索

并行显示 并行串行 12864显示 并行和串行 串行与并行 串行并发 行数显示 显示换行 多行显示 显示行 多行显示 并行执行 串行 并行 并行 并行 并行 并行 并行 并行 androidEditText 显示两行 java运行显示access denied snort 运行显示libdnet.1 pycharm 显示换行符号 slickedit 2014 显示行号 c# bat 执行 显示 ios UIlabel显示多行 Masonry latex algorithm 显示行号 并行vs并发 linux mknod串行

0
分享到微博 分享到微信 分享到QQ
每日一句

每一个你不满意的现在，都有一个你没有努力的曾经。

最新文章

- 1. 如何在java 8 lambda表达式中获取方法参数名称？
- 2. python – 位向量与布尔值性能列表
- 3. 是否有必要在预测之前对数据进行居中和缩放？
- 4. reactjs – 如何在react-native中的Text组件onPress中获取文本
- 5. java – autobox原始文字是否有性能成本？
- 6. 用什么机制来确定tinkerpop / titan中顶点的绝对顺序？
- 7. java – Netty获取一个exceptionCaught()事件被触发,它到达TextWebsocketEncoder管道的尾部
- 8. 我的浏览器与我的CSS不匹配(但jQuery确实如此)
- 9. dust.js – DustJs中的函数调用和检查结果
- 10. asp.net-core – RenderPartial()在ASP.Net 5 MVC 6中的位置？

本站公众号
欢迎关注本站公众号,获取更多程序园信息
相关文章

- 1. MSP430学习笔记8-ST7920 12864液晶显示并行接口
- 2. C51 12864串行显示程序
- 3. 12864液晶并行方式显示
- 4. Launchpad msp430 PWM实验
- 5. Launchpad msp430 Flash探索
- 6. arm 力天电子lpc2148无字库12864显示一行多个汉字（串行）
- 7. arm 力天电子lpc2148无字库12864显示多行多个汉字（串行）
- 8. 12864显示图片
- 9. MSP430 LaunchPad IO外部中断
- 10. 串行 并行

>>更多相关文章<<