打印

12864的MSP430控制显示程序

[复制链接]
1585|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mncctv|  楼主 | 2008-10-12 09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "msp430x14x.h"
#define  uint unsigned int
#define  uchar unsigned char
#define DELAY _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
#define DI_HIGH P4OUT|=BIT0;DELAY;//p4.0输出1;D/I 1 为数据操作
#define DI_LOW P4OUT&=~BIT0;DELAY;//p4.0输出0;D/I 0 为写指令或读状态
#define RW_HIGH P4OUT|=BIT1;DELAY;//p4.1输出1;R/W 0 为读选通
#define RW_LOW P4OUT&=~BIT1;DELAY;//p4.1输出0;R/W 0 为写选通
#define E_HIGH P4OUT|=BIT2;DELAY;//P4.2,在E 下降沿数据被锁存(写)入HD61202 及其兼
//容控制驱动器在E 高电平期间数据被读出
#define E_LOW P4OUT&=~BIT2;DELAY;
#define CSL_HIGH P4OUT|=BIT3;DELAY;//P4.3,
#define CSL_LOW P4OUT&=~BIT3;DELAY;
#define CSR_HIGH P4OUT|=BIT4;DELAY;
#define CSR_LOW P4OUT&=~BIT4;DELAY;
#define RST_HIGH P4OUT|=BIT5;DELAY;//4.5,复位信号有效时关闭液晶显示使显示起始行
//为0
#define RST_LOW P4OUT&=~BIT5;DELAY;
#define BUSY_OUT P2DIR|=BIT7//P2.7作为输出;
#define BUSY_IN P2DIR&=~BIT7
#define BUSY_DATA P2IN&BIT7
//时钟初始化函数
void InitClock(void){
  BCSCTL1=RSEL2+RSEL1+RSEL0;//XT2(8M)开启 LFXT1工作在低频模式 ACLK不分频 最高的标称频率
  DCOCTL=DCO2+DCO1+DCO0;//DCO为最高频率
  do{
    IFG1&=~OFIFG;//清除振荡器失效标志
    for(uint i=255;i>0;i--);
  }while(IFG1&OFIFG);//判断XT2是否起振
  BCSCTL2=SELM1+SELS;//MCLK SMCLK时钟源为TX2CLK不分频
}
//端口初始化函数
void InitPort(void){
  P1SEL=0x00;//P1口所有引脚设置为一般的IO口
  P1DIR=0x0F;//P1.0 P1.1 P1.2 P1.3设置为输出方向
  P1OUT=0x00;//P1口先输出低电平
  P1IE=0xF0;//P1.4 P1.5 P1.6 P1.7中断允许
  P1IES=0xF0;//P1.4 P1.5 P1.6 P1.7下降沿触发中断
  P2SEL=0x00;//P2口所有引脚设置为一般的IO口
  P4SEL=0x00;//P4口所有引脚设置为一般的IO口
  P2DIR=0xFF;//P2口所有引脚设置为输出方向
  P4DIR=0xFF;//P4口所有引脚设置为输出方向
  P2OUT=0x00;//P2口先输出低电平
  P4OUT=0xFF;//P4口先输出低电平
}
//检查LCD忙状态
void LcdBusy(){
DI_LOW;
RW_HIGH;
E_HIGH;
BUSY_IN;
while(BUSY_DATA);
BUSY_OUT;
_NOP();_NOP();_NOP();_NOP();_NOP();
E_LOW;
}
//给LCD写命令
void send_com(uchar Command){
LcdBusy();
DI_LOW;
RW_LOW;
P2OUT=Command;
DELAY;
E_HIGH;
E_LOW;
}
//给LCD写数据
void send_data(uchar Data){
LcdBusy();
DI_HIGH;
RW_LOW;
P2OUT=Data;
DELAY;
E_HIGH;
E_LOW;
}
/********************清屏************************/
//清屏
/************************************************/
void clr_lcd(void)
{
send_com(0x01);
//send_com(0x34);
//send_com(0x30);
}

//LCD初始化
void LcdInit(){
RST_LOW;
DELAY;
RST_HIGH; //RST低电平复位
clr_lcd(); //清屏
}
/*******************************************************************/
// 设置显示位置 xpos(1~16),tpos(1~4)
/*******************************************************************/
void set_xy(unsigned char xpos,unsigned char ypos)
{
switch(ypos)
{
case 1:
send_com(0X80|xpos);break;
case 2:
send_com(0X90|xpos);break;
case 3:
send_com(0X88|xpos);break;
case 4:
send_com(0X98|xpos);break;
default:break;
}
}
/*******************************************************************/
// 在指定位置显示字符串
/*******************************************************************/
void print(unsigned char x,unsigned char y,char* str)

unsigned char lcd_temp; 
set_xy(x,y);
lcd_temp=*str;
while(lcd_temp != 0x00) 

send_data(lcd_temp);
lcd_temp=*(++str);

}
//延时子函数
void Delay(void){
  for(uchar i=255;i>0;i--);
}
//延时子程序
void DelayMs(uint ms){
  while(ms--){
    for(uint i=0;i<800;i++);
  }
}
}
void main(){
  WDTCTL=WDTPW+WDTHOLD;//关闭看门狗
  InitClock();
  InitPort();
  _EINT();//打开中断
   LcdInit();//Lcd初始化
  while(1){
    print(5,1,"欢迎光临");
    DelayMs(5000);
   clr_lcd();//滚屏显示
    print(0,3," SEEGU百度空间");
    DelayMs(5000);
clr_lcd();
  }
}

相关帖子

沙发
zhouxin1522420| | 2014-12-7 16:20 | 只看该作者
学习了!谢谢

使用特权

评论回复
板凳
yueguang3048| | 2014-12-7 16:38 | 只看该作者
谢谢           

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

94

帖子

1

粉丝