历史上的今天
今天是: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; } } }
史海拾趣
|
硬件电路设计(4*4矩阵式键盘及其接口设计、键输入电路) 软件设计(键扫描、去抖动、键识别及处理程序) 主要技术指标: 1、键盘包括0-9数字键、“确认”、“取消”、“∧”和“∨”键等功能键 2、A/D转换器采用16位高精度、低功耗串行A/D转换 ...… 查看全部问答> |
|
FPGA入门学习心得 刚开始接触的时候,认为很简单,不就是写写代码就okey了吗?所以混混谔谔地度过了3个月,因为刚开始的时候接触的时比较简单的算法,所以对设计的时序和性能要求不是很高,写写代码完全就可以了,所以从来没有关心底层的东西(底 ...… 查看全部问答> |
|
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不通 但是接 ...… 查看全部问答> |
|
看书遇到了几个问题怎么也搞不懂,求助于各位大大们了!!! 第一个是关于最大延时的计算! (6MHz晶振频率) MOV R5,#TIME1 LOOP2:MOV R4,#TIME2 LOOP1:NOP NOP & ...… 查看全部问答> |
|
现在我有硬件就是不晓得如何去学,我是自己学的,我C语言也是自己学的。单片机现在基本上都玩过就是没有玩过系统,所以求论坛的高手建议我该如何学习这个东西,我没有经验,我怕自己还没入门浪费太多的时间在不重要的地方了。… 查看全部问答> |
|
MSP430F5438A的最小系统,XT1外接32.768K,XT2外接25M晶振。现想用ACLK=XT1,MCLK=SMCLK=XT2。 请教,5438A的datasheet里面说是可以外接25M的,但是具体设置应该是如何?… 查看全部问答> |




