嵌入式系统原理与应用综合设计模拟的交通灯控制器课程的设计.doc

上传人:文库蛋蛋多 文档编号:4148985 上传时间:2023-04-07 格式:DOC 页数:28 大小:1.46MB
返回 下载 相关 举报
嵌入式系统原理与应用综合设计模拟的交通灯控制器课程的设计.doc_第1页
第1页 / 共28页
嵌入式系统原理与应用综合设计模拟的交通灯控制器课程的设计.doc_第2页
第2页 / 共28页
嵌入式系统原理与应用综合设计模拟的交通灯控制器课程的设计.doc_第3页
第3页 / 共28页
嵌入式系统原理与应用综合设计模拟的交通灯控制器课程的设计.doc_第4页
第4页 / 共28页
嵌入式系统原理与应用综合设计模拟的交通灯控制器课程的设计.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《嵌入式系统原理与应用综合设计模拟的交通灯控制器课程的设计.doc》由会员分享,可在线阅读,更多相关《嵌入式系统原理与应用综合设计模拟的交通灯控制器课程的设计.doc(28页珍藏版)》请在三一办公上搜索。

1、.嵌入式系统原理与应用综合设计模拟交通信号灯控制器设计系 部:电子与信息工程系专业班级:通信工程10秋1班姓 名:学 号:小组成员:指导教师:完 成 日 期 2013年 6月目录1. 绪论12.课程设计要求及实验设备与器材22.1课程设计题目22.2课程设计目的22.3设计要求22.4实验设备与器材43.硬件系统设计53.1设计系统介绍及原理框图53.2ARMLM3S2110开发板63.3液晶屏显示系统93.4 通用输入/输出端口(GPIO)123.5管脚图134.软件设计方案144.1程序流程图144.2方案论证154.3调试过程154.4运行结果174.4.1结果分析174.4.2体会与收

2、获19参考文献20附录211. 绪论嵌入式计算机系统的出现,是现代计算机发展历史山的里程碑。嵌入式系统诞生于微型计算机时代,与通用计算机的发展道路完全不同,形成了独立的单芯片的技术发展道路。由于嵌入式系统的诞生,现代计算机领域出现了通用计算机与嵌入式计算机两大分支。不可兼顾的技术发展道路,形成了两大分支的独立发展:通用计算机按照高速、海量的技术发展;嵌入式计算机系统则为满足对象系统按照嵌入式智能化控制要求发展。由于独立的分工发展,20世纪末,现代计算机的两大分支都得到了迅猛的发展。近些年,城市的车流量日益增加,给城市交通带来了巨大的压力,特别是十字路口的通行能力不足的问题,导致了交通拥堵严重,

3、交通事故频发等诸多问题,影响到了人们的日常生活和城市的经济发展。与此同时,交通灯信号控制器作为一种交通控制工具,在疏导车辆,提高道路导通能力方面的作用也越来越显著。但是,现行的交通灯信号控制器却存在或多或少的问题,诸如交通灯信号控制器的功能不足、交通灯信号控制信号控制器的智能化程度不足、不能满足日益增长的车流量控制等问题,其中交通灯信号控制器的智能化程度则是最为重要的问题,其程度主要取决于交通信号指挥控制系统的选择,所以如提高交通灯信号控制器的智能化的关键就在于对交通灯信号指挥系统的选择上,即不同的对信号控制器功能进行定义设计的电子装置的选择。2.课程设计要求及实验设备与器材2.1课程设计题目

4、模拟交通信号灯控制器设计2.2课程设计目的通过本次综合设计,运用已学的课程知识,根据题目要求进行软硬件系统的设计和调试,对嵌入式系统原理与应用课程中涉及的芯片结构、控制原理、硬件和编程等方面有一定的感性认识和实践操作能力,从而加深对本课程知识点的理解,使学生应用知识能力、设计能力、调试能力以及报告撰写能力等方面有显著提高。2.3设计要求 利用实验系统的资源来设计一个“模拟交通灯控制器”。控制面板包括:液晶屏、2组交通灯(每组交通灯包括红和绿2个灯)、电源按键、电源指示灯和一个运行键。工作流程如下:(1) 按下电源键,电源指示灯亮;(2) 按运行键,模拟交通灯控制器工作;(3) LED实时显示当

