实验四:MSP430定时器综合试验(2学时)

发布者:柳絮轻风最新更新时间:2019-04-10 来源: eefocus关键字:MSP430  定时器  定时控制 手机看文章 扫描二维码
随时随地手机看文章

1.实验目的


    学会定时器使用。


2.实验要求


    掌握定时器的定时控制编程。


3.实验内容


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


(2)编写LED显示程序。


(3)用定时器控制8个LED循环显示程序(间隔时间1秒)。


(4)编写用键控制LED灯循环方向,按键可以随时切换。。


4.参考资料


#include

#include "Config.h"                     //开发板配置头文件,主要配置IO端口信息

 

uchar Flag=0;                           //标志位

uchar Time=0;                           //时间计数变量

uchar count=0;

uchar key;

int f = 0;

uint flag_run = 0;

 

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

//               MSP430IO口初始化

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

void Port_Init()

{

  P1SEL = 0x00;                       //P1普通IO功能

  P1DIR = 0xF0;                       //P10~P13输入模式,外部电路已接上拉电阻

  P6DIR  = 0xFF;                      //设置IO口方向为输出

  LED8 = 0xFF;                        //P6口初始设置为FF

}

 

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

//             TIMERA初始化,设置为UP模式计数

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

void TIMERA_Init(void)                                   //连续计数模式,计数到0XFFFF产生中断

{

  TACTL |= TASSEL1 + TACLR + ID0 + ID1 + MC0 + TAIE;     //SMCLK做时钟源,8分频,连续计数模式,计数到0XFFFF,开中断

  CCR0 = 9999;

}

 

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

//             正向循环LED

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

 

void LED_ZhengXiang(unsigned char LED_NUM)

{

  switch(LED_NUM)

  {

    case 0:LED8 = 0xfe;break;

    case 1:LED8 = 0xfd;break;

    case 2:LED8 = 0xfb;break;

 

 

    case 3:LED8 = 0xf7;break;

    case 4:LED8 = 0xef;break;

 

    case 5:LED8 = 0xdf;break;

    case 6:LED8 = 0xbf;break;

    case 7:LED8 = 0x7f;break;

  }

}

 

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

//             反向循环LED

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

 

void LED_FanXiang(unsigned char LED_NUM)

{

  switch(LED_NUM)

  {

    case 0:LED8 = 0x7f;break;

    case 1:LED8 = 0xbf;break;

    case 2:LED8 = 0xdf;break;

 

 

    case 3:LED8 = 0xef;break;

    case 4:LED8 = 0xf7;break;

 

    case 5:LED8 = 0xfb;break;

    case 6:LED8 = 0xfd;break;

    case 7:LED8 = 0xfe;break;

  }

}

 

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

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

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

 

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;  

}   

 

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

//             TIMERA中断服务程序,需要判断中断类型

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

#pragma vector = TIMERA1_VECTOR

__interrupt void Timer_A(void)

{

  switch(TAIV)                                  //需要判断中断的类型

  {

  case 10:count++;break;                        

  }

  if(count==100)

  {

    Flag++;

    count = 0;

    if(f == 1)

    {

      if(flag_run == 1)

      {

        Flag = 8-(Flag%8);

        flag_run = 0;

      }

      LED_ZhengXiang(Flag%8);

    }

    else if(f == 2)

    {

      if(flag_run == 0)

      {

        Flag = 8-(Flag%8);

        flag_run = 1;

      }

      LED_FanXiang(Flag%8);

    }

  }

}

 

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

//           主函数

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

void main(void)

  WDT_Init();                                   //看门狗设置

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

  Port_Init();                                  //端口初始化

  TIMERA_Init();                                //设置TIMERA

  _EINT();

  while(1)

  {

    Key_Scan();

    if(key==1||key==2)

    {

      f = 1;

    }

    else if(key == 3||key == 4)

    {

      f = 2;

    }

  }

}


关键字:MSP430  定时器  定时控制 引用地址:实验四:MSP430定时器综合试验(2学时)

上一篇:MSP430 串口接收指令控制LED亮灭
下一篇:实验三:MSP430输入输出接口实验(2学时)

推荐阅读最新更新时间:2024-03-16 16:27

