历史上的今天
返回首页

历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2019年10月21日 | MSP430 Launchpad串行/并行12864显示

2019-10-21 来源:eefocus

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

                

}

}

推荐阅读

史海拾趣

Daniels Manufacturing公司的发展小趣事

随着全球电子行业的快速发展,DMC意识到必须走向国际市场,以寻求更大的发展空间。在20世纪90年代,DMC开始实施国际化战略,通过设立海外分支机构、与当地企业合作等方式,逐步拓展国际市场。同时,DMC还积极参与国际展览和技术交流,提高品牌知名度和影响力。这些努力使得DMC在国际市场上逐渐崭露头角,产品出口量持续增长。

Alpha & Omega Semiconductor(万国半导体)公司的发展小趣事

随着全球电子行业的快速发展,DMC意识到必须走向国际市场,以寻求更大的发展空间。在20世纪90年代,DMC开始实施国际化战略,通过设立海外分支机构、与当地企业合作等方式,逐步拓展国际市场。同时,DMC还积极参与国际展览和技术交流,提高品牌知名度和影响力。这些努力使得DMC在国际市场上逐渐崭露头角,产品出口量持续增长。

Davies Molding公司的发展小趣事

Davies Molding公司自创立之初,就将产品质量视为企业的生命线。在早期,公司创始人意识到,只有提供高品质的塑料注塑成型产品,才能在竞争激烈的电子行业中立足。因此,公司投入大量资源在研发、生产和质量控制上,确保每一件产品都符合严格的标准。这种对品质的坚持,不仅赢得了客户的信任,也为Davies Molding公司赢得了良好的口碑。

Cornerstone Sensors公司的发展小趣事

品质是Cornerstone Sensors的生命线。公司建立了严格的质量管理体系,从原材料采购、生产制造到产品测试等各个环节都进行严格把控。同时,公司还注重品牌建设,通过参加行业活动、发布技术文章、提供专业培训等方式提升品牌影响力。Cornerstone Sensors的产品逐渐成为行业内公认的高品质代表,赢得了广泛的口碑和市场份额。

Gang Song Electronics Co Ltd公司的发展小趣事

作为物联网领域的领军企业之一,Telit(包含GainSpan的技术)不仅致力于技术创新和市场拓展,还积极参与行业标准的制定和生态建设的推动。通过与其他企业和组织的合作与交流,Telit推动了物联网技术的标准化和规范化发展。同时,它还积极构建物联网生态系统,与上下游企业建立紧密的合作关系,共同推动物联网产业的繁荣和发展。这些努力不仅提升了Telit在行业内的地位和影响力,也为整个物联网产业的发展做出了重要贡献。

Ceratech Corporation公司的发展小趣事

在电子行业的早期,Ceratech Corporation公司以其对滤波器技术的深入研究和不断创新而崭露头角。公司研发团队不断攻克技术难题,成功研发出一系列高性能的Ceratech滤波器,这些滤波器以其优异的性能和稳定性,迅速在市场中占据了一席之地。随着技术的不断积累和创新,Ceratech Corporation逐渐在滤波器领域树立起了自己的品牌和技术优势。

问答坊 | AI 解惑

改进版8位数码管汇编数字钟

几天前帮同学课程设计写的那个数字钟(51单片机简洁版汇编数字钟),由于时间紧,随便搞了两下。那个程序不怎么好,用两个按钮分别调时调分,而且只能增加,不小心按到按钮便调动了时间,不能用于实际产品。恰巧我自己的单片机课程设计题目是“自动 ...…

查看全部问答>

关于示波器的十个问题和十个答案

示波器数字示波器一直是工程师设计、调试产品的好帮手。但随着计算机、半导体和通信技术的发展,电路系统的信号时钟速度越来越快,信号上升时间也越来越短,导致因底层模拟信号完整性问题引发的数字错误日益突出。针对这些新的测试挑战,示波器供应 ...…

查看全部问答>

CAN芯片mcp2515

打算使用mcp2515 芯片的朋友可以参考下…

查看全部问答>

人说做模拟要5年才算入行?

你觉得呢? 个人感觉5年都不算久。…

查看全部问答>

允许唤醒系统的中断源,在哪个寄存器设置??

为什么我有的外部中断能唤醒,有的却不能呢?? 还想问一下是不是有一个专门的寄存器能设置只允许某些外部中断可以唤醒系统?? 看了三星的datasheet,貌似是不用设置任何一个EINT都能唤醒系统,但我的系统却不是这样。 谢谢…

查看全部问答>

关于DS18B20的64位ROM搜索

老师让做个多点温度检测通过RS232协议传给上位机。就剩下最关键18B20的通过读64位ROM中的48位序列号来确定具体的那个18B20了。我想尽快结项啊啊啊啊!! 哪位大侠能出来指点一二,给个参考代码更是感激不尽,毫无头绪中…………………………代码啊 ...…

查看全部问答>

希望TEST兄能冷静一些。

我非常理解您在这里四年的感情,我不如您的资历深,但是我觉得在过去的两年多里我从一个巨菜的菜鸟,到一个对嵌入式有一些了解的程序员,十分的感谢eeworld,我希望这永远是技术的天堂,删除您投诉的贴子,只是想告诉您,如果想投诉请到申诉区,那 ...…

查看全部问答>

请问MAX232和MAX487的区别

   一个RS232一个RS485接口,都是用来做什么收发器,电平逻辑转化的,但这些都是纯理论上的作用,我只想知道他们实际中能干什么,不要有太多专业术语,还有这2个有什么区别?…

查看全部问答>

LIST BOX显示数据的问题

{          // TODO: 在此添加控件通知处理程序代码          int nEngineType;          int OpenMode;           ...…

查看全部问答>

代码格式问题?

这样的代码格式正确吗?在ISE12.3里的GLBL.V里有这样的语句。glbl.PLL_LOCKG,这种写法是合法的吗?为什么我在仿真时这样写就不对呢?比如我A模块下有B信号,在Testbench中我这样用为什么就不对呢?比如在display任务中想打印A模块下的B信号,A.B的 ...…

查看全部问答>