5、前的交通灯状态;(4) 红灯和绿灯的工作顺序如下:图2.1 红灯工作顺序图图2.2 绿灯工作顺序图(5) 用2位数码管实时倒计时间,倒计时流程如下:图2.3 LED等结合数码管工作顺序图(6) 运行过程中,若再按下电源键,则控制器停止工作,电源指示灯灭。2.4实验设备与器材(1) 电源模块(2) ARM开发板LM3S2110(3) 1602液晶显示(4) LED灯3.硬件系统设计3.1设计系统介绍及原理框图(1)接通电源时或系统复位后,系统按程序给定的时间工作,即南北向通行50秒,东西向通行10秒,工作模式如表1.1所示。首先南北向通行,然后东西向通行,如此循环。(2)通行时间的设置:当需要更

6、改主、次干道的通行时间时,可以用“设置键、增加键、减少键”进行设置。第一次按“设置键”时,南北向的绿灯亮,南北向的数码管显示当前南北向的通行时间,并且按每秒2次的频率闪烁(每秒亮2次暗2次),其余的信号指示灯和东西向的数码管熄灭,此时可以用“增加键”和“减少键”来改变南北向的通行时间。按一次“增加键”或“减少键”,数码管的显示增加一秒或减小一秒,长按“增加键”或“减少键”(按下的时间超过一秒钟以上)则数码管显示的时间按每秒钟增加或减少10的速度快速变化。第二次按“设置键”时,南北向的红灯亮,南北向的数码管显示当前南北向红灯点亮时间,并且按每秒2次的频率闪烁每秒亮2次暗2次),其余的信号指示灯和

7、东西向的数码管熄灭,此时可以用“增加键”和“减少键”来改变南北向黄灯的点亮时间。第三次按“设置键”时,东西向的绿灯亮,东西向的数码管显示当前东西向的通行时间,并且按每秒2次频率闪烁,此时可以用“增加键”和“减少键”来改变东西向的通行时间。第四次按“设置键”时,东西向的红灯亮,东西向的数码管显示当前东西向红灯的点亮时间,并且按每秒2次频率闪烁,此时可以用“增加键”和“减少键”来改变东西向黄灯的点亮时间。第五次按“设置键”时,系统退出设置状态,回到交通信号灯状态,并且南北向先通行,东西向后通行。“设置键”的功能表图1.2所示。表1.1设置键的功能按“设置键”的次数第1次第2次第3次第4次第5次调整

8、内容南北向的绿灯点亮时间南北向的红灯点亮时间东西向的绿灯点亮时间东西向的红灯点亮时间恢复交通灯工作状态调整范围050秒010秒010秒050秒图3.1交通灯控制系统组成方框图3.2ARMLM3S2110开发板ARM建设选用TI LM3S2110芯片,便于设计和调试。结构概述 非对齐式数据访问,使数据能够更为有效的安置到存储器中 精确的位操作(bit-banding),不仅最大限度的利用了存储器空间而且还改良了对外设的控制(1)内部存储器 64 KB单周期Flash 可由用户管理 对flash块的保护,以2KB为单位 可由用户管理对flash的编程 可由用户定义和管理的flash保护块 16 K

9、B单周期访问的SRAM(2)通用定时器 3个通用定时器模块(GPTM),每个提供2个16-位定时器。 每个 GPTM 可被独立配置进行操作: 作为一个32位定时器 作为一个32位的实时时钟(RTC)来捕获事件 用于脉宽调解器(PWM) 32位定时器模式 可编程单次触发定时器 可编程周期定时器 当接入32.768-KHz外部时钟输入时可作为实时时钟使用 在调试期间,当控制器发出CPU暂停标志时,在周期和单次触发模式中用户可以使能中止。 16位定时器模式 通用定时器功能,并带一个8位的预分频器 可编程单次触发定时器 可编程周期定时器 在调试的时候,当控制器发出CPU暂停标志时,用户可设定暂停周期或

