当前位置:文档之家› 【完美升级版】基于LCD12864的交通信号灯本科单片机毕业论文报告

【完美升级版】基于LCD12864的交通信号灯本科单片机毕业论文报告

湖南大学电气与信息工程学院本科生单片机课程设计

题目:基于LCD12864的交通信号灯学院:电气与信息工程学院

专业:电气工程及其自动化

交通灯的历史

1868年12月10日,信号灯家族的第一个成员就在伦敦议

会大厦的广场上诞生了,由当时英国机械师德·哈特设计、制

造的灯柱高7米,身上挂着一盏红、绿两色的提灯--煤气交通

信号灯,这是城市街道的第一盏信号灯。

1914年,在美国的克利夫兰市才率先恢复了红绿灯,不过,

这时已是“电气信号灯”。稍后又在纽约和芝加哥等城市,相

继重新出现了交通信号灯。

随着各种交通工具的发展和交通指挥的需要,第一盏名副其

实的三色灯(红、黄、绿三种标志)于1918年诞生。它是三色圆

形四面投影器,被安装在纽约市五号街的一座高塔上,由于它

的诞生,使城市交通大为改善。

中国最早的马路红绿灯,则是于1928年出现在上海的英租界。

目录

第一部分开发板部分硬件介绍 (3)

一、板上资源分布 (3)

二、ADuC848简要介绍 (5)

三、LCD显示模块 (6)

第二部分交通信号灯的设计 (8)

一、题目任务设计要求 (8)

二、系统原理分析及流程框图 (8)

三、具体程序实现 (10)

四、具体操作步骤 (18)

五、设计心得体会 (19)

六、参考文献 (21)

附录一:开发板硬件图 (22)

附录二:单片机历史 (23)

第一部分开发板硬件部分介绍

一、板上资源分布

图1.1 板上资源分布

1、2、3:单片机P0、P2、P3口引出接口(有限流保护电阻);

4:上排图形点阵LCD12864的接口、下排LCD1602的接口;

5、6:两路16位ADC输入、可作差分输入;

7、8:12位DAC输出、对DAC输出进行比例放大或者跟随的运放;

9:单片机AduC848;

10:无源蜂鸣器、由单片机PWM模块输出信号控制;

11:8位数码管;

12:SPI接口;

13:RS232串口(通过串口在线下载、单步、断点、运行到某一行等方式调试程序);

14:步进电机(5V、70欧姆、6线4相)接口;

15:8路LED,从左至右为LED7~0,分别被P0.7~P0.0控制;

16:复位按键和下载按键;

17、18:IIC总线上的EEPROM AT24C08和RTC DS1307;

19:IIC接口;

20:PS2接口;

21:红外接收头;

22:功能选择和配置插针;

23:4X4矩阵式键盘或4个独立按键;

24:直流电源输入;

此外还有红外二极管(由单片机PWM模块输出信号控制)、USB 电源输入接口。

二、ADuC848的简要介绍

1、8051-based core、5V供电电压;

2、可以通过串口在线下载程序和单步、断点、运行到某一行等方式调试程序;

3、16位8通道Σ-ΔADC,片内有1.25V参考电压、buffer和PGA;

4、12位电压输出DAC、Dual 16-BIT Σ-Δ DAC;

5、32kbyte程序存储器、4kbyte用户信息Flash存储器、256RAM+2048XRAM(byte);

6、PLL(12.58 MHz max)(片外只需接32.768kHz晶振);

7、3×16位定时计数器、看门狗定时器;

8、11中断源(2优先级)、11位堆栈指针;

9、24IO+8模拟或数字输入;

10、UART、 SPI和I2C、高速115200波特率发生;

11、Power supply monitor、上电复位、Dual 200μA激励电流源。

12、单片机引脚分布

三、LCD显示模块

LCD显示信号连接图如下图所示。

图1.7 LCD信号连接

关键网络名和引脚名解释:

(1)DISCTRL0~4:显示控制信号。(2)D0~D7、DB0~DB7:数据总线。(3)E:LCD使能信号。

(4)RS:数据、指令选择信号。

(5)RW:读、写选择信号。

(6)CS1、CS2:LCD12864由两部分组成,CS1和CS2为选择信号。

板上接口4的上排位LCD12864的接口,下排位LCD1602的接口,排针和排母左对齐插入。

第二部分交通信号灯的设计

一、题目任务设计要求

1、题目设计及目的

(1)设计一智能交通信号灯。

(1)了解交通灯管理的基本工作原理

(2)熟悉ADuC848的工作原理和应用编程

(3)熟悉ADuC848并行接口的各种工作方式和应用

(4)熟悉AT89C51计数器定时器的工作方式和应用编程外部中断的方法(5)掌握LCD显示问题的解决

2、题目设计要求

(1)了解实际交通灯的变化规律(以十字路口为例)

(2)要求用LCD显示字符“红、黄、绿”(或字母r、y、g)代替相应的信号灯

(3)要求有东西、南北四组信号灯显示,并显示对应的时间

(4)时间要求倒计时显示,计时时间到,对应的信号准确切换

(5)信号灯按一定的规律闪烁,实现简单的交通管理

(6)能实现紧急事件处理(例如救护车的通行等),可用蜂鸣器报警和特殊数字显示

(7)可根据交通流量智能调整各路段的通行时间

(8)显示北京时间,可调整

二、系统原理分析及程序流程框图

1、交通灯通常指由红、黄、绿三种颜色灯组成用来指挥交通的信号灯。绿灯亮时,准许车辆通行,黄灯亮时,已越过停止线的车辆可以继续通行;红灯亮时,禁止车辆通行。

下图为一种红绿灯的显示状态图

状态一:设东西向为主干道,东西向绿灯定为20s.

状态二设定黄灯时间为5s。

状态三南北向为副干道,南北向绿灯设为10s

状态四南北向黄灯也设为5s.

紧急状态:此时为紧急状态,所有灯为红灯,所有车辆禁止通行,触发紧急状态由紧急按钮触发,再次触发,则解除紧急状态,回到原来状态。

2、车流量处理。

首先根据两条道路的车流量划分为主干道和副干道,主干道和副干道的绿灯时间设置不一样,主干道的绿灯时间设置的较长,红灯时间等于另一条道路的绿灯时间与黄灯时间之

和。其次,考虑有车流高峰时期,在本次设计中,设置北京时间18:00:00——20:00:00为车流量高峰时期,在此时期,亮灯时间会变成另一个设定值,具体设置可依据实践情况设置,本次设计中将主干道,副干道绿灯实践均延长10s.当在此时期之外时,亮灯时间为正常设定时间。

3、倒计时显示。

东西南北四个方向各有一个倒计时显示,倒计时数字表示当前亮灯的剩余时间。因为相对的方向显示相同,因而本次设计中只两个倒计时显示,一个表示南北方向,一个表示东西方向。计时的快慢通过改变对频率的计数实现。

4、北京时间显示。

本次设计中,12864LCD显示屏第一行显示北京时间的时、分、秒,时间可调。北京时间功能采用T0计时器中断来实现。ADuC848的core clock频率默认为1.572864MHz,定时器0的时钟为core初值为0,无需在定时器溢出中断中给定时器赋初值(中断溢出就开始执行中断程序,计数器为加法计数器,从0加到65536)。每65536个core clock周期将产生一次中断,在中断处理程序中累计中断次数,当有24次中断产生时即

为1秒,进行计时。

5、主程序流程图

5、交通灯显示流程图

三、具体程序实现

#include

unchar red[2]={55,35};

unint timeflag=0;

unchar state=0;

unchar state_buffer;

unchar zhugandao=20;

unchar fudao=10;

unchar key=0;

unchar weizhi=0;

bit jinjiflag=0;

bit set_flag=0;

unint i;

unchar j;

void jiaotong_con(void)

