找回密码
 立即注册

QQ登录

只需一步,快速开始

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

MSP430交通灯源程序

[复制链接]
跳转到指定楼层
楼主
ID:270665 发表于 2018-1-3 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <MSP430f249.h>
#define uchar unsigned char
#define uint  unsigned int   
uchar const led_tab[]={  0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,   
                        0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};   //共阴数码管段选码表,无小数点   
uchar disp_buf[4];        //显示缓冲区   

void delayus(uint t)
{      
  uint i;     
  while(t--)        
    for(i=1300;i>0;i--);
}  

void  timecount(uint count){
  uint i;
  disp_buf[1] = count / 10;    //对主干道计数值取十位数
  disp_buf[0] = count % 10;    //对主干道计数值取个位数   
  disp_buf[3] = count / 10;    //对支干道计数值取十位数
  disp_buf[2] = count % 10;    //对支干道计数值取个位数   
  for(i = 0;i < 25; i++) //总共循环25次,计时1s         
  {               
     P1OUT = 0;  
     P4OUT = 0;                        
     P1OUT = led_tab[disp_buf[1]];   
     P4OUT = led_tab[disp_buf[3]];            
     P2OUT = ~(BIT0+BIT2); //显示十位数              
     delayus(2);     //软件仿真时,取20不闪烁            
     P1OUT = 0;  
     P4OUT = 0;            
     P1OUT = led_tab[disp_buf[0]];  
     P4OUT = led_tab[disp_buf[2]];           
     P2OUT = ~(BIT1+BIT3); //显示个位数              
     delayus(2);     //软件仿真时,取20不闪烁         
  }
}

void system_Initial(void)
{   
  P3SEL &= 0x00;                                //选择P3为输入/输出口
  P3DIR |= 0Xff;                                //选择P3为输出功能

  P1DIR = 0xFF;            // 设置方向为输出   
  P4DIR = 0xFF;            // 设置方向为输出  
  P2DIR = BIT0 + BIT1+BIT2+BIT3;               
  P1OUT = 0x00;            //LED输出全部关闭
  P4OUT = 0x00;            //LED输出全部关闭
  P2OUT = BIT0 + BIT1+BIT2+BIT3;      
  P2IE |= BIT4+BIT5+BIT6;    //P2.2中断使能
  P2IES |= BIT4+BIT5+BIT6;   //P2.2下降沿中断
  P2IFG &=~(BIT4+BIT5+BIT6);  //P2.2清除中断标志
  _EINT();
}  

// 端口2中断服务程序  
#pragma vector=PORT2_VECTOR
__interrupt void Port_2(void)
{      

    P2IFG &= ~(BIT4+BIT5+BIT6);   //清除中断标志   
}  

//**********************************************************************
int main(void)
{      
  uchar count = 12;          //计数值      
  WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗   
  system_Initial();
  while(1)   
   {      
      if(!(0x10 & P2IN))  {
        while(1){
          for(count=15;count>=1;count--){
             P3OUT=0x04+0x08;
             timecount(count);                                          
          }

          for(count=5;count>=1;count--){
             P3OUT=0x02+0x08;
             timecount(count);      
          }

          for(count=15;count>=1;count--){
            P3OUT=0x01+0x20;
            timecount(count);      
          }

          for(count=5;count>=1;count--){
            P3OUT=0x01+0x10;
            timecount(count);      
        }      
       }
     }   
   }      
}

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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