交通灯设计PPT

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

组员:魏娟戚璐倪鑫艳于慧琴孙涛涛李亚楠一、系统概述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#语言在微软的.NETFreamwork环境中进行开发。1.3飞思卡尔简介飞思卡尔专注于嵌入式处理解决方案。面向汽车、网络、工业和消费电子市场,提供的技术包括微处理器、微控制器、传感器、模拟集成电路和连接。飞思卡尔的一些主要应用和终端市场包括汽车安全、混合动力和全电动汽车、下一代无线基础设施、智能能源管理、便携式医疗器件、消费电器以及智能移动器件等。主要应用有8位微控制器(单片机)、16位微控制器(单片机)、数字信号处理器与控制器、电源管理、RF射频功率放大器、高性能线性功率放大器GPA、音视频家电射频多媒体处理器、传感器等。二、总体设计思路2.1芯片选择芯片选择飞思卡尔的kl25芯片选择使用飞思卡尔kl25芯片的P1口,(P1.0~P1.7)分别接上两组八位信号灯交通信号灯的控制电路中的核心是kl25单片机,其内部带有4KB的FLASH,无须扩展程序存储器;交通灯的控制没有大量的运算和暂存器,KL25芯片内的128BRAM已能满足要求,所以也不需要外扩RAM2.2十字路口状态设计图东西2.3交通灯说明设计一个单片机控制交通信号灯,使其能模拟城市“十字”路口交通信号灯的功能,并能进行某些特殊控制。就是以绿,黄,红色三只共两组(因为东、西方向信号灯的变化情况相同,用一组发光二极管;南、北方向信号灯的变化情况相同,用一组发光二极管)发光二极管(LED)表示交通信号灯。在双干线的十字路口上,交通信号灯的变化时定时的,其基本变化规律如下:1.绿灯亮放行后,黄灯亮警告,然后红灯亮禁止。红灯亮禁止一定时间后,绿灯亮放行。2.改设计能控制东、西、南、北四个路口的红、黄、绿信号灯正常工作:(1)当东西方向放行、南北方向禁止时,东西方向绿灯亮25s,黄灯5s,南北方向红灯亮30s。(2)当南北方向放行,东西方向禁止时,南北方向绿灯亮25s,黄灯5s,东西方向红灯亮30s。当使两条路线交替地放行或禁止时,就可以实现定时交通控制。串行通信的通信原理图:三、交通灯设计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溢出中断,设置为1s发生1次定时器溢出中断。再设置定时器状态和控制寄存器,以秒为最小单位递增。整体向串口-发送时间功能思路:首先,初始化UART模块,设置串口信息、波特率,然后设置串行发送字节和接收字节等功能函数,实现串口发送当前时间数据。四、代码分析includes.h(应用工程总头文件)#ifndefINCLUDES_H_#defineINCLUDES_H_#includecommon.h#includegpio.h#includelight.h#includeuart.h#includesysinit.h#includetpm.h#includetimer.h//定义全局变量uint_8g_time[3];//记录时间的数组#defineRUN_COUNTER_MAX1500000ul//定义小灯闪烁频率//定义使用的调试号#defineUART_TESTUART_1#defineTEST_UART_BAUDRATE9600UL#endifisr.h(中断底层驱动构件头文件)#ifndefISR_H//防止重复定义(ISR_H开头)#defineISR_H//用户中断向量表注册表---------------------------------------------#ifdefVECTOR_029//1注册串口1中断向量#undefVECTOR_029externvoidisr_uart1_re(void);#defineVECTOR_029isr_uart1_re#endif#ifdefVECTOR_033//2注册TPM0中断向量#undefVECTOR_033externvoidtpm0_isr(void);#defineVECTOR_033tpm0_isr#endif#endif//防止重复定义(结尾)中断子程序isr.c(中断底层驱动构件源文件)#includeincludes.h中断函数服务例程------------------------------------------------------------------------//串口0接收中断服务例程voidisr_uart0_re(void){uint_8ch;uint_8flag=1;enter_critical();ch=uart_re1(UART_0,&flag);if(0==flag){uart_send1(UART_0,ch);}exit_critical();}voidisr_uart1_re(void)//串口1接收中断服务例程{staticuint_8index=0;//收到的个数uint_8flag=1;enter_critical();if(index2)index=0;//三个字节一收,时分秒g_time[index]=uart_re1(UART_1,&flag);if(0==flag)index++;exit_critical();}voidisr_uart2_re(void)//串口2接收中断服务例程{uint_8ch;uint_8flag=1;enter_critical();ch=uart_re1(UART_2,&flag);if(0==flag){uart_send1(UART_2,ch);}exit_critical();}voidtpm0_isr(void)//tpm定时中断{staticuint_32TPMCounter=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(TPMCounter1000)//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);}}主程序Main.c#includeincludes.h//包含总头文件intmain(void){uint_32remember;//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);uart_init(UART_1,BUSCLK,9600);//串口1初始化,总线时钟24000Khz,波特率9600uart_send_string(UART_1,HelloTPM!\r\n);tpm_init(TPM0,TPM_CLKSRC_PLL,10000);//4.变量赋初值g_time[0]=0;//时分秒缓存初始化(00:00:00)g_time[1]=0;g_time[2]=0;remember=g_time[2];//临时变量remember初始化//5.开中断uart_enable_re_int(UART_1);//启动串口1接收中断tpm_enable_int(TPM0);//启动模块中断init_critical();//开总中断//进入主循环//主循环开始for(;;){//if(g_time[2]%10==0)//判断秒钟是否发生变化//{/*uart_sendN(UART_1,3,g_time);//将计时信息通过串口1发送给PCremember=g_time[2];//将秒数赋给临时变量light_change(LIGHT_PORT,LIGHT_PIN_BLUE);*///灯闪亮一次//light_change(PORTD,7);//}}//end_while//主循环结束return0;}五、实验结果谢谢大家

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功