{

switch(state)

{

case 0:

displayascall(1,2,shuzi[16]);

displayascall(2,2,shuzi[16]);

displayascall(3,2,shuzi[16]);

displayascall(4,2,shuzi[16]);

displayascall(5,2,shuzi[16]);

displayascall(9,2,shuzi[16]); displayascall(10,2,shuzi[16]); displayascall(11,2,shuzi[16]); displayascall(14,2,shuzi[16]); displayascall(15,2,shuzi[16]); displayascall(16,2,shuzi[16]);

displayascall(1,4,shuzi[16]); displayascall(2,4,shuzi[16]); displayascall(3,4,shuzi[16]); displayascall(4,4,shuzi[16]); displayascall(5,4,shuzi[16]); displayascall(6,4,shuzi[16]); displayascall(9,4,shuzi[16]); displayascall(10,4,shuzi[16]); displayascall(11,4,shuzi[16]); displayascall(12,4,shuzi[16]); displayascall(13,4,shuzi[16]); displayascall(14,4,shuzi[16]); displayascall(15,4,shuzi[16]); displayascall(16,4,shuzi[16]); displayascall(1,3,shuzi[16]); displayascall(2,3,shuzi[16]);

displayascall(4,3,shuzi[16]); displayascall(7,3,shuzi[16]); displayascall(8,3,shuzi[16]); displayascall(11,3,shuzi[16]); displayascall(14,3,shuzi[16]); displayascall(15,3,shuzi[16]); displayascall(16,3,shuzi[16]); displayhanzi(3,3,table[1]); displayhanzi(5,3,table[1]); displayhanzi(4,2,table[0]); displayhanzi(4,4,table[0]); displayshuzi(12,3, green[0]); displayshuzi(12,2, red[1]); green[0]--;

red[1]--;

if(green[0]==0)

{

green[0]=zhugandao;

green[1]=fudao;

red[0]=fudao+5;

yellow[0]=5;

yellow[1]=5;

state=1; 转黄红

}

break;

case 1:

displayascall(1,2,shuzi[16]); displayascall(2,2,shuzi[16]); displayascall(3,2,shuzi[16]); displayascall(4,2,shuzi[16]); displayascall(5,2,shuzi[16]); displayascall(6,2,shuzi[16]); displayascall(9,2,shuzi[16]); displayascall(10,2,shuzi[16]); displayascall(11,2,shuzi[16]); displayascall(14,2,shuzi[16]); displayascall(15,2,shuzi[16]); displayascall(16,2,shuzi[16]);

displayascall(1,4,shuzi[16]); displayascall(2,4,shuzi[16]); displayascall(3,4,shuzi[16]); displayascall(4,4,shuzi[16]); displayascall(5,4,shuzi[16]); displayascall(6,4,shuzi[16]); displayascall(9,4,shuzi[16]);

displayascall(10,4,shuzi[16]); displayascall(11,4,shuzi[16]); displayascall(12,4,shuzi[16]); displayascall(13,4,shuzi[16]); displayascall(14,4,shuzi[16]); displayascall(15,4,shuzi[16]); displayascall(16,4,shuzi[16]); displayascall(1,3,shuzi[16]); displayascall(2,3,shuzi[16]); displayascall(3,3,shuzi[16]); displayascall(4,3,shuzi[16]); displayascall(7,3,shuzi[16]); displayascall(8,3,shuzi[16]); displayascall(11,3,shuzi[16]); displayascall(14,3,shuzi[16]); displayascall(15,3,shuzi[16]); displayascall(16,3,shuzi[16]); displayhanzi(3,3,table[2]); displayhanzi(5,3,table[2]); displayhanzi(4,2,table[0]); displayhanzi(4,4,table[0]); displayshuzi(12,3, yellow[0]--); displayshuzi(12,2, red[1]); green[0]--;

red[1]--;

if(red[1]==0)

{

red[1]=zhugandao+5;

green[0]=zhugandao;

green[1]=fudao;

red[0]=fudao+5;

yellow[0]=5;

yellow[1]=5;

state=2;

}

break;

case 2:

displayascall(1,2,shuzi[16]); displayascall(2,2,shuzi[16]); displayascall(3,2,shuzi[16]); displayascall(4,2,shuzi[16]); displayascall(5,2,shuzi[16]); displayascall(6,2,shuzi[16]); displayascall(9,2,shuzi[16]); displayascall(10,2,shuzi[16]); displayascall(11,2,shuzi[16]); displayascall(14,2,shuzi[16]); displayascall(15,2,shuzi[16]);

displayascall(16,2,shuzi[16]);

displayascall(1,4,shuzi[16]); displayascall(2,4,shuzi[16]); displayascall(3,4,shuzi[16]); displayascall(4,4,shuzi[16]); displayascall(5,4,shuzi[16]); displayascall(6,4,shuzi[16]); displayascall(9,4,shuzi[16]); displayascall(10,4,shuzi[16]); displayascall(11,4,shuzi[16]); displayascall(12,4,shuzi[16]); displayascall(13,4,shuzi[16]); displayascall(14,4,shuzi[16]); displayascall(15,4,shuzi[16]); displayascall(16,4,shuzi[16]); displayascall(1,3,shuzi[16]); displayascall(2,3,shuzi[16]); displayascall(3,3,shuzi[16]); displayascall(4,3,shuzi[16]); displayascall(7,3,shuzi[16]); displayascall(8,3,shuzi[16]); displayascall(11,3,shuzi[16]); displayascall(14,3,shuzi[16]);

相关主题
文本预览
相关文档 最新文档