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

📄 jiaotongdeng.c

📁 msp430f449功能模块的程序
💻 C
字号:
//乡村小路交通灯                   

#include <msp430x44x.h>
char digit[16]={0X7B,0X12,0X4F,0X1F,0X36,0X3D,0X7D,0X13,0X7F,0X3F,0X77,0X7C,0X69,0X5E,0X6D,0X65}; //LCD不带小数点显示译码表
char digit1[16]={0XFB,0X92,0XCF,0X9F,0XB6,0XBD,0XFD,0X93,0XFF,0XBF,0XF7,0XFC,0XE9,0XDE,0XED,0XE5}; 
void LCD_Init(void); //夜晶显示初始化函数声明

void Key(void);
void delay(int v);             //延时子程序

unsigned data1;//全局变量,用于传递时间信值
unsigned data2; //全局变量,用于传递计满数就停止计数的时间值
unsigned kk,z1;
unsigned int i; //设置变量
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; //设置看门狗控制寄存器,关看门狗
//FLL_CTL0&=0XBF; //主时钟为8M
LCD_Init(); //调用LCD显示初始化子程序
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;
  // P2OUT=0XDE;
   state=0;
while(1) //无限次while循环
  {
  x1=data1/10;  //个位
  z1=data1%10;
  y1=state;//P1IN;//data1/10;  //十位
  
 LCDMEM[0]=digit[z1]; //分别显示整数位和三位小数位
 LCDMEM[1]=digit[x1];
 LCDMEM[2]=digit[y1]; 
 LCDMEM[3]=digit1[y1];
  
  
  //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表示小路无车
        
   }
}

void LCD_Init(void)  //LCD初始化子程序 
{
 FLL_CTL0|=XCAP14PF; //操作FLL+
 LCDCTL=LCDON+LCD4MUX+LCDP1; //液晶使用4MUX模式,使用S0~S17段
 BTCTL=BTFRFQ1; //使用基本定时器提供液晶时钟
 P5SEL=0XFC; //Common与Rxx都选择 
 for(i=0;i<7;i++)
 {
  LCDMEM[i]=0;  //都显示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 + -