历史上的今天
返回首页

历史上的今天

今天是:2025年04月19日(星期六)

2020年04月19日 | MSP430定时器综合试验

2020-04-19 来源:eefocus

1.实验目的


学会定时器使用。


2.实验要求


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


3.实验内容


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


(2)编写LED显示程序。


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


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


#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;

}



void LED_ZhengXiang(unsigned char LED_NUM)    //LED从0-7闪烁

{

  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;

  }

}



void LED_FanXiang(unsigned char LED_NUM)      //LED从7-0闪烁

{

  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;                         //设置标志位Flag

  }

  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();

  delay_ms(100);

  while(1)

  {

    Key_Scan();                       //键盘扫描,看是否有按键按下

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

          {

            f = 1;

          }

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

          {

            f = 2;

          }

  }

}

推荐阅读

史海拾趣

DSMI Electronics SA公司的发展小趣事

为了进一步扩大市场份额,DSMI Electronics SA公司开始实施全球化战略。公司积极拓展海外市场,通过参加国际展会、建立海外销售网络等方式,将产品销往全球各地。同时,DSMI还注重本土化经营,根据不同市场的特点和需求,调整产品策略和营销方式。这些努力使DSMI在国际市场上取得了显著的成绩。

CANOPUS公司的发展小趣事

CANOPUS的产品逐渐赢得了全球音乐爱好者的喜爱。为了更好地满足市场需求,公司开始积极拓展海外市场。通过与当地经销商合作、参加国际展览等方式,CANOPUS的产品逐渐打入国际市场,并在全球范围内建立了良好的声誉。

HP(Keysight)公司的发展小趣事

随着业务的不断拓展,CANOPUS开始专注于鼓的制造研究。在1984年,公司推出了其标志性产品——整木掏空榉木军鼓。这款鼓的独特之处在于其鼓腔是由整个树干挖空处理而成,导角也做了特有的设计。这一创新使得CANOPUS的鼓在音质和外观上都与众不同,迅速在市场上获得了认可。

FILTRONIC公司的发展小趣事

FILTRONIC深知技术创新是企业持续发展的动力源泉。因此,公司不断加大研发投入,建立了先进的研发中心和实验室,吸引了一批高素质的研发人才。通过持续的技术研发,FILTRONIC在滤波器技术、射频技术、天线技术等领域取得了多项重要突破,推出了多款具有自主知识产权的新产品。这些新产品的推出不仅进一步巩固了FILTRONIC在市场中的领先地位,也为公司的未来发展注入了新的活力。

EEMB Co Ltd公司的发展小趣事

为了适应公司业务的快速发展和满足市场需求的不断增长,EEMB集团于2017年在汉川市修建了新工厂。新工厂占地面积120亩,使用面积达27000平方米,配备了先进的生产设备和技术。一期工程全面投入生产后,公司的产能得到了显著提升,能够更好地满足客户的订单需求。同时,新工厂的建成也进一步提升了公司的生产效率和产品质量。

CST Master Electronic Co Ltd公司的发展小趣事

在国内市场取得一定成绩后,CST Master决定进军国际市场。然而,国际市场的竞争更加激烈,法律法规和文化差异也给公司带来了不小的挑战。公司积极调整市场策略,加强与当地合作伙伴的合作,逐步打开了国际市场的大门。通过不断的努力,CST Master在国际市场上也取得了一定的份额。

问答坊 | AI 解惑

数控直流恒流源键盘模块设计

硬件电路设计(4*4矩阵式键盘及其接口设计、键输入电路) 软件设计(键扫描、去抖动、键识别及处理程序) 主要技术指标: 1、键盘包括0-9数字键、“确认”、“取消”、“∧”和“∨”键等功能键 2、A/D转换器采用16位高精度、低功耗串行A/D转换 ...…

查看全部问答>

FPGA入门学习心得

FPGA入门学习心得 刚开始接触的时候,认为很简单,不就是写写代码就okey了吗?所以混混谔谔地度过了3个月,因为刚开始的时候接触的时比较简单的算法,所以对设计的时序和性能要求不是很高,写写代码完全就可以了,所以从来没有关心底层的东西(底 ...…

查看全部问答>

求MSP430仿真器的USB驱动

我的电脑光驱坏了,不能安装驱动光盘。 现在急需MSP430仿真器的USB驱动安装包 我的邮箱283947988@qq.com 有的朋友请帮个忙谢谢…

查看全部问答>

VMware 装tools后的连接问题,有人遇到过吗

xp系统,先前在vwmare6.5里装了redhat9,桥接方式,一切正常 之后在提示下装了tools,问题就来了,单机下xp和linux无法连接通信了 linux里:ping127.0.0.1正常,ping192.168.1.241正常 xp里:ping127.0.0.1正常,ping192.168.1.240不通 但是接 ...…

查看全部问答>

抢占式RTOS机制怎样描述

如题。谢谢了!(网上没搜到)…

查看全部问答>

问几个菜菜的问题!!!

看书遇到了几个问题怎么也搞不懂,求助于各位大大们了!!! 第一个是关于最大延时的计算! (6MHz晶振频率)     MOV    R5,#TIME1 LOOP2:MOV    R4,#TIME2 LOOP1:NOP       NOP & ...…

查看全部问答>

单片机下载程序的问题

今天在调试程序时,突然出现了Flash verify error at oh 这是什么问题啊?怎么回事?请大师们指点…… 还在调试中………

查看全部问答>

STM8S105K4的PB5引脚电平怎么上不去?

                                 5V供电,电压只能上到1.7V的样子,设置能任何输出方式都不行,后来我加了10K的上拉电阻之后高电平电压才上到5V,什 ...…

查看全部问答>

菜鸟请问下如何AMR&LINNX入门

现在我有硬件就是不晓得如何去学,我是自己学的,我C语言也是自己学的。单片机现在基本上都玩过就是没有玩过系统,所以求论坛的高手建议我该如何学习这个东西,我没有经验,我怕自己还没入门浪费太多的时间在不重要的地方了。…

查看全部问答>

MSP430F5438A外接25M晶振问题

MSP430F5438A的最小系统,XT1外接32.768K,XT2外接25M晶振。现想用ACLK=XT1,MCLK=SMCLK=XT2。 请教,5438A的datasheet里面说是可以外接25M的,但是具体设置应该是如何?…

查看全部问答>