找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 890|回复: 0
打印 上一主题 下一主题
收起左侧

看不懂下面的MSP430程序 求解析

[复制链接]
跳转到指定楼层
楼主
ID:662557 发表于 2019-12-12 16:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
刚学习单片机 看不懂下面的程序

#include<msp430g2553.h>
#define LEDWEI P2OUT
#define LEDDUAN P1OUT
unsigned long int save;
void South_Green_On()
{P2OUT&=~BIT2;}
void South_Green_Off()
{P2OUT|=BIT2;}
void South_Red_On()
{P2OUT&=~BIT3;}
void South_Red_Off()
{P2OUT|=BIT3;}
void South_Left_On()
{P2OUT&=~BIT4;}
void South_Left_Off()
{P2OUT|=BIT4;}
void West_Green_On()
{P2OUT&=~BIT5;}
void West_Green_Off()
{P2OUT|=BIT5;}
void West_Red_On()
{P2OUT&=~BIT6;}
void West_Red_Off()
{P2OUT|=BIT6;}
void West_Left_On()
{P2OUT&=~BIT7;}
void West_Left_Off()
{P2OUT|=BIT7;}
unsigned char LED[]={0xC0,0xF9,0xA4,0XB0,0X99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8e};
unsigned char timer[4];
unsigned char t1=15,kongzhi=1;
void disp_led();
void delay(long n)
{
unsigned int i;
unsigned int j;
for(i=n;i>0;i--)
for(j=100;j>0;j--)
_NOP();
}
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
CCTL0=CCIE;
TACTL=TASSEL_2+ID_3+MC_1+TACLR;
TACCR0=65000;
P1DIR&=~BIT7;//P1.7输入
P1DIR|=BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6;
P2DIR=0xff;
P1OUT|=BIT7;
P1REN|=BIT7;//使能上拉电阻
P1IE=BIT7;//P1.7口使能中断
P1IES|=BIT7;//P1.7下降沿触发
P1IFG=0;//清P1中断标志位
P2IE=0X00;

P2SEL&=~(BIT6+BIT7);
P2SEL2&=~(BIT6+BIT7);
_EINT();
South_Green_Off();
South_Left_Off();
South_Red_Off();
West_Green_Off();
West_Left_Off();
West_Red_Off();
delay(100);
South_Green_On();
South_Red_Off();
South_Left_Off();
West_Red_On();
West_Green_Off();
West_Left_Off();

while(1)
{
disp_led();
}
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{
t1--;
timer[3]=t1/10;
timer[2]=t1%10;
if(t1==0)
{
t1=15;
if(kongzhi==4)
kongzhi=1;
else
kongzhi++;
if(kongzhi==1)
{
South_Green_On();
South_Red_Off();
South_Left_Off();
West_Red_On();
West_Green_Off();
West_Left_Off();
}
else if(kongzhi==2)
{ South_Left_On();
South_Green_Off();
South_Red_On();
West_Red_On();
West_Green_Off();
West_Left_Off();
}
else if(kongzhi==3)
{
West_Green_On();
West_Red_Off();
West_Left_Off();
South_Red_On();
South_Green_Off();
South_Left_Off();
}
else if(kongzhi==4)
{
West_Left_On();
West_Green_Off();
West_Red_On();
South_Red_On();
South_Green_Of();

South_Left_Off();
}
}
}
#pragma vector=PORT1_VECTOR
__interrupt void P1_ISR(void)
{
if(P1IFG&BIT7)
{
  delay(10);
  if(!(P1IN&BIT7))
  {
   while(!(P1IN&BIT7));
   save=P2OUT;
   West_Green_Off();
   West_Red_On();
   West_Left_Off();
   South_Red_On();
   South_Green_Off();
   South_Left_Off();
   delay(10000);
   P2OUT=save;
  }
  P1IFG=0;
  return;
}
}
void disp_led(void)
{
LEDWEI&=~BIT0;
LEDWEI|=BIT1;
LEDDUAN=LED[timer[3]];
delay(10);
LEDWEI&=~BIT1;
LEDWEI|=BIT0;
LEDDUAN=LED[timer[2]];
delay(10);
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表