实验三:MSP430输入输出接口实验(2学时)

实验三:MSP430输入输出接口实验(2学时)

1.实验目的

    学会对P口的使用。

2.实验要求

    利用板上的按键,控制LED显示。

3.实验内容

(1)编写键盘扫描程序。

(2)编写LED闪烁(时间间隔1秒,软件延时)显示程序。

(3)编写用每一个键控制两个LED灯发光的程序,按键可以随时切换。

4.参考资料

MSP430光盘资料


#include <msp430x14x.h>
#include "Config.h"
#include "1602.c"

uchar key;

//*************************************************************************
//	初始化按键IO口子程序
//*************************************************************************
void KeyPort_init()
{

  P1SEL = 0x00;                   //P1普通IO功能
  P1DIR = 0xF0;                   //P10~P13输入模式,外部电路已接上拉电阻
  P6SEL = 0x00;                   //P6口普通IO功能
  P6DIR = 0xFF;                   //P6口输出模式
}

//**********************************************************************
//	键盘扫描子程序,采用逐键扫描的方式
//**********************************************************************

uchar Key_Scan(void) 
{
  uchar key_check;
  uchar key_checkin;
  key_checkin=KeyPort;          	//读取IO口状态,判断是否有键按下
  key_checkin&= 0x0F;          		//读取IO口状态,判断是否有键按下
  if(key_checkin!=0x0F)            	//IO口值发生变化则表示有键按下
    {
      delay_ms(20);                  	//键盘消抖,延时20MS
      key_checkin=KeyPort;
      if(key_checkin!=0x1F)
        {  
          key_check=KeyPort;
          switch (key_check & 0x0F)
            {
              case 0x0E:key=1;break;
              case 0x0D:key=2;break;
              case 0x0B:key=3;break;
              case 0x07:key=4;break;
            }
          
        }
      
   }
  else
   {
     key=0xFF;        
   }
  return key;
} 

//***********************************************************************
//     键值显示程序
//***********************************************************************
void LCD_DisplayKey(uchar keynum)
{    
  LCD_write_char(0x0e,1,0x30+keynum);
}

//*************************************************************************
//		主程序
//*************************************************************************

void main(void)
{     
  WDT_Init();                         //看门狗设置
  Clock_Init();                       //系统时钟设置
  Port_init();                        //系统初始化,设置IO口属性
  delay_ms(100);                      //延时100ms
  LCD_init();                         //液晶参数初始化设置
  LCD_clear();                        //清屏
  LCD_Desk();
  KeyPort_init();                     //按键IO口初始化,设置IO口属性
  delay_ms(100);                      //延时100ms
  while(1)
    {
      Key_Scan();                     //键盘扫描,看是否有按键按下
      if(key!=0xff)                   //如果有按键按下,则显示该按键键值1~4
        {
	  {
            switch(key)
              {
	        case 1: LED8 = 0xFC;LCD_DisplayKey(1);break;     //给不同的键赋键值,键值1,亮2个LED灯
                case 2: LED8 = 0xF3;LCD_DisplayKey(2);break;     //给不同的键赋键值,键值2,亮2个LED灯
                case 3: LED8 = 0xCF;LCD_DisplayKey(3);break;	 //给不同的键赋键值,键值3,亮2个LED灯
                case 4: LED8 = 0x3F;LCD_DisplayKey(4);break;	 //给不同的键赋键值,键值4,亮2个LED灯
              }

          }
	
       }
     else
      {
        //LED=key;              	//没有按键的时候显示上次的键值
      }
    }

}





  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值