10、者单次模式下的计数 16位输入捕获模式 提供输入边沿计数捕获功能 提供输入边沿时间捕获功能 16位PWM模式LM3S2110 微控制器 简单的PWM模式,对PWM信号输出的取反可由软件编程决定兼容ARM FiRM的看门狗定时器 32位向下计数器,带可编程的装载寄存器 带使能功能的独立看门狗时钟 带中断屏蔽功能的可编程中断产生逻辑 软件跑飞时可锁定寄存器以提供保护 带使能/禁能的复位产生逻辑 在调试的时候,当控制器发出CPU暂停标志时,用户可以设定暂停定时器的周期(3)CAN 支持CAN协议版本2.0 part A/B 传输位速率可达1Mb/s 32个消息对象,每个都带有独立的标识符屏蔽 可屏蔽

11、的中断 可禁止TTCAN的自动重发模式 可编程设定的自循环自检操作(4)同步串行接口(SSI) 主机或者从机方式运作 可编程控制的时钟位速率和预分频 独立的发送和接收FIFO,8X16位宽的深度 可编程控制的接口,可与Freescale的SPI接口,MICROWIRE或者TI器件的同步串行接口相连 可编程决定数据帧大小,范围为4到16位 内部循环自检模式可用于诊断/调试(5)UART 完全可编程的16C550-type UART,支持IrDA 带有独立的16x8发送(TX)以及16x12接收(RX)FIFO,可减轻CPU中断服务的负担 可编程的波特率产生器,并带有分频器 可编程设置FIFO长度

12、,包括1字节深度的操作,以提供传统的双缓冲接口。 FIFO 触发水平可设为1/8, 1/4, 1/2, 3/4 和 7/8图3.2ARM2110开发板电路图3.3液晶屏显示系统1602字符型LCD模块的应用非常广泛,而各种液晶厂家均有提供几乎都是同样规格的1602模块或兼容模块,尽管各厂家的对其各自的产品命名不尽相同;1602字符型LCD模块最初采用的LCD控制器采用的是HD44780,在各厂家生产的1602模块当中,基本上也都采用了与之兼容的控制IC,所以从特性上基本上是一样的;当然,很多厂商提供了不同的字符颜色、背光色之类的显示模块。1602液晶的基本的操作分为以下四种: 状态字读操作:输

13、入 RS=低、RW=高、EP=高; 输出:DB07读出为状态字; 数据读出操作:输入 RS=高、RW=高、EP=高; 输出:DB07读出为数据; 指令写入操作:输入 RS=低、RW=低、EP=上升沿; 输出:无; 数据写入操作:输入 RS=高、RW=低、EP=上升沿; 输出:无。图3.3LCD模块的结构尺寸示意图图3.4读操作的时序图图3.5写操作的时序图1602 LCD的另外一些特性(1)AC地址指针计数器 地址指针计数器AC是可读可写的,它是DDRAM(显存)和CGRAM区作的地址指针计数器,指示当前DDRAM或CGRAM的地址。而指示着哪种存储器的地址是由MCU对1602最近写入的地址设

14、置指令的标识码决定的。地址指针计数器AC可以设置成自动加一计数器或自动减一计数器。地址指针计数器AC有两个作用,一是指示当前的DDRAM或CGRAM地址;二是为光标和闪烁的位置地址指针,指示当前光标和闪烁的位置地址。(2)显示存储器DDRAM 1602 LCD模块的控制器里拥有80个字节的显示存储器DDRAM。DDRAM用于存储当前所要显示的字符的字符代码。DDRAM的地址由地址指针计数器AC提供,MCU可以对DDRAM进行读写操作。DDRAM各单元对应着显示屏上的各字符位。(3)字符发生器与CGRAM 1602 LCD模块的控制器内部有两种字符发生器,一种是CGROM即已固化好的字模库,见后

15、面附上的字符表。MCU控制1602时,只需要写入某个字符的字符代码,1602将以其作为字模库的地址将该字符输出给驱动器显示。 另一种为CGRAM,即可随时定义的字符字模库,1602提供了64个字节的CGRAM,地址为0x000x3F。它可以生成8个5X8点阵的自定义字符或4个5X11点阵的字模库。由于1602仅使用一行5位数据作为字符点阵,所以作主CGRAM字模库仅使用存储单元字节的低5位,而高3位虽然存在但并不作为字模数据使用。 1602的控制IC提供给CGRAM的字符码为0x000x07或0x080x0F。作为5X8点阵字符的字模库时,CGRAM每8个字节为一个字符的字模数据,字模数据的顺

