1、组员: 魏娟戚璐倪鑫艳于慧琴孙涛涛李亚楠,交通灯设计,一、系统概述1.1系统背景 1.2嵌入式简介 1.3飞思卡尔简介二、总体设计思路2.1芯片选择2.2十字路口状态设计图2.3交通灯说明三、交通灯设计3.1交通灯状态设计3.2流程图3.3功能模块说明四、代码分析 五、实验结果图,目 录,一、系统概述,1.1系统背景,随着计算机互联网行业的飞速发展,单片机的应用愈发广泛,大到卫星,小到家用的电子产品,无处不存在单片机的身影,而且单片机方面的人才稀缺,因而掌握单片机技术对于计算机专业的学生很是重要。,1.2嵌入式简介,嵌入式系统一般指非 PC 系统,有计算机功能但又不称之为计算机的设备或器材。它
2、是以应用为中心,软硬件可裁减的,适应应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。嵌入式系统几乎包括了生活中的所有电器设备,如掌上 PDA 、移动计算设备、电视机顶盒、手机上网、数字电视、多媒体、等。专门的单片微控制器是大多数嵌入式系统的核心。通过把若干个关键的系统组成部分集成到单个芯片上,系统设计者就可以得到小而便宜、可以操作较少外围电子设备的计算机。现在嵌入式开发 主要是指用C#语言在微软的.NET Freamwork环境中进行开发。,1.3飞思卡尔简介,飞思卡尔专注于嵌入式处理解决方案。面向汽车、网络、工业和消费电子市场,提供的技术包括微处理器、微控制器、传感
3、器、模拟集成电路和连接。飞思卡尔的一些主要应用和终端市场包括汽车安全、混合动力和全电动汽车、下一代无线基础设施、智能能源管理、便携式医疗器件、消费电器以及智能移动器件等。主要应用有8位微控制器(单片机)、16位微控制器(单片机)、数字信号处理器与控制器、电源管理、RF射频功率放大器、高性能线性功率放大器GPA、音视频家电射频多媒体处理器、传感器等。,二、总体设计思路,2.1 芯片选择,芯片选择飞思卡尔的kl25芯片选择使用飞思卡尔kl25芯片的P1口,(P1.0P1.7)分别接上两组八位信号灯 交通信号灯的控制电路中的核心是kl25单片机,其内部带有4KB的FLASH,无须扩展程序存储器;交通
4、灯的控制没有大量的运算和暂存器,KL25芯片内的128B RAM 已能满足要求,所以也不需要外扩RAM,2.2十字路口状态设计图,东,西,2.3交通灯说明,设计一个单片机控制交通信号灯,使其能模拟城市“十字”路口交通信号灯的功能,并能进行某些特殊控制。就是以绿,黄,红色三只共两组(因为东、西方向信号灯的变化情况相同,用一组发光二极管;南、北方向信号灯的变化情况相同,用一组发光二极管)发光二极管(LED)表示交通信号灯。,在双干线的十字路口上,交通信号灯的变化时定时的,其基本变化规律如下:1. 绿灯亮放行后,黄灯亮警告,然后红灯亮禁止。 红灯亮禁止一定时间后,绿灯亮放行。2. 改设计能控制东、西
5、、南、北四个路口的红、黄、绿信号灯正常工作:(1)当东西方向放行、南北方向禁止时,东西方向绿灯亮25s,黄灯5s,南北方向红灯亮30s。(2)当南北方向放行,东西方向禁止时,南北方向绿灯亮25s ,黄灯5s,东西方向红灯亮30s。当使两条路线交替地放行或禁止时,就可以实现定时交通控制。,串行通信的通信原理图:,三、交通灯设计,3.1交通灯状态设计,(1)南北绿灯,东西红灯 (2)延时25s (3)南北黄灯,东西红灯 (4)延时5s (5)东西绿灯,南北红灯 (6)延时25s (7)东西黄灯,南北红灯 (8)延时5s (9)循环,流程图,3.3功能模块说明,TPM定时器,功能概述:TPM(定时器
6、/脉宽调制模块)共有三个模块TPM0、TPM1、TPM2。TPM支持输入捕捉、,输出比较,并且能够产生PWM信号来控制电机。通过异步时钟源,可以让计数器、输出比较和输入捕捉寄存器工作在低功耗模式下。TPM的基本定时器部分是一个递增的计数器,通过设定模块的溢出值,当计数器递增到该数值时,产生TPM中断,可以选择时钟源和溢出值设定该计数器的频率。本实验,TPM定时设为1秒。,功能思路:,首先,对定时器初始化,禁止定时器1溢出中断,设置为1s发生1次定时器溢出中断 。再设置定时器状态和控制寄存器,以秒为最小单位递增。,整体向串口-发送时间,功能思路:首先,初始化UART模块,设置串口信息、波特率,然
7、后设置串行发送字节和接收字节等功能函数,实现串口发送当前时间数据。,四、代码分析,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_time3; /记录时间的数组 #define RUN_COUNTER_MAX 1500000ul /
8、定义小灯闪烁频率/定义使用的调试号 #define UART_TEST UART_1 #define TEST_UART_BAUDRATE 9600UL#endif,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#ifdef VECTOR_033 /2 注
9、册TPM0中断向量 #undef VECTOR_033 extern void tpm0_isr(void); #define VECTOR_033 tpm0_isr #endif#endif /防止重复定义( 结尾),中断子程序 isr.c(中断底层驱动构件源文件)#include “includes.h“中断函数服务例程-/串口0接收中断服务例程 void isr_uart0_re(void) uint_8 ch;uint_8 flag = 1;enter_critical();ch = uart_re1(UART_0, ,void isr_uart1_re(void) /串口1接收中断服
10、务例程 static uint_8 index=0; /收到的个数uint_8 flag = 1; enter_critical();if(index2)index=0; /三个字节一收,时分秒g_timeindex=uart_re1(UART_1, ,void tpm0_isr(void) /tpm定时中断 static uint_32 TPMCounter = 0; /定时器溢出中断标志if(TPM_SC_REG(TPM0_BASE_PTR) ,主程序 Main.c #include “includes.h“ /包含总头文件int main(void) uint_32 remember;
11、/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_
12、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);,uart_init (UART_1,BUSCLK, 9600); /串口1初始化, 总线时钟24000Khz,波特率9600 uart_send_string(UART_1, “Hello TPM!rn“);tpm_init(TPM
13、0,TPM_CLKSRC_PLL,10000);/4.变量赋初值g_time0=0; / “时分秒“缓存初始化(00:00:00)g_time1=0;g_time2=0;remember = g_time2; / 临时变量remember初始化/5.开中断uart_enable_re_int(UART_1); /启动串口1接收中断tpm_enable_int(TPM0); /启动模块中断init_critical(); /开总中断,/进入主循环/主循环开始for(;)/if (g_time2%10=0) /判断秒钟是否发生变化/ /* uart_sendN(UART_1,3,g_time); /将计时信息通过串口1发送给PCremember=g_time2; /将秒数赋给临时变量light_change(LIGHT_PORT, LIGHT_PIN_BLUE); */ /灯闪亮一次/ light_change(PORTD,7);/ / end_while/主循环结束return 0; ,五、实验结果,谢谢大家,