用lpc2124实现简单交通灯控制系统代码
时间: 2023-12-22 09:04:03 浏览: 122
基于PLC的交通灯控制程序
以下是基于LPC2124的简单交通灯控制系统代码,其中使用了GPIO模块和定时器模块:
```c
#include <lpc21xx.h>
#define RED_LIGHT_PIN (1 << 16) // 红灯引脚 P0.16
#define YELLOW_LIGHT_PIN (1 << 17) // 黄灯引脚 P0.17
#define GREEN_LIGHT_PIN (1 << 18) // 绿灯引脚 P0.18
#define RED_LIGHT_TIME 10000 // 红灯亮的时间,单位为毫秒
#define YELLOW_LIGHT_TIME 5000 // 黄灯亮的时间,单位为毫秒
#define GREEN_LIGHT_TIME 10000 // 绿灯亮的时间,单位为毫秒
void delay_ms(unsigned int ms) // 延时函数,单位为毫秒
{
unsigned int i, j;
for(i = 0; i < ms; i++)
{
for(j = 0; j < 2000; j++);
}
}
void init_timer0(void) // 初始化定时器0
{
T0CTCR = 0x0; // 设置为定时器模式
T0PR = 59; // 设置分频系数为60,即定时器时钟频率为1MHz
T0MR0 = 999; // 设定计数器的上限值为1000,即1ms中断一次
T0MCR = 0x3; // 设置为计数器归零后自动重载,并产生中断
VICVectAddr4 = (unsigned long)T0_ISR; // 将定时器0中断服务程序的地址放入向量表中
VICVectCntl4 = 0x20 | 0x4; // 将定时器0的中断向量号设置为4,使能中断
T0TCR = 0x2; // 复位并停止定时器
}
void init_gpio(void) // 初始化GPIO
{
IO0DIR |= RED_LIGHT_PIN | YELLOW_LIGHT_PIN | GREEN_LIGHT_PIN; // 将红、黄、绿三个灯的引脚配置为输出
IO0SET = RED_LIGHT_PIN; // 将红灯设置为亮
}
void T0_ISR(void) // 定时器0中断服务程序
{
static unsigned int red_light_cnt = 0, yellow_light_cnt = 0, green_light_cnt = 0;
static unsigned char light_state = 0; // 红灯0,黄灯1,绿灯2
T0IR = 0x1; // 清除定时器0中断标志位
switch(light_state)
{
case 0: // 红灯亮
red_light_cnt++;
if(red_light_cnt >= RED_LIGHT_TIME)
{
red_light_cnt = 0;
IO0CLR = RED_LIGHT_PIN; // 红灯灭
IO0SET = YELLOW_LIGHT_PIN; // 黄灯亮
light_state = 1; // 进入黄灯状态
}
break;
case 1: // 黄灯亮
yellow_light_cnt++;
if(yellow_light_cnt >= YELLOW_LIGHT_TIME)
{
yellow_light_cnt = 0;
IO0CLR = YELLOW_LIGHT_PIN; // 黄灯灭
IO0SET = GREEN_LIGHT_PIN; // 绿灯亮
light_state = 2; // 进入绿灯状态
}
break;
case 2: // 绿灯亮
green_light_cnt++;
if(green_light_cnt >= GREEN_LIGHT_TIME)
{
green_light_cnt = 0;
IO0CLR = GREEN_LIGHT_PIN; // 绿灯灭
IO0SET = RED_LIGHT_PIN; // 红灯亮
light_state = 0; // 进入红灯状态
}
break;
default:
break;
}
}
int main(void)
{
init_timer0(); // 初始化定时器0
init_gpio(); // 初始化GPIO
T0TCR = 0x1; // 启动定时器0
while(1)
{
}
}
```
在该程序中,使用了GPIO模块控制红、黄、绿三个灯的亮灭。在定时器0中断服务程序`T0_ISR`中,根据当前的灯的状态来控制灯的亮灭。在主函数中,先初始化定时器0和GPIO,然后启动定时器,进入死循环。
阅读全文