16、序是从上至下排列。每个字符代码都对应着CGRAM的8个字节单元;作为5X11点阵的字符的字模库,CGRAM每16个字节为一个字符的字模数据,其中前11个字节为字模数据存储单元,后5个字节与字模无关。当然,一般1602 LCD模块的字符点阵都为5X8的为多,可以在指令中设置,但如LCD屏上的字符点阵本来就为5X8而无5X11时,选用5X11是没有意义的或者会出现意想不到的现像。3.4 通用输入/输出端口(GPIO)GPIO模块由 8个物理GPIO 模块组成,每个对应一个独立的GPIO端口(端口A, 端口B, 端口C, 端口D, 端口E, 端口F, 端口G, 和端口H)。GPIO模块遵循FiRM规

17、范,并且支持11-40 个可编程的输入/输出管脚,具体取决于正在使用的外设。GPIO模块具有以下的特性:(1)可编程控制GPIO中断 屏蔽中断发生 边沿触发(上升沿,下降沿,上升、下降沿) (高或低)电平触发(2)输入/输出可承受5V电压(3)在读和写操作中通过地址线进行位屏蔽(4)可编程控制GPIO引脚(pad)配置 弱上拉或下拉电阻 2-mA, 4-mA 和 8-mA 引脚驱动 8-mA驱动的斜率控制 开漏使能 数字输入使能3.5管脚图图3.6 LM3S2110管脚图4.软件设计方案4.1程序流程图图4.1 软件流程图4.2方案论证电源模块采用单片机控制模块提供电源。改方案的优点是系统简明

18、扼要,节约成本;缺点是输出功率不高。 显示模块用数码管与点阵LED 相结合的方法因为设计既要求倒计时数字输出,又要求有状态灯输出等,为方便观看并考虑到现实情况,用数码管与LED灯分别显示时间与提示信息。这种方案既满足系统功能要求,又减少了系统实现的复杂度。输入模块采用4*4矩阵键盘,由于单片机/嵌入式实践平台的试验箱对于交通灯及数码管的控制,只用LM3S2110芯片本身与试验箱管脚相连,通过程序就可实现。综上所述,以LM3S2110芯片为核心器件,采用连接8段LED数码显示管,4*4矩阵键盘电路组成。利用单片机的优势设计电路直接在管脚上接上按键开关。因为设计的时候仅见和优化了电路,所以剩余的管

19、教资源还比较多。由于该系统对于交通灯以及数码管的控制,只需要单片机本身就可以实现,所以选择这种方案。4.3调试过程我们的程序分为2大部分,第一部分是嵌入式LM3S2110芯片上的LED灯程序的调试;第二部分是试验箱上数码显示管与4*4矩阵键盘程序的调试。先把嵌入式LM3S2110芯片与PC机连接,在PC机上安装芯片的驱动,路径为C:Program FilesIAR SystemEmbedded Workbench 5.4 KickstartarmdriversLuminaryFTDI,设定管脚为GPIOB口的PIN1PIN4,即为芯片上的LED3LED6。我们的程序是先让LED3和LED6点亮

20、50秒,再闪烁5次,再让LED4和LED5点亮10秒。可是起初是LED3和6亮完之后就是LED4和5亮,没有闪烁的过程,后来发现是程序中的延时循环出现了问题,然后经过了一次次更改,一次次错误,最后终于成功的让交通灯正确点亮。第二部分是把试验箱与嵌入式LM3S2110芯片的管脚依次相连。这次程序还没有调试就有一个大问题出现,就是管脚怎么连接。我们需要的是8位显示管模块和矩阵键盘模块,8位公阳显示管模块中的段和位我们分别定义为GPIOD口的PIN1PIN7,GPIOE口的PIN0PIN1;矩阵键盘中的横向以及纵向分别定义为GPIOA口的PIN2PIN5,GPIOC口的PIN4PIN7。然后根据我们