基于单片机的微功耗中文人机界面设计
在现代便携式智能仪器或手持设备中,中文人机界面成为一种事实上的行业标准。能显示汉字的图形点阵液晶和可输入数字的小键盘已成为智能设备必不可少的组成部分。同时作为便携式设备基本要求的低功耗特性也贯穿于中文人机界面的设计始终。 这种低功耗中文人机交互界面需要设计者在选取MCU和具体元器件上有特殊考虑。微功耗、小体积应作为选择相关器件的首要要求。 设计中,笔者采用MSP430F149单片机作为系统的MCU,通过选择合适的液晶显示模块在3V电平构建了一个低功耗的中文人机界面。此中文人机界面构成了微功耗数据采集系统的重要组成部分。 一、MSP430系列FLASH型单片机的微功耗特点 德州仪器公司(TI)推出的MSP43
[单片机]
基于单片机的微功耗中文人机界面设计
基于MSP430单片机和CH376USB接口的信号采集存储系统
在现代控制系统中,经常需要在操作现场进行数据采集,以及对数据进行处理来实现现场控制,但是由于单片机数据存贮容量和数据处理能力都较低,因此本文主要介绍了使用USB总线通用接口芯片CH376和16位单片机MSP430对天线发射的信号进行数据采集处理,并且能够将这些大容量的数据以.txt文本格式实时的存储到U盘中,然后能在上位机上方便的打开查看和应用。这样就可以很容易的实现把单片机所采集的数据传送到PC机上,再在PC机上进行数据处理,充分发挥两者各自优势。 本文首先要设计出天线方向图的自动测试系统。通过这个天线参数自动化测量系统准确地发送和接收信号,从而进行数据的采集处理和存储等。早期的天线测试主要依靠手工,误差大、效率低。随着计算机
[单片机]
基于<font color='red'>MSP430</font>单片机和CH376USB接口的信号采集存储系统
定时器的应用---查询方式---让8个LED灯,左右各4个来回亮
/********************** 查询方式是主程序不断的查询是否中断,而不需要准备子程序 ***********************/ #include reg51.h #define LED P1 #define COUNT 50000 // 50000 * 1us = 0.05s 50000计数次 #define TH_M1 (65536-COUNT)%256 //MODE 1 余数赋值给高4位 #deefine TL_M2 (65536-COUNT)/256 //MODE 1 商赋值给低4位 main() { int i; TMOD =0x01; //方式1 启
[单片机]
基于MSP430单片机及USB总线的便携式血压计
目前,市场上的血压计大部分仍是水银血压计,电子血压计在国外已经大量普及,而我国才开始应用。水银血压计每次测量必须由医生戴上听诊器进行测量,测量过程复杂,而且不同的医生,测量结果可能不同。而电子血压计弥补了水银血压计的不足。本文使用低功耗MSP430单片机对人体血压信号进行采集,通过USB控制芯片CH375将这些数据存储到U盘中,可以通过PC机的软件分析一天中血压的变化。   1 硬件设计   1.1芯片介绍   MSP430是近几年流行的16位单片机,由于它具有超低功耗(在5V电压下运行于12MHz的80C51工作电流达到十几mA;而MSP430在3V时的工作电流为340μA,在2.2V的工作电流为220μA)、众多的片内
[单片机]
STM32定时器时间的计算方法
STM32中的定时器有很多用法: (一)系统时钟(SysTick) 设置非常简单,以下是产生1ms中断的设置,和产生10ms延时的函数: void RCC_Configuration(void) { RCC_ClocksTypeDef RCC_ClockFreq; SystemInit();//源自system_stm32f10x.c文件,只需要调用此函数,则可完成RCC的配置. RCC_GetClocksFreq(&RCC_ClockFreq); //SYSTICK分频--1ms的系统时钟中断 if (SysTick_Config(SystemFrequency / 1000)) { while (1); // Capt
[单片机]
单片机C语言程序设计:用定时器设计的门铃
/* 名称:用定时器设计的门铃 说明:按下按键时蜂鸣器发出叮咚的门铃声。 */ #include reg51.h #define uchar unsigned char #define uint unsigned int sbit Key=P1^7; sbit DoorBell=P3^0; uint p=0; //主程序 void main() { DoorBell=0; TMOD=0x00; //T0 方式 0 TH0=(8192-700)/32; //700us 定时 TL0=(8192-700)%32; IE=0x82; while(1) { if(Key==0) //按下按键启动定时
[单片机]
单片机C语言程序设计:用<font color='red'>定时器</font>设计的门铃
基于MSP430F2012和nRF24L01的有源RFID标签的应用设计
1.引言 射频识别(RFID)技术是采用无线射频的方式实现双向数据交换并识别身份,RFID定位正是利用了这一识别特性,利用阅读器和标签之间的通信信号强度等参数进行空间的定位。 RFID标签按供电方式分为有源和无源2种 ,无源标签通过捕获阅读器发射的电磁波获取能量,具有成本低、尺寸小的优势;有源标签通常采用电池供电,具有通信距离远、读取速度快、可靠性好等优点 ,但为了满足煤矿井下定位,需要考虑低功耗设计以增强电池的续航能力。本文从有源标签的设计理念出发,针对小范围空间RFID定位的需求,根据低功耗、高效率的原则进行RFID标签的设计,并阐述了其硬件组成、软件流程和防冲突能力。 2.系统硬件设计 2.1 系统结构 有源标签在设计中除了
[电源管理]
基于<font color='red'>MSP430</font>F2012和nRF24L01的有源RFID标签的应用设计
基于PIC16C74单片机空调室内机软件的实现
单片机软件实现是单片机系统应用的重点,他是在硬件设计基础上实现程序设计的 重要环节 。单片机程序设计一般包括以下几个步骤:软件规划、流程图编制、代码编写。由于单片机 系统具有软硬件紧密结合的特点,因此在基于某种单片机系统的软件开发时,应充分了解该 系统实现的硬件环境,同时也应该在系统设计与硬件设计阶段,对软件设计有一个大体的规 划。因此,本文在介绍室内机控制器功能的基础上,重点讨论如何用软件实现该室内机的功 能。 1室内机控制器的功能 室内机控制器主要是驱动风门步进电机,接收来自红外遥控器设计的指令,进入到相应的工 作状态,并显示运行状态。 室内机控制器包括以下几个硬件电路模块:室内机处理器,室内机
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved