历史上的今天
返回首页

历史上的今天

今天是:2025年02月15日(星期六)

2020年02月15日 | MSP430 12864显示

2020-02-15 来源:eefocus

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

//DM430开发板控制带字库型12864液晶模块显示测试程序

//显示模式为汉字模式,直接将12864插入12864接口即可

//注意选择液晶的电源,位于电位器附近,可选5V或3.3V,根据液晶电压进行选择

//调试环境:EW430 V5.30

//

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

#include

 

#define CPU_F ((double)8000000) 

#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 

#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 

 

#define uchar unsigned char

#define uint  unsigned int

#define ulong unsigned long

 

/*12864应用指令*/

#define CLEAR_SCREEN 0x01     //清屏指令:清屏且AC值为00H

#define AC_INIT 0x02     //将AC设置为00H。且游标移到原点位置

#define CURSE_ADD 0x06     //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)

#define FUN_MODE 0x30     //工作模式:8位基本指令集

#define DISPLAY_ON 0x0c     //显示开,显示游标,且游标位置反白

#define DISPLAY_OFF 0x08     //显示关

#define CURSE_DIR 0x14     //游标向右移动:AC=AC+1

#define SET_CG_AC 0x40     //设置AC,范围为:00H~3FH

#define SET_DD_AC 0x80

 

#define P10 0

#define P11 1

#define P12 2

#define P13 3

#define P14 4

#define P15 5

#define P16 6

#define P17 7

 

#define RS_CLR P3OUT &= ~(1 << P13)        //RS置低

#define RS_SET P3OUT |= (1 << P13)         //RS置高

 

#define RW_CLR P3OUT &= ~(1 << P16)        //RW置低

#define RW_SET P3OUT |= (1 << P16)         //RW置高

 

#define EN_CLR P3OUT &= ~(1 << P17)        //E置低

#define EN_SET P3OUT |= (1 << P17)         //E置高

 

#define PSB_CLR P5OUT &= ~(1 << P11)        //PSB置低,串口方式

#define PSB_SET P5OUT |= (1 << P11)         //PSB置高,并口方式

 

#define RST_CLR P5OUT &= ~(1 << P12)        //RST置低

#define RST_SET P5OUT |= (1 << P12)         //RST置高

 

#define DataPort      P4OUT                 //P4口为数据口

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

//                    系统时钟初始化

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

void Clock_Init()

{

  uchar i;

  BCSCTL1&=~XT2OFF;                 //打开XT振荡器

  BCSCTL2|=SELM1+SELS;              //MCLK为8MHZ,SMCLK为8MHZ

  do{

    IFG1&=~OFIFG;                   //清除震荡标志

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

       _NOP();                      //延时等待

  }

  while((IFG1&OFIFG)!=0);           //如果标志为1,则继续循环等待

  IFG1&=~OFIFG; 

}

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

//              MSP430内部看门狗初始化

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

void WDT_Init()

{

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

}

 

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

// 初始化IO口子程序

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

void Port_init()

{

 

    P4SEL = 0x00;

        P4DIR = 0xFF;

        

        P3SEL = 0x00;

        P3DIR|= BIT3 + BIT6 + BIT7;

P5SEL = 0x00;

P5DIR|= BIT1 + BIT2;

        PSB_SET;   //液晶并口方式

    RST_SET;   //复位脚RST置高

}

 

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

// 显示屏命令写入函数

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

void LCD_write_com(unsigned char com) 

{

RS_CLR;

RW_CLR;

EN_SET;

DataPort = com;

delay_ms(5);

EN_CLR;

}

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

// 显示屏数据写入函数

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

 

void LCD_write_data(unsigned char data) 

{

RS_SET;

RW_CLR;

EN_SET;

DataPort = data;

delay_ms(5);

EN_CLR;

}

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

// 显示屏清空显示

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

 

void LCD_clear(void) 

{

LCD_write_com(0x01);

delay_ms(5);

}

 

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

//函数名称:DisplayCgrom(uchar hz)显示CGROM里的汉字

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

void DisplayCgrom(uchar addr,uchar *hz)

{

LCD_write_com(addr);

        delay_ms(5);

while(*hz != '')

{

LCD_write_data(*hz);

hz++;

                delay_ms(5);

}

 

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

//函数名称:Display()显示测试结果

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

void Display(void)

{

DisplayCgrom(0x80,"启程电子欢迎你");

DisplayCgrom(0x88," QQ: 617889341 ");

DisplayCgrom(0x90," TodayStart2016  ");

// DisplayCgrom(0x98,"电话18782911298");

 

}

 

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

// 显示屏初始化函数

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

 

void LCD_init(void) 

{

LCD_write_com(FUN_MODE); //显示模式设置

delay_ms(5);

LCD_write_com(FUN_MODE); //显示模式设置

delay_ms(5);

        LCD_write_com(DISPLAY_ON); //显示开

delay_ms(5);

        LCD_write_com(CLEAR_SCREEN); //清屏

delay_ms(5);

}

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

//      主程序

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

void main(void)

{

        WDT_Init();                                   //看门狗设置

        Clock_Init();                                 //系统时钟设置

        Port_init();                                  //系统初始化,设置IO口属性

delay_ms(100);                                //延时100ms

LCD_init();                                   //液晶参数初始化设置

LCD_clear();                                  //清屏

while(1)

{

          LCD_write_com(0x98);

          LCD_write_data('2');

          LCD_write_data('2');

          Display();                                    //显示汉字

}

}

上一篇:MSP430 IIC通信

下一篇:MSP430按键中断

推荐阅读

史海拾趣

CTC [Compact Technology Corp.]公司的发展小趣事

CTC公司深知人才是企业发展的核心。因此,公司一直注重人才培养和引进。通过与高校和研究机构的合作,CTC公司吸引了大批优秀的科研人才加入。同时,公司还建立了完善的培训体系,为员工提供持续的技能提升和职业发展机会。这些人才成为了CTC公司发展的中坚力量,为公司构筑了核心竞争力。

Greenconn Corp公司的发展小趣事
确保冰箱内部和外部的线路连接牢固,如有松动需重新连接。
聚洵(Gainsil)公司的发展小趣事
首先观察冰箱内灯是否亮起,如果灯不亮,可能是断电保护电路故障。此外,还可以使用万用表测量继电器和定时器是否工作正常,以及检查线路连接是否牢固。
Cristek Interconnects Inc公司的发展小趣事

随着市场竞争的加剧,Cristek Interconnects Inc公司意识到质量管理的重要性。于是,公司投入大量资源,建立了一套完善的质量管理体系,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把关。这种严谨的质量管理态度,使得Cristek的产品在行业中享有良好的声誉,赢得了客户的信赖。

BEI Sensors公司的发展小趣事

自上世纪80年代起,Beckhoff便将基于PC的自动化新技术作为公司的发展理念。通过不断研发和创新,公司成功地将工业PC、现场总线模块、驱动产品和控制软件等整合为一套完整的、相互兼容的控制系统。这一创新为工控领域带来了革命性的变革,使得工业自动化系统更加开放、灵活和高效。

AEMC Instruments公司的发展小趣事

除了提供优质的产品外,AEMC Instruments公司还注重服务升级和客户关怀。公司建立了完善的客户服务体系,提供售前咨询、售后技术支持等全方位服务。同时,公司还定期举办技术培训和交流活动,帮助客户更好地使用和维护产品。这些举措不仅提高了客户的满意度和忠诚度,也促进了公司与客户的长期合作关系。

以上五个故事是基于AEMC Instruments公司的发展情况所做出的概括性描述,旨在展示公司在电子行业中的成长历程和取得的成就。当然,具体的发展故事还需要根据公司的实际情况和历史记录来深入挖掘和呈现。

问答坊 | AI 解惑

PLC编程软件

小弟刚学PLC编程,哪位大哥大姐有PLC编程软件给我发个。拜谢 !!!  我的邮箱  luckydechun@yahoo.cn…

查看全部问答>

青越锋功能介绍——绝对的偏心焊盘处理功能

偏心焊盘的处理其实是一个非常实用的技术,在高端的PCB软件设计中,都有着偏心处理这样一个功能。但是就我们目前所熟悉的某些PCB常用软件,却没有偏心焊盘这样的概念,用户在操作当中,必须是手工画出偏心PAD,这样的话,在整个操作当中,就非常不 ...…

查看全部问答>

论文该怎么准备

本帖最后由 paulhyde 于 2014-9-15 09:06 编辑 今年的全国大学生胆子设计大赛 我负责论文,可我没有写过,我看了看以往大赛别人写的论文感觉挺难的,尤其是方案论证,各位能否提供些意见给小弟呀?先谢谢了!  …

查看全部问答>

RDI fatal error: 在线等,急需解决问题

我在使用tkstudio调试程序的时候出现下面的问题:tkstudio + h-jtag进行调试  硬件:ARM7--LPC2210 RDI fatal error: Failed to access instruction register. 编译没有问题,就是运行的时候有时候就会出现这个问题,然后就不能运行 ...…

查看全部问答>

WINCE串口问题

arm9平台,应用程序使用串口接收线程读取数据,主线程为界面操作;开始串口数据接收正常,连续操作界面后,串口不再接收数据,关闭程序重新启动,串口仍不能接收数据。重新启动系统后,串口功能才恢复正常。 问高手?串口驱动漏洞?…

查看全部问答>

ST扩大STM32微控制器产品阵容,新增低闪存密度和48MHzUSB产品

意法半导体(ST)扩大STM32微控制器产品阵容,新增低闪存密度型产品和48MHz USB基本型系列产品16KB闪存微控制器瞄准成本敏感型应用市场;全新USB基本型系列定位下一代联网电子产品,具有节省成本、空间和功率的优点中国,2008年10月2日&nbs ...…

查看全部问答>

香主---关于STM32PC指针跳转的问题

香主,你好。请教个PC指针跳转的问题: 我现在用的是STM32F101RC,bootloader程序从0x08000000h开始运行,然后进行PC指针跳转。由于没用过STM32进行bootloader,所以我做了个小实验。 就是当运行到bootloader最后的时候,我执行:(( ...…

查看全部问答>

【求助】请问有谁用过DS1302?

DS1302的数据输入输出线是共用的,我想问它如何与MSP430的SPI口相连,因为MSP430的数据线可是两根,另外我还接有FLASH,不过它也是有SI和SO。…

查看全部问答>

想用指针方法进行两个数的排序输出。

#include<reg52.h>#include<stdio.h> #define uchar unsigned char#define uint unsigned int void init_uart()  //串口初始化{ SCON = 0x40; PCON = 0; REN = 1; TMOD = 0x20; TH1 = 0xfd; TL1 = 0x ...…

查看全部问答>

关于verilog两种语句设计触发器的问题

这个问题开始是我刚接触verilog的时候产生的疑问 当用always语句的时候,设计D触发器,综合的时候会直接调用现成的触发器 那么用assign语句的时候会怎么样呢? 因为assign语句 的特性,设计D触发器只能按照触发器的原理图来用门电路设计   ...…

查看全部问答>