历史上的今天
返回首页

历史上的今天

今天是:2025年04月10日(星期四)

正在发生

2019年04月10日 | 实验四:MSP430定时器综合试验(2学时)

2019-04-10 来源:eefocus

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;

    }

  }

}


推荐阅读

史海拾趣

AVG [AVG Semiconductors(HITEK)]公司的发展小趣事

随着全球对可持续发展的关注度不断提高,AVG也积极响应这一趋势,将可持续发展理念融入公司的战略和运营中。公司注重环保和节能减排,采用环保材料和生产工艺,减少对环境的影响;同时,AVG还积极参与社会公益事业,为社会做出贡献。这些举措不仅提升了AVG的社会形象,也为公司的长远发展奠定了坚实的基础。

这些故事只是AVG Semiconductors(HITEK)在电子行业发展中众多精彩瞬间的一部分。通过技术创新、市场扩张、合作伙伴关系的建立以及应对挑战和危机的能力,AVG不断壮大自身实力,为电子行业的发展做出了重要贡献。未来,AVG将继续秉持创新精神和社会责任感,在电子行业中书写更加辉煌的篇章。

Bridgelux公司的发展小趣事

Bridgelux在LED照明技术方面取得了重要突破。公司研发出了一种新型的LED芯片结构,提高了光效和稳定性,降低了成本。这一创新使得Bridgelux的产品在市场上更具竞争力,也为其赢得了众多客户的青睐。同时,公司还注重知识产权保护,积极申请专利,确保自身技术的领先地位。

EICHHOFF公司的发展小趣事

品质一直是EICHHOFF公司发展的核心竞争力。为了确保产品质量的稳定性和可靠性,公司建立了一套完善的质量管理体系,并持续进行改进和优化。从原材料采购到生产加工、从产品检测到售后服务,每一个环节都严格按照质量管理体系的要求进行。

此外,EICHHOFF公司还积极引入国际先进的品质管理工具和方法,如六西格玛、精益生产等,以进一步提高产品质量和生产效率。这些努力使得EICHHOFF的产品在行业中享有很高的声誉和信誉。

Hirosugi-Keiki公司的发展小趣事

品质一直是EICHHOFF公司发展的核心竞争力。为了确保产品质量的稳定性和可靠性,公司建立了一套完善的质量管理体系,并持续进行改进和优化。从原材料采购到生产加工、从产品检测到售后服务,每一个环节都严格按照质量管理体系的要求进行。

此外,EICHHOFF公司还积极引入国际先进的品质管理工具和方法,如六西格玛、精益生产等,以进一步提高产品质量和生产效率。这些努力使得EICHHOFF的产品在行业中享有很高的声誉和信誉。

维峰电子(WCON)公司的发展小趣事

维峰电子(WCON)于2002年在广东成立,由创始人李文化带领的团队共同创立。创业初期,公司面临着资金短缺、技术落后和市场竞争激烈等多重挑战。然而,团队凭借着对电子连接器行业的深刻理解和坚定信念,不断研发新产品,优化生产工艺,逐渐在市场中站稳脚跟。他们通过不懈努力,成功开发出多款具有竞争力的电子连接器产品,为公司后续的发展奠定了坚实基础。

思博科技(Cybermax)公司的发展小趣事

为了进一步扩大市场份额,思博科技开始积极拓展国际市场。公司参加了多个国际电子展会,与全球各地的客户建立了联系。同时,思博科技还与国际知名企业展开了合作,共同研发新产品。这些合作不仅提升了公司的技术水平,还为公司带来了更多的商机。在国际市场的拓展过程中,思博科技逐渐成为了全球电子行业的佼佼者。

问答坊 | AI 解惑

仅用鼠标就搞定的第一个C++程序

仅用鼠标就搞定的第一个C++程序    学习C++,不同IDE的控制台程序,新建、点击后产生的第一个C++程序,有的仅用鼠标就能搞定,“正常显示”,而有的则需要补充些语句才能通过编译到“正常显示”状态。 这里没有别的意思,只是想说 ...…

查看全部问答>

电磁炉原来对人身体有危害啊!!!

国家统计局的数据则表明,未来五年,电磁炉在国内将有7000万至8000万台的市场潜力,市场容量将达到数百亿元。但是,当电磁炉大批走进千家万户之时,其电磁污染的病症也日益显现。 那么什么是磁泄漏呢?中国室内装饰协会室内环境监测委员会副主任赵 ...…

查看全部问答>

赛格有没有卖STM8的公司或柜台?

                                 赛格有没有卖STM8的公司或柜台?…

查看全部问答>

第三章 底层库函数

小川工作室编写,本书为LM3S的USB芯片编写,上传的均为草稿,还有没修改,可能还有很多地方不足,希望各位网友原谅! QQ:2609828265 TEL:15882446438 E-mail:paulhyde@126.com 第三章 底层库函数 3.1底层库函数简介 寄存器级编程 ...…

查看全部问答>

#define DEFC(name, address) __no_init volatile unsigned char name @ address;

各位大虾  我在430的库文件里面看到这么一句 #define DEFC(name, address) __no_init volatile unsigned char name @ address;     是什么啊…

查看全部问答>

【视频分享】系统级ESD电路保护设计考虑因素

今天和大家分享一个有关ESD电路保护设计的视频。 随着技术的发展,移动电子设备已成为我们生活和文化的重要组成部分。平板电脑和只能手机触摸技术的应用,让我们能够与这些设备进行更多的互动。同时,它也构成了一个完整的静电放电(ESD)危险环境 ...…

查看全部问答>

ADI实验电路中的经典电路---大电流驱动电路

ADI实验电路中,有一些比较经典的电路,现发上来和大伙分享 大电流驱动电路:(此电路在CN-192中) …

查看全部问答>

【EAGLE】一些常用的技巧、心得。

本帖最后由 huayuliang 于 2014-11-8 18:38 编辑 算是正式开始了吧,不过俺只能想到(用到)哪里写到哪里,结果就如之前描述的——很乱。。。 其实所谓的技巧,只是基本命令的使用,不过是和实际应用相关的一些可能你没有想过的用法而已···· ...…

查看全部问答>