21、找到的资料YCHD-3和ARM2110的管脚图依次相连,然后再连接地线。第一次的问题是8个8位数码管一次只能显示一位,可是我们的倒计时需要十位和个位同时显示,正当我们无从着手时候,有同学给了我们一个建议:利用人眼的视觉暂留,让数码管不断地刷不断的闪,只要时间足够短暂那我们看起来就像是2位数码管同时亮。改程序,1秒内十位个位互相闪烁50次,果然成功了。期间有许多失败的经历,就不赘述了。第二次的问题是按键与数码管没有互相作用,程序中的提示也是定义按键为多余的警告。使能了按键后,虽然警告没有了,可是数码管依然不受按键控制。找了许多同学寻求帮助,虽然找出了我们程序中存在的问题,但是没有改变现状,又一次

22、的束手无策。最后终于发现原来是管脚的链接问题,我们忽略了矩阵键盘中的J1模块和J3模块的短接。利用跳线帽短接J1模块的2个管脚和J3模块的两个管脚。连接之后重新烧入程序,调试成功了。当按下K1键时,倒计时50秒,按下K2键时,倒计时10秒,K3键40秒,一次类推,一直到100秒。但是因为我们用了2位的8段数码管,所以当到99秒时候,自动归零。通过这次交通灯设计,本人在多方面都有所提高。通过这次交通灯设计,培养综合运用所学知识、独立分析和解决实际问题的能力,培养创新意识和创新能力,并获得科学研究的基础训练。了解所选择的ARM芯片各个引脚功能,工作方式,计数/定时,I/O口,中断等的相关原理,并巩

23、固学习嵌入式的相关内容知识。通过软硬件设计实现利用ARM芯片完成交通灯控制功能。首先查阅相关文献资料,熟悉所选ARM芯片。第二步总体设计方案规划,设计车辆遇到红灯停绿灯行情况,红绿灯时间均为60s,切换时间为10s,最后5s为黄灯闪烁。接下来 系统硬件设计,熟悉IO接口,定时器计数器工作原理。最后系统软件设计,包括交通信号灯的工作流程软件实现,用C语言编程。提高了计算能力,绘图能力,熟悉了规范和标准,同时各科相关的课程都有了全面的复习,独立思考的能力也有了提高。在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习

24、的不足和薄弱环节,从而加以弥补。4.4运行结果4.4.1结果分析把LM3S2110芯片与PC机连接后,把LED程序进行仿真,把程序烧入芯片内,LED1和LED6点亮(见图3.7),亮50秒后,闪烁5次。让LED2和LED5点亮(见图3.8),亮10秒后,闪烁5次。依次往复循环。图4.2 模块运行整体图图4.3 LED2和LED5亮4.4.2体会与收获这次课程设计带给我们的不仅仅是对课本知识的加深的理解,也锻炼了我们对于把书本知识运用到实践中的能力。平时在课堂上学到的东西有的虽然明白了,但是毕竟没有实际操作经验,操作起来容易出错;有的只是一知半解,用于实践中就出现了问题。对于知识的理解知识单纯的

25、停留在书本阶段,自己动手尝试了以后,这些知识对于我们言更加鲜活生动起来了。从刚刚开始的无从下手,到逐步的知道自己该做什么,该怎么做。不断地遇到新的问题,不断地尝试各种方法解决,即使失败了也有了经验。渐渐的发现问题,解决问题,遇到新问题,再解决问题,这种循环让我们体会到了靠自觉解决问题的成就感。从实践中直接得到的知识会比书本上老师传授所得到的知识更容易让我们掌握。当然专业知识也收获不少,当初的C语言学的半吊子,考试阶段的临时抱佛脚让我们到了关键时刻都不知道各种语句怎么用,可是又不得不写出来。当然就网上收集资料,学习别人的程序,在别人的模板上逐渐修改,渐渐地这段程序的绝大多数都是我们自己的成果了。

26、还有一些作图软件以前从未接触或者有少许接触的通过这次的锻炼也让我们熟练掌握了它们的用法。参考文献1周立功主编;ARM嵌入式系统基础教程M(第2版);北京:北京航空航天大学出版社;2008.2张崙编著;32位嵌入式系统硬件设计与调试M;北京:机械工业出版社;2005.3马洪连,等编著;嵌入式系统设计教程M;北京:电子工业出版社;2006.4王田苗主编;嵌入式系统设计与实例开发M;北京:清华大学出版社;2003.5符意德编著;嵌入式系统设计原理及应用M;北京:清华大学出版社;2004.附录#include systemInit.h#define lcden GPIO_PIN_0 /PB0;#def

