您当前的位置:五五电子网电子知识单片机-工控设备MSP430单片机MSP430单片机1602液晶显示程序 正文
MSP430单片机1602液晶显示程序

MSP430单片机1602液晶显示程序

点击数:7781 次   录入时间:03-04 11:55:44   整理:http://www.55dianzi.com   MSP430单片机

MSP430 单片机 1602液晶显示程序

#include"msp430x22x4.h"
#define   uint      unsigned int
#define keyin    (P2IN&0x0f)

//硬件连接    P4  数据口    P3.7---E  P3.6---RW   P3.5----RS
//P2低4位接键盘1*4    上拉电阻电源外接电源5V   公共端接电源负  注意电源和 单片机 共地

unsigned char table0[]="BeiJing 2008-6";                                    
unsigned char table1[]="0123456789";
unsigned char table2[]=":";
unsigned char table3[]="wubin";
unsigned char a=0,b=0,c=0,d=0,e=0,f=0,j=0;
unsigned char num,count=0;    

//**************延时***********************************
void delay(uint z)
{
    uint t,y;
    for(t=z;t>0;t--)
        for(y=110;y>0;y--);
}


//*******写命令*****************************************
void write_com(unsigned char com)
{
    P3OUT&=~BIT5;//作为RS选择端低电平有效
    P4OUT=com;
    delay(5);
    P3OUT|=BIT7;
    delay(5);
    P3OUT&=~BIT7;
}
//*******写数据***************************************************
void write_data(unsigned char date)
{
    P3OUT|=BIT5;//作为RS选择端高电平有效劳
    //P3OUT&=~RW;//作为RS选择端
    P4OUT=date;
    delay(5);
    P3OUT|=BIT7;//作为E选择端=1;
    delay(5);
    P3OUT&=~BIT7;
}


//********初始化******************************************
void init()
{
    
       TACTL=TASSEL1+TACLR+MC_1+ID_3;         //定时器A时钟源为MCLK,并清TAR//启动定时器A为增计数模式
       CCR0 =65535;                      //计数值为65535个ACLK周期
       CCTL0|=CCIE;

  P3DIR=0xff;//P3输出 作控制口
  P3SEL=0;
  P3OUT=0x00;
  
  P3OUT&=~BIT7;//E
  P3OUT&=~BIT5;//RS

  P4DIR=0XFF;//P4输出 作数据口
  P4SEL=0;
  P4OUT=0X00;

  P2DIR=0XF0;//P2低4位输入  作键盘输入
  P2SEL=0;
  P2OUT=0X00;
  P2IE=0X0F;
  P2IFG=0;
  P2IES=0X00;     
    write_com(0x38);//显示模式设置
    write_com(0x0c);//开显示,不显光标
    write_com(0x06);//数据地址指针
    write_com(0x01);//清屏
    _BIS_SR(GIE);//两个开总中断的方法随便用哪一个
         _EINT();//
}

//*****************************add1********************************************//
void addfen1(void)
{
  c++;
if(c>9)c=0;return;
}
//*******************************************//
void addfen2(void)
{d++;
if(d>5)d=0;return;}
//*******************************************//
void addshi1(void)
{e++;
if(e>9)e=0;return;}
//*******************************************//
void addshi2(void)
{f++;
if(f>2)f=0;
if(f==2&&e==3)
{f=e=0;}
  return;
}


//************显示函数1********************
display(unsigned char x,unsigned char *p,unsigned char q)
{
  write_com(x);
  delay(5);
  write_data(p[q]);
  return;
}
//************显示函数2********************
display2(unsigned char x,unsigned char *p)
{
  unsigned char y=0;      //y要给其初值0否则出乱码
  write_com(x);
  while(p[y]!=0x00)
  {
    write_data(p[y]); 
   y++;
    delay(5);
  }
}

//*****************************定时中断函数*********************************************//

  #pragma vector =TIMERA0_VECTOR          //ccr0中断服务
__interrupt void ta1_isr(void)
{
  count++;
  CCTL0&=~CCIFG; 
  if(count!=2)return;
  count=0;
    a++;
    if(a>9)
    {a=0;b++;
        if(b>5)
        {b=0;c++;
            if(c>9)
                {
                c=0;d++;
                  if(d>5)
                  {d=0;e++;
              if(e>9)
              {
              e=0;f++;
            if(f==2&&e==4)
            {
            a=b=c=d=e=f=0;
            }      CCR0 =65535;
        }      CCR0 =65535;
    }      CCR0 =65535;
}      CCR0 =65535;
}      CCR0 =65535;
}      CCR0 =65535;
}

//*****************************按键中断函数*********************************************//
  #pragma vector =PORT2_VECTOR           //p2中断服务
__interrupt void anjian(void)
{
      P2IFG=0;//清按键中断!!!
      CCTL0&=~CCIE;//关定时中断不计时
       switch(keyin)
            {
               case 0x0e:addfen1();break;                

[1] [2]  下一页


本文关键字:单片机  程序  MSP430单片机单片机-工控设备 - MSP430单片机