📄 jiaotongdeng.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 + -