27、ine lcdrs GPIO_PIN_1 /PB1;#define LED1_PERIPH SYSCTL_PERIPH_GPIOF#define LED1_PORT GPIO_PORTF_BASE #define LED1_PIN GPIO_PIN_1#define LED3_PERIPH SYSCTL_PERIPH_GPIOE#define LED3_PORT GPIO_PORTE_BASE #define LED3_PIN GPIO_PIN_0 #define LED4_PERIPH SYSCTL_PERIPH_GPIOE #define LED4_PORT GPIO_PORTE_BASE

28、 #define LED4_PIN GPIO_PIN_1 #define LED6_PERIPH SYSCTL_PERIPH_GPIOB #define LED6_PORT GPIO_PORTB_BASE #define LED6_PIN GPIO_PIN_3 unsigned char data; /PD0-PD7;unsigned int shi=48+5,ge=48; unsigned char num;unsigned char i;unsigned char ucVal; void write_com(unsigned char com) /写命令 GPIOPinWrite(GPIO

29、_PORTB_BASE,lcdrs,0x00); / lcdrs=0; GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2| GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,com);/PD=com;SysCtlDelay(5 * (TheSysClock / 4000); / 延时 5msGPIOPinWrite(GPIO_PORTB_BASE,lcden,0xFF); / lcden=1; SysCtlDelay(5 * (TheSysClock / 400

30、0); GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00); / lcden=0; void write_data(unsigned char date)GPIOPinWrite(GPIO_PORTB_BASE,lcdrs,0xFF); / lcdrs=1;GPIOPinWrite(GPIO_PORTD_BASE,GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2| GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,date);/PD=date; SysCtlDelay(5 * (TheSy

31、sClock / 4000); GPIOPinWrite(GPIO_PORTB_BASE,lcden,0xFF); / lcden=1; SysCtlDelay(5 * (TheSysClock / 4000); GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00); / lcden=0;void init()SysCtlPeriEnable(SYSCTL_PERIPH_GPIOD); /使能A端口 GPIOPinTypeOut(GPIO_PORTD_BASE, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2| GPIO_PIN_3|GPIO_PI

32、N_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7); SysCtlPeriEnable(SYSCTL_PERIPH_GPIOB); GPIOPinTypeOut(GPIO_PORTB_BASE, GPIO_PIN_0|GPIO_PIN_1); GPIOPinWrite(GPIO_PORTB_BASE,lcden,0x00); / lcden=0; write_com(0x38); /8位数据,双列,5*7字形write_com(0x0c); /显示功能开,有光标,光标闪烁write_com(0x06); /write_com(0x01); / 开始清屏 void Tim

33、er0A_ISR(void) unsigned char ucVal; ucVal = GPIOPinRead(LED1_PORT, LED1_PIN); / LED GPIOPinWrite(LED1_PORT, LED1_PIN, ucVal); ucVal = GPIOPinRead(LED6_PORT, LED6_PIN); / 翻转LED GPIOPinWrite(LED6_PORT, LED6_PIN, ucVal); SysCtlDelay(500 * (TheSysClock / 3000);GPIOPinWrite(LED1_PORT, LED1_PIN, ucVal); G

34、PIOPinWrite(LED6_PORT, LED6_PIN, ucVal); SysCtlDelay(500 * (TheSysClock / 3000); void LED2FLASH () unsigned char ucVal; ucVal = GPIOPinRead(LED1_PORT, LED1_PIN); / LED GPIOPinWrite(LED1_PORT, LED1_PIN, ucVal); ucVal = GPIOPinRead(LED6_PORT, LED6_PIN); / LED GPIOPinWrite(LED6_PORT, LED6_PIN, ucVal);

35、SysCtlDelay(500 * (TheSysClock / 3000); GPIOPinWrite(LED1_PORT, LED1_PIN, ucVal); GPIOPinWrite(LED6_PORT, LED6_PIN, ucVal); SysCtlDelay(500 * (TheSysClock / 3000); void LED3FLASH () unsigned char ucVal; ucVal = GPIOPinRead(LED3_PORT, LED3_PIN); / LED GPIOPinWrite(LED3_PORT, LED3_PIN, ucVal); ucVal =

36、 GPIOPinRead(LED4_PORT, LED4_PIN); GPIOPinWrite(LED4_PORT, LED4_PIN, ucVal); / 翻转LED SysCtlDelay(500 * (TheSysClock / 3000); GPIOPinWrite(LED3_PORT, LED3_PIN, ucVal); GPIOPinWrite(LED4_PORT, LED4_PIN, ucVal); SysCtlDelay(500 * (TheSysClock / 3000); void display() write_com(0x80+0x00); write_data(shi

37、); write_com(1); write_com(0x80+0x01);/数据指针 write_data(ge); SysCtlDelay(1000 * (TheSysClock / 4000); ge-; if(ge=47) shi-; ge=57; / 主函数(程序入口)int main(void) clockInit(); / 时钟初始化:晶振,6MHzSysCtlPeriEnable(LED1_PERIPH); / LED所在的GPIO端口 GPIOPinTypeOut(LED1_PORT, LED1_PIN); / 置LED所在管脚为输出 SysCtlPeriEnable(LED

38、3_PERIPH); / LED所在的GPIO端口 GPIOPinTypeOut(LED3_PORT, LED3_PIN); / 置LED所在管脚为输出 SysCtlPeriEnable(LED4_PERIPH); / LED所在的GPIO端口 GPIOPinTypeOut(LED4_PORT, LED4_PIN); / 置LED所在管脚为输出 SysCtlPeriEnable(LED6_PERIPH); / LED所在的GPIO端口 GPIOPinTypeOut(LED6_PORT, LED6_PIN); / 置LED所在管脚为输出 init(); int m=50,n=5,p=10,q=5

39、; while(1) for (;) int sec2; /显示数据,分十位和个位 /总共延时1s if (p=0) ucVal = GPIOPinRead(LED3_PORT, LED3_PIN); / LED GPIOPinWrite(LED3_PORT, LED3_PIN, ucVal); ucVal = GPIOPinRead(LED4_PORT, LED4_PIN); GPIOPinWrite(LED4_PORT, LED4_PIN, ucVal); SysCtlDelay(100 * (TheSysClock / 3000);for(i=0;i5;i+)/设置红灯闪5次。(1秒闪一

40、下) /倒计时 write_com(0x85); /设定上排的显示位置 sec0 = q/10; /取十位 sec1 = q%10; /取个位 for (int i=0;i2;i+) write_data(seci+48); /整型数据转换为ASC2 SysCtlDelay(100 * (TheSysClock / 4000); SysCtlDelay(800 * (TheSysClock / 4000); if(q!=0) q-; else m=50;n=5;p=10;q=5; else if (n = 0) /倒计时结束,重新开始 GPIOPinWrite(LED1_PORT, LED1_

41、PIN, 0x00); /让LED1熄灭 GPIOPinWrite(LED6_PORT, LED6_PIN, 0x00); /让LED6熄灭 GPIOPinWrite(LED4_PORT|LED3_PORT, LED4_PIN|LED3_PIN, 0xFF);/让LED3和LED4亮 /显示数据,分十位和个位 write_com(0x85); /设定上排的显示位置 sec0 = p/10; /取十位 sec1 = p%10; /取个位 for (int i=0;i2;i+) write_data(seci+48); /整型数据转换为ASC2 SysCtlDelay(100 * (TheSysC

42、lock / 4000); SysCtlDelay(800 * (TheSysClock / 4000); /总共延时1s if(p!=0) p-; elsem=50;n=5; else if(m=0) ucVal = GPIOPinRead(LED1_PORT, LED1_PIN); / LED GPIOPinWrite(LED1_PORT, LED1_PIN, ucVal); ucVal = GPIOPinRead(LED6_PORT, LED6_PIN); / 翻转LED GPIOPinWrite(LED6_PORT, LED6_PIN, ucVal); SysCtlDelay(100 * (TheSysClock / 3000); for(i=0;i5;i+)/设置绿灯一闪一闪。(相当于绿灯亮,警告还有5秒黄灯就亮了,1秒闪一下) write_com(0x85); /设定上排的显示位置 sec0 = n/10; /取十

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号