实验:MSP430F249 数码管计数到60自动清零
Date: March 14, 2023
基础设定:
IAR基础设置:设置设备与输出文件及格式
实验:MSP430F249 数码管计数到60自动清零
具体内容:
MSP430F249 数码管计数到60自动清零
仿真图:
Code: 详细注释
#include<msp430x24x.h> /* 实现思路: 首先,采用晶振实现每秒准确定时,并调用中断函数,发送信号给扫描器,同时也设定到60秒复位。 其次,实现数码管扫描已发送的信号并显示LED */ //定义两个数组 unsigned dis_buf[2]={0}; //数组中有两个位置,一个给十位,一个给个位 unsigned char counter=0; //共阴极数码管缓存区 unsigned char Led_Tab2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //延时函数 void delay(unsigned i){ do(i--); while(i!=0); } //数码管扫描 void scan(){ for(unsigned char i=0;i<40;i++){ P5OUT=BIT1; //0010 => 让十位亮 0010, p5.1高电频,p5.0低电平(接地) P4OUT=0; P4OUT=Led_Tab2[dis_buf[1]]; //送段码,显示十位数 delay(100); //延长灯亮度时间(先让十位显示) P5OUT=BIT0; //0001 => 让个位亮 P4OUT=0; P4OUT=Led_Tab2[dis_buf[0]];//送段码,显示个位数 delay(100); //让两个数码管同时显示 } } void main(void){ /* 功能:预处理 */ //关闭看门狗 WDTCTL= WDTPW + WDTHOLD; //芯片引脚输入输出方向 P3DIR=0x01; P3OUT=0X01; P4DIR=0xff; P4OUT=0xff; P5DIR=0x03; P5OUT=0xff; //初始状态数码管不亮 /* 功能:定时(采用晶振计算定时,计算1s时长) */ CCTL0=CCIE; //启动Iimer_A定时器 CCR0 = 32768; //晶振频率 TACTL = TASSEL_1+MC_1; // _EINT(); //中断允许触发器 /* 功能:点亮并刷新LED */ //不断保持数码管扫描 while(1){ scan(); } } //中断函数 #pragma vector=TIMERA0_VECTOR __interrupt void Timer_A (void){ P3OUT^=0x01; counter++; //功能:计数到60归零 if(counter==61) counter=0; //修改计数器的定时范围 dis_buf[1]=counter/10;//取门数值前十位数 dis_buf[0]=counter%10;//取门数值的个位数 }
运行结果:没有任何报错和警告
问题&解决:
1.仿真运行时,按键按下灯不亮,或者一直亮
解决:重启proteus软件
2.仿真报Unrecognized opcode at 0x000006: 0x0000的错误
解决:设备问题,IAR软件中选中MSP430F249