msp430设计数字秒表

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使能中断
判断按键是否按下 判断是否处于暂停 状态


判断按下的按键是 哪个

计数值自加 1
是暂停按键

是清零按键
改变模式,暂停计 数值增加
清零计数值
中断结束
判断 num参数的值 并显示
作品完整度展示:实物图
团队协作展示
队员能力及团队分工 队员:范昊洋:算法设计与程序编写 周云浩:查阅相关资料并debug 姚 冠:基础部分驱动程序编写


TASSEL_1+MC_1
+TACLR +ID_0 操 作 为 : 时 钟挂载ACLK,定时器计数器 自动清除,预分频为1(不分 频),逐增模式(计数到 CCR0 值 时 清 零 重 新 开 始 并 产生中断)
程序分析
程序流程图
定期器中断标志位 置1 初始化硬件IO 口, OLED屏,定时器 设置
“最小系统设计实验答辩” “数字秒表系统设计”
“第七组” “万事屋” “队员:范昊洋 周云浩 姚冠”


1
整体简述

3 4
思考过程
作品技术实现展示 作品完整度展示
5
团队协作展示
整体简述: 设计作品
本次试验制作的是 一个数字秒表。根 据题目要求,设计 一个有暂停,清零 功能的数字秒表设 备。
定时器A

{ delay(10); num = 0; LCD_CLS(); }
}
else mode = 1; }
if(!(P1IN&BIT1)== 1)
程序分析
while(1)
{ keyscan(); if(num<10)

LCD_ShowNum(0, 0,num,3,16); else
控制 控制
Oled屏幕
LED灯
程序分析
void keyscan() { { delay(10);
按键部分程序分析:
设计目的:检测按键情况,并进行相


if(!(P2IN&BIT1)==
1)
if(mode)mode
= 0;
应操作。
1.当清零按键按下后,延时消抖,数据 清零,然后清空当前屏幕上的显示值。 2.当暂停按键按下时,改变模式(当其 为 0 时让它变为 1 ,是 1 时让它变为 0 )。
时钟挂载aclk定时器计数器自动清除预分频为1不分频逐增模式计数到ccr0值时清零重新开始并产生中断程序分析程序流程图初始化硬件io口oled屏定时器设置使能中断判断num参数的值并显示判断按键是否按下判断按下的按键是哪个改变模式暂停计数值增加清零计数值是清零按键是暂停按键是否定期器中断标志位置1判断是否处于暂停状态计数值自加1中断结束是否作品完整度展示
(2*0x10u) /* Timer A mode control: 2 - Continuous up */
(3*0x10u) /* Timer A mode control: 3 - Up/Down */ (0*0x40u) /* Timer A input divider: 0 - /1 */ (1*0x40u) /* Timer A input divider: 1 - /2 */ (2*0x40u) /* Timer A input divider: 2 - /4 */ (3*0x40u) /* Timer A input divider: 3 - /8 */ (0*0x100u) /* Timer A clock source select: 0 - TACLK */ (1*0x100u) /* Timer A clock source select: 1 - ACLK */ (2*0x100u) /* Timer A clock source select: 2 - SMCLK */ (3*0x100u) /* Timer A clock source select: 3 - INCLK */ (0x0004u) /* Timer A counter clear */ (0x0002u) /* Timer A counter interrupt enable */ (0x0001u) /* Timer A counter interrupt flag */
从左侧可看出,我们选择的


#define MC_2
#define MC_3 #define ID_0 #define ID_1 #define ID_2 #define ID_3 #define TASSEL_0 #define TASSEL_1 #define TASSEL_2 #define TASSEL_3 #define TACLR #define TAIE #define TAIFG
LCD_ShowNum(0,
0,num,2,16); else if(num<1000&&nu m>99)
0,num,5,16);
制显示位数 led(num); }
//控
程序分析
void timer_a_ioset(void){ 时 TA0CCR0 = 32768; // 定义中断计数周期 1s, 钟 频 率 为 } #pragma vector =
控制 控制
Msp430单片机
按键
如右图即为硬件系
统框图
Oled屏幕 LED灯
整体简述: 设计作品
采取的技术路线: 在主函数中,对硬件进行 初始化操作,然后循环检
Msp430单片机 按键
测按键输入和显示当前计
数值的操作。 设置定时器的频率为 1Hz , 每次中断计数值自加一, 以实现要求。
定时器A
主程序循环部分程序分析:
设计目的:检测按键情况,显示当前

计数值,并让LED灯做出相应反应
大部分语句是为了实现当显示数据长 度不同时显示不同的长度。
if(num<10000&&n
um>999)
LCD_ShowNum(0, 0,num,1,16); else if(num<100&&num >9) LCD_ShowNum(0, else LCD_ShowNum(0, 0,num,4,16);
__interrupt Timer_A0(void) // 定时器中断触发,P3输 void
32.768MHZ,32768
32768 = 1s
/

出口异或,电平翻转
{ if(mode == 0) num = num +1;
// TA0CCR0捕获/比较中 断寄存器中断使能
TA0CCTL0 = CCIE;

定时器中断部分:
每秒让计数值自加一。
TA0CTL|=TASSEL_1+ MC_1 +TACLR +ID_0;
}
程序分析
以下展示部分库文件中的设置:
#define MC_0 #define MC_1 (0*0x10u) /* Timer A mode control: 0 - Stop */ (1*0x10u) /* Timer A mode control: 1 - Up to CCR0 */
定时器部分程序分析:
设计目的:设置定时器和定时器中断 设置部分: 1.TACCR0是TA0定时器的重装载值,当 计数器值达到该值的时候溢出产生中断。 2.TA0CCTL0寄存器管理中断使能 3.TA0CTL控制寄存器的挂在时钟线路, 预分频,计数模式,自动清除中断标志 等。

TIMER0_A0_VECTOR
相关文档
最新文档