IAR中的MSP430实现PROTEUS中的交通灯的控制

proteus

IAR

芯片使用的是MSP430G2553

#include"msp430.h"
/*
  南北方向红、黄、绿 对应p0\p1\p2  时间由p2.2与p2.3驱动
  东西方向红、黄、绿 对应p5\p6\p7  时间由p2.0与p2.1驱动
*/
unsigned char code_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管数据

void seg71s_S_N(unsigned char date_seg71_s_n){ //南北数码换显示函数
  unsigned char data=date_seg71_s_n/10;//传过来数字十的位
  unsigned char data_1=date_seg71_s_n%10;//过来数字个的位
  unsigned char bit[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//八个引脚对应输出
  
  
    for(unsigned int i=0;i<8;i++){ //循环八次输出数字的十位
    
    P2OUT&=~BIT3; //P2.3输出低电平   p2.3为时钟位
    if(code_seg[data]&bit[i]){ 
      P2OUT|=BIT2; //P2.2输出高电平  p2.2为数据位
    }
    else{
      P2OUT&=~BIT2;//P2.2输出低电平
    }
    P2OUT|=BIT3; //P2.3输出高电平   
    }
  
  
    for(unsigned int i=0;i<8;i++){ //再循环八次输出数字的个位
    P2OUT&=~BIT3; 
    if(code_seg[data_1]&bit[i]){ 
      P2OUT|=BIT2; //P2.3输出低电平   p2.3为时钟位
    }
    else{
      P2OUT&=~BIT2; //P2.2输出高电平  p2.2为数据位
    }
    P2OUT|=BIT3; 
    }
    
}

void seg71s_E_W(unsigned char date_seg71_e_w){ //东西数码换显示函数
  unsigned char data=date_seg71_e_w/10; //传过来数字十的位
  unsigned char data_1=date_seg71_e_w%10; //传过来数字个的位
  unsigned char bit[8]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  
  
  for(unsigned int i=0;i<8;i++){ //循环八次输出数字的十位
    P2OUT&=~BIT1; //P2.1输出低电平   p2.1为时钟位
    if(code_seg[data]&bit[i]){ 
      P2OUT|=BIT0; //P2.0输出高电平  p2.0为数据位
    }
    else{
      P2OUT&=~BIT0; //P2.0输出低电平
    }
    P2OUT|=BIT1; //P2.1输出高电平 
    }
  
    
    for(unsigned int i=0;i<8;i++){ //循环八次输出数字的个位

    P2OUT&=~BIT1; 
    if(code_seg[data_1]&bit[i]){ 
      P2OUT|=BIT0; 
    }
    else{
      P2OUT&=~BIT0;
    }
    P2OUT|=BIT1; 
    }
  
}

void Delay(void);//一秒延时

void main(void){ 
  WDTCTL=WDTPW+WDTHOLD;
  //P1配置
  P1SEL=0x00;
  P1SEL2=0x00;
  P1DIR=0xff;
  //P2配置
  P2SEL=0x00;
  P2SEL2=0x00;
  P2DIR=0xff;
  //东西绿27秒,南北红27秒
  //0x81  0b1000 0001
  //东西黄3秒,南北红3秒
  //0x41  0b0100 0001
  //东西红27秒,南北绿27秒
  //0x24  0b0010 0100
  //东西红3秒,南北黄3秒
  //0x22  0b0010 0010
  unsigned char light[4]={0x81,0x41,0x24,0x22};
  unsigned char b;
  unsigned char c;
  while(1){ 
    for(unsigned char i=0;i<4;i++){ //四次一组
      P1OUT=light[i];
      if(i%2){
        for(unsigned char a=3;a>0;a--){ //循环3次 
          seg71s_S_N(a);
          seg71s_E_W(a);
          Delay();//一秒延时
        }
      }
      else{ 
        for(unsigned char a=27;a>0;a--){ //循环27次
          if(i<2){ 
          b=a;
          c=a+3;
        }
          else{ 
            b=a+3;
            c=a;
          }
          seg71s_S_N(c);
          seg71s_E_W(b);
          Delay();//一秒延时
        }
      }
    }

  }
}

void Delay(void){ 
  unsigned long i;
  for(i=0;i<5700;i++){ 
  ;
  }
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值