⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 msp430f449功能模块的程序
💻 C
字号:
//乡村小路交通灯  
//小路有传感器 P1.0,有车时,两路按照时间交换红绿灯,
//无车时,大路一直绿灯,
// 小路绿灯时,若无车立即向小路红灯,大路绿灯转换                     
#include <msp430x44x.h>
void Key(void);
void delay(int v);             //延时子程序

unsigned data1;//全局变量,用于传递时间信值
unsigned data2; //全局变量,用于传递计满数就停止计数的时间值
unsigned kk,z1;

void main (void)
{
unsigned state;
unsigned x1,y1;
unsigned char seg[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
WDTCTL= WDTPW + WDTHOLD; //设置看门狗控制寄存器,关看门狗
TACTL = TASSEL0 + TACLR; // 设置定时器A控制寄存器,
                         // TASSEL0=0x0100,选择辅助时钟ACLK,
                         // TACLR=0x0004,清除定时器A计数器
CCTL0 = CCIE;  //设置捕获/比较控制寄存器,CCIE=0x0010,使能捕获比较中断
CCR0 =16384;   //设置捕获/比较寄存器,初始值为16384,对于32768Hz的频率,相当于0.5s

TACTL |= MC0; //设置定时器A控制寄存器,MC0=0x0010,使计数模式为增计数
_EINT();   //使能中断,这是一个C编译器支持的内部过程。

//p3,p4,p5初始化
   P3DIR =0XFF; //P3为输出
   P4DIR=0XFF;//P4为输出
   P5DIR=0XFF;//P5为输出
   P2DIR=0XFF;//P2连接 二极管 
   P2OUT=0XDE;
   state=0;
while(1) //无限次while循环
  {
  x1=data1/10;  //个位
  z1=data1%10;//十位
  y1=state;  
  P4OUT=seg[x1]; //显示个位
  P3OUT=seg[z1];//显示十位
  P5OUT=seg[y1]; 
  Key();
   if( state==0 && data1==4 )
        {P2OUT=0XDE;  //主路红,小路黄
         state=1;
         data1=0;
        }  
   if(state==1 && data1>=7 && kk==1) //KK=1表示小路有车
      {P2OUT=0XEE;    //主路绿,小路红?
      state=2;
      data1=0;}
   if( state==2 && data1==4 )
      {P2OUT=0XF3;    //主路黄,小路红
      state=3;
      data1=0;}
   if(state==3 && (data1==9 || kk==0))
      {P2OUT=0XF5;
      state=0;
      data1=0;}  //0状态,主路红,小路绿 KK=0表示小路无车
        
   }
}
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void) 
//interrupt[TIMERA0_VECTOR] void Timer_A (void) //定时器A的CC0中断处理程序
                      //TIMERA0_VECTOR=6*2,等于基地址0xFFE0+12=0xFFEC
{
	//P3OUT ^= BIT7; //将P3.7引脚取反,就是使发光二极管闪烁
	data1++;
	if (data1>=91)
	data1=0;
}

void delay(int v)             //键盘判断延时子程序
     {
       while(v!=0) 
       v--;
     }

 void Key(void)           //接P1.0的按键函数
{
  if(P1IN==0xFE)//如果按键按下
 {
    delay(2666);
    if(P1IN ==0xFE)                          //如果按键按下
        kk=0;
  }
 else
    kk=1;}  
 
 
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -