交通灯设计PPT

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//判断秒钟是否发生变化
/* uart_sendN(UART_1,3,g_time); //将计时信息通过串口1发送给PC remember=g_time[2]; //将秒数赋给临时变量 light_change(LIGHT_PORT, LIGHT_PIN_BLUE); */ //灯闪亮一次 // light_change(PORTD,7); // } } // end_while //主循环结束 return 0;
功能思路:
首先,对定时器初始化,禁止定时器1溢出中
断,设置为1s发生1次定时器溢出中断 。
再设置定时器状态和控制寄存器,以秒为最
小单位递增。
整体向串口-发送时间
功能思路:
首先,初始化UART模块,设置串口 信息、波特率,然后设置串行发送字节和 接收字节等功能函数,实现串口发送当前 时间数据。
四、代码分析
主程序
Main.c
#include "includes.h" //包含总头文件
int main(void) { uint_32 remember; //1.声明主函数使用的局部变量 //2.关总中断 enter_critical(); // 进入临界区,关中断 //3.初始化底层模块 // light_init(LIGHT_PORT, LIGHT_PIN_BLUE, LIGHT_OFF); //蓝灯初始化 light_init(LIGHT_PORT,LIGHT_PIN_1,LIGHT_ON); //初始化 light_init(LIGHT_PORT,LIGHT_PIN_2,LIGHT_OFF); light_init(LIGHT_PORT,LIGHT_PIN_3,LIGHT_ON); light_init(LIGHT_PORT,LIGHT_PIN_4,LIGHT_OFF); light_init(LIGHT_PORT,LIGHT_PIN_5,LIGHT_OFF); light_init(LIGHT_PORT,LIGHT_PIN_6,LIGHT_ON); light_init(LIGHT_PORT,LIGHT_PIN_7,LIGHT_OFF); light_init(LIGHT_PORT,LIGHT_PIN_8,LIGHT_ON);
#include "includes.h" 中断函数服务例程-----------------------------------------------------------------------//串口0接收中断服务例程 void isr_uart0_re(void) { uint_8 ch; uint_8 flag = 1; enter_critical(); ch = uart_re1(UART_0, &flag); if (0 == flag) { uart_send1(UART_0, ch); } exit_critical();


串行通信的通信原理图:
三、交通灯设计
3.1交通灯状态设计
(1)南北绿灯,东西红灯 (2)延时25s (3)南北黄灯,东西红灯 (4)延时5s (5)东西绿灯,南北红灯 (6)延时25s (7)东西黄灯,南北红灯 (8)延时5s (9)循环
开始
南北绿灯,东西红灯
延时25s
流 程 图
南北黄灯,东西红灯
延时5s
东西绿灯,南北红灯
延时25s
东西黄灯,南北红灯
延时5s
结束
3.3功能模块说明
TPM定时器
功能概述:
TPM(定时器/脉宽调制模块)共有三个模块TPM0 、TPM1、TPM2。TPM支持输入捕捉、,输出比较, 并且能够产生PWM信号来控制电机。通过异步时钟源 ,可以让计数器、输出比较和输入捕捉寄存器工作在低 功耗模式下。TPM的基本定时器部分是一个递增的计数 器,通过设定模块的溢出值,当计数器递增到该数值时 ,产生TPM中断,可以选择时钟源和溢出值设定该计数 器的频率。本实验,TPM定时设为1秒。
组员: 魏娟 戚璐 倪鑫艳 于慧琴 孙涛涛 李亚楠
一、系统概述
1.1系统背景 1.2嵌入式简介 1.3飞思卡尔简介
目 录
二、总体设计思路
2.1芯片选择 2.2十字路口状态设计图 2.3交通灯说明
三、交通灯设计
3.1交通灯状态设计 3.2流程图 3.3功能模块说明
四、代码分析 五、实验结果图
一、系统概述
1.1系统背景
随着计算机互联网行业的飞速发展
,单片机的应用愈发广泛,大到卫星,
小到家用的电子产品,无处不存在单片
机的身影,而且单片机方面的人才稀缺
,因而掌握单片机技术对于计算机专业
的学生很是重要。
1.2嵌入式简介
嵌入式系统一般指非 PC 系统,有计算机功能但又不称 之为计算机的设备或器材。它是以应用为中心,软硬件可裁减 的,适应应用系统对功能、可靠性、成本、体积、功耗等综合 性严格要求的专用计算机系统。嵌入式系统几乎包括了生活中 的所有电器设备,如掌上 PDA 、移动计算设备、电视机顶盒 、手机上网、数字电视、多媒体、等。 专门的单片微控制器是大多数嵌入式系统的核心。通过把 若干个关键的系统组成部分集成到单个芯片上,系统设计者就 可以得到小而便宜、可以操作较少外围电子设备的计算机。现 在嵌入式开发 主要是指用C#语言在微软的.NET Freamwork 环境中进行开发。
uart_init (UART_1,BUSCLK, 9600); //串口1初始化, 总线时钟24000Khz,波特率9600 uart_send_string(UART_1, "Hello TPM!\r\n"); tpm_init(TPM0,TPM_CLKSRC_PLL,10000); //4.变量赋初值 g_time[0]=0; g_time[1]=0; g_time[2]=0; remember = g_time[2]; // "时分秒"缓存初始化(00:00:00)
void isr_uart1_re(void) //串口1接收中断服务例程 { static uint_8 index=0; //收到的个数 uint_8 flag = 1; enter_critical(); if(index>2)index=0; //三个字节一收,时分秒 g_time[index]=uart_re1(UART_1,&flag); if(0==flag) index++; exit_critical(); } void isr_uart2_re(void) //串口2接收中断服务例程 { uint_8 ch; uint_8 flag = 1; enter_critical(); ch = uart_re1(UART_2, &flag); if (0 == flag) { uart_send1(UART_2, ch); } exit_critical(); }
1.3飞思卡尔简介
飞思卡尔专注于嵌入式处理解决方案。面向汽车、网络 、工业和消费电子市场,提供的技术包括微处理器、微控 制器、传感器、模拟集成电路和连接。飞思卡尔的一些主 要应用和终端市场包括汽车安全、混合动力和全电动汽车 、下一代无线基础设施、智能能源管理、便携式医疗器件 、消费电器以及智能移动器件等。 主要应用有8位微控制器(单片机)、16位微控制器( 单片机)、数字信号处理器与控制器、电源管理、RF射频 功率放大器、高性能线性功率放大器GPA、音视频家电射 频多媒体处理器、传感器等。
includes.h(应用工程总头文件)
#ifndef INCLUDES_H_ #define INCLUDES_H_ #include "common.h" #include "gpio.h" #include "light.h" #include "uart.h" #include "sysinit.h" #include "tpm.h" #include "timer.h" //定义全局变量 uint_8 g_time[3]; //记录时间的数组 #define RUN_COUNTER_MAX 1500000ul //定义小灯闪烁频率 //定义使用的调试号 #define UART_TEST UART_1 #define TEST_UART_BAUDRATE 9600UL #endif
2.2十字路口状态设计图
西

2.3交通灯说明
设计一个单片机控制交通信号灯,使其能模拟城市“十字”路
口交通信号灯的功能,并能进行某些特殊控制。 就是以绿,黄,红色三只共两组(因为东、西方向信号灯的变 化情况相同,用一组发光二极管;南、北方向信号灯的变化情况相 同,用一组发光二极管)发光二极管(LED)表示交通信号灯。
isr.h(中断底层驱动构件头文件)
#ifndef ISR_H //防止重复定义(ISR_H 开头) #define ISR_H
//用户中断向量表注册表--------------------------------------------#ifdef VECTOR_029 //1 注册串口1中断向量 #undef VECTOR_029 extern void isr_uart1_re(void); #define VECTOR_029 isr_uart1_re #endif
// 临时变量remember初始化
//5.开中断 uart_enable_re_int(UART_1); //启动串口1接收中断 tpm_enable_int(TPM0); //启动模块中断 init_critical(); //开总中断
//进入主循环 //主循环开始 for(;;) { //if (g_time[2]%10==0) // {
#ifdef VECTOR_033 //2 注册TPM0中断向量 #undef VECTOR_033 extern void tpm0_isr(void); #define VECTOR_033 tpm0_isr #endif
#endif //防止重复定义( 结尾)
中断子程序 isr.c(中断底层驱动构件源文件)
void tpm0_isr(void) //tpm定时中断 { static uint_32 TPMCounter = 0; //定时器溢出中断标志 if((TPM_SC_REG(TPM0_BASE_PTR) & TPM_SC_TOF_MASK) == TPM_SC_TOF_MASK) { TPMCounter++; } BSET(TPM_SC_TOF_SHIFT,TPM_SC_REG(TPM0_BASE_PTR)); //清标志位 if(TPMCounter > 1000) //TPM每中断1000次(即10s)闪烁一次。 { TPMCounter = 0; light_change(LIGHT_PORT,LIGHT_PIN_1); //反转小灯亮灭 light_change(LIGHT_PORT,LIGHT_PIN_2); light_change(LIGHT_PORT,LIGHT_PIN_3); light_change(LIGHT_PORT,LIGHT_PIN_4); light_change(LIGHT_PORT,LIGHT_PIN_5); light_change(LIGHT_PORT,LIGHT_PIN_6); light_change(LIGHT_PORT,LIGHT_PIN_7); light_change(LIGHT_PORT,LIGHT_PIN_8); SecAdd1(g_time); } }

在双干线的十字路口上,交通信号灯的变化时定时的,其基 本变化规律如下:
1. 绿灯亮放行后,黄灯亮警告,然后红灯亮禁止。 红灯亮禁止一定时间后,绿灯亮放行。 2. 改设计能控制东、西、南、北四个路口的红、黄、绿信 号灯正常工作: (1)当东西方向放行、南北方向禁止时,东西方向绿灯亮 25s,黄灯5s,南北方向红灯亮30s。 (2)当南北方向放行,东西方向禁止时,南北方向绿灯亮 25s ,黄灯5s,东西方向红灯亮30s。 当使两条路线交替地放行或禁止时,就可以实现定时交通 控制。
二、总体设计思路
2.1 芯片选择
芯片选择飞思卡尔的kl25芯片
选择使用飞思卡尔kl25芯片的P1口,(
P1.0~P1.7)分别接上两组八位信号灯
交通信号灯的控制电路中的核心是kl25单片机,其
内部带有4KB的FLASH,无须扩展程序存储器;交通
灯的控制没有大量的运算和暂存器,KL25芯片内的
ห้องสมุดไป่ตู้
128B RAM 已能满足要求,所以也不需要外扩RAM
相关文档
最新文档