⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msp430f149的4乘4键盘中断+液晶显示程序.txt

📁 MSP430F2274的4乘4键盘中断+液晶显示程序 采用中断程序
💻 TXT
📖 第 1 页 / 共 2 页
字号:
//MSP430F14 4*4键盘中断+液晶显示程序 

#include "msp430x22x4.h"
#define RS_H        P2OUT |=BIT4         //Data Register is selected
#define RS_L        P2OUT &=~BIT4    //Instruction Register is selected
#define READ        P3OUT |= BIT6        //读LCD
#define WRITE       P3OUT &= ~BIT6   //写LCD
#define EN_H        P2OUT |= BIT3        //Enable  Read/Write Operation 
#define EN_L        P2OUT &=~BIT3    //Disable Read/Write Operation

 unsigned char a[]="Welcome! ";   //定义全局数组
 unsigned char b[]="Level control!";
 unsigned char c[]="Temperature!";
 unsigned char d[]="Pressure!";
 unsigned char e[]="Liu Liang!";
/**************************************************************************/
void Init_CLK(void)
{
 unsigned int i;
 BCSCTL1=0x00; //将寄存器BCSCTL1的内容清零、XT2振荡器开启、LFTX1工作在低频模式
               //ACLK的分频因子为1  
 do
 {
  IFG1&=~OFIFG;        //清除OSCFault标志
  for(i=0x20;i>0;i--);
 }
 
 while((IFG1&OFIFG)==OFIFG);
 
 BCSCTL2=0x00;  //将寄存器BCSCTL2的内容清零
 BCSCTL2+=SELM1;//MCLK的时钟源为XT2CLK,分频因子为1
 BCSCTL2+=SELS; //SMMLK的时钟源为XT2CLK,分频因子为1
}
/**************************************************************************/
void Init_Port()
{
   P2DIR |= BIT3+BIT4;
  P2OUT|= BIT3+BIT4;
  P3DIR|=BIT6;
  P3OUT= BIT6;
    P4SEL=0x00;     //P4输出
    P4DIR=0xFF;
    P4OUT=0x00;

    //将P1口所有的管脚在初始化的时候设置为输入方式
    P1DIR = 0;
 
    //将P1口所有的管脚设置为一般I/O口
    P1SEL = 0;
    
    // 将P1.4 P1.5 P1.6 P1.7设置为输出方向
    P1DIR |= BIT4;
    P1DIR |= BIT5;
    P1DIR |= BIT6;
    P1DIR |= BIT7;

   //先输出低电平
    P1OUT = 0x00;
   // 将中断寄存器清零
    P1IE = 0;
    P1IES = 0;
    P1IFG = 0;
    //打开管脚的中断功能
     //对应的管脚由高到低电平跳变使相应的标志置位
    P1IE |= BIT0;      
    P1IES|= BIT0;      
    P1IE |= BIT1;      
    P1IES|= BIT1;
    P1IE |= BIT2;      
    P1IES|= BIT2;      
    P1IE |= BIT3;      
    P1IES |= BIT3;
}
/**************************************************************************/
void Delay(unsigned int i)  //延时子程序
{
  while(i--);
}
void delay2()  //延时
{
  int i;
  for(i=0;i<5000;i--);
}
void Write_Command(unsigned char command )        
{
  P4OUT=command;
  RS_L;   //选择程序寄存器
  WRITE;  //允许写操作
  EN_H;   //液晶使能
  Delay(1000);//延时
  EN_L;   //液晶读写操作禁止
  Delay(1000);
} 
/**************************************************************************/
void Write_Data(unsigned char data )         
{  
  P4OUT=data;
  RS_H;   //选择数据寄存器
  WRITE;  //允许写操作
  EN_H;   //液晶使能
  Delay(1000); //延时
  EN_L ;  //液晶读写操作禁止
  Delay(1000);
}
/**************************************************************************/
void Clear_Second_Line()    //用于删除2*16字符液的晶第二行的函数
{
  int i=16;
  Write_Command(0xC0);    //设置DDRAM的初始地址
  while(i--)
  {
  P4OUT=0x20;
  RS_H;   //选择数据寄存器
  WRITE;  //允许写操作
  EN_H;   //液晶使能
  Delay(1000); //延时
  EN_L ;  //液晶读写操作禁止
  Delay(1000);
  }
}
/**************************************************************************/
void Init_LCD(void)
{
  
  Write_Command( 0x38  );//8位总线接口,双行显示,5*7点阵型
  Delay(500);
  Write_Command(0x0F);//开显示,开光标,光标闪烁
  Delay(500);
  Write_Command(0x01);//清屏,将空格字符ASCII码20H写入到所有的DDRAM单元
  Delay(5000);
  Write_Command(0x06);//设置进入方式,DDRAM自增,整个显示右移
  Delay(500);
  Write_Command(0x80);//设置DDRAM的初始地址
}
/**************************************************************************/
int KeyProcess(void)
{int keyz;    
  int key; 
  key=(P1IN&0x0f);
  switch(key)
  {
  case 0x0e:
     delay2();
    P1OUT |=BIT4;
    if((P1IN&BIT0)==0x01)
    {
      delay2();keyz=16;break;
    }    
     P1OUT |=BIT5;
    if((P1IN&BIT0)==0x01)
    {
     delay2(); keyz=1;break;
    }
     P1OUT |=BIT6;
    if((P1IN&BIT0)==0x01)
    {
     delay2(); keyz=2;break;
    }
     P1OUT |=BIT7;
    if((P1IN&BIT0)==0x01)
    {
     delay2(); keyz=3;break;
    }
    break;
    case 0x0d:
    P1OUT |=BIT4;
    if((P1IN&BIT1)==0x02)
    {
     delay2();keyz=4;break;
    }
     P1OUT |=BIT5;
    if((P1IN&BIT1)==0x02)
    {
     delay2();keyz=5;break;
    }
     P1OUT |=BIT6;
    if((P1IN&BIT1)==0x02)
    {
     delay2(); keyz=6;break;
    }
     P1OUT |=BIT7;
    if((P1IN&BIT1)==0x02)
    {
    delay2(); keyz=7;break;
    }
    break;
   case 0x0b:
    P1OUT |=BIT4;
    if((P1IN&BIT2)==0x04)
    {
      delay2(); keyz=8;break;
    }
     P1OUT |=BIT5;
    if((P1IN&BIT2)==0x04)
    {
      delay2(); keyz=9;break;
    }
     P1OUT |=BIT6;
    if((P1IN&BIT2)==0x04)
    {
  delay2(); keyz=10;break;
    }
     P1OUT |=BIT7;
    if((P1IN&BIT2)==0x04)
    {
 delay2(); keyz=11;break;
    }
    case 0x07:
    P1OUT |=BIT4;
    if((P1IN&BIT3)==0x08)
    {
     delay2(); keyz=12;break;
    }
     P1OUT |=BIT5;
    if((P1IN&BIT3)==0x08)
    {
     delay2(); keyz=13;break;
    }
     P1OUT |=BIT6;
    if((P1IN&BIT3)==0x08)
    {
      delay2(); keyz=14;break;
    }
     P1OUT |=BIT7;
    if((P1IN&BIT3)==0x08)
    {
      delay2(); keyz=15;break;
    } 
  default: keyz=16;break;
  }
  P1OUT&=~0xf0;
  delay2(); 
  delay2();
  return keyz;
} 
/**************************************************************************/ 
      Delay(30000);
  unsigned char  nP10,nP11,nP12,nP13;
        nP10=0;
        nP11=0;
        nP12=0;
        nP13=0;
     int nRes = 0;        
        //P1.7输出低电平
     P1OUT = ~(BIT7);
        Delay(50);     
        nP10 = P1IN & BIT0;
     if (nP10 == 0) 
        {
          nRes = 13;
        }       
        nP11 = P1IN & BIT1;
     if (nP11 == 0)
        {
          nRes = 14;
        }        
        nP12 = P1IN & BIT2;
     if (nP12 == 0) 
        {
          nRes = 15;
        }     
        nP13 = P1IN & BIT3;
     if (nP13 == 0) 
        {
          nRes = 16;
          //P5OUT=0x00;
        }     
        //P1.6输出低电平  
     P1OUT = ~(BIT6);
        Delay(50);
     
        nP10 = P1IN & BIT0;
     if (nP10 == 0) 
        {
          nRes = 9;
        }
     nP11 = P1IN & BIT1;
     if (nP11 == 0) 
        {
          nRes = 10;
        }     
        nP12 = P1IN & BIT2;
     if (nP12 == 0) 
        {  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -