您的当前位置:首页正文

基于51单片机的流水灯系统设计

2020-12-08 来源:步旅网
基于单片机的交通控制系统模拟设计

1. 设计思路 ........................................................................................................................................... 2 1.1 电源模块 ...................................................................................................................................... 3 1.2 显示模块 ...................................................................................................................................... 3 1.3 花样灯模块 .................................................................................................................................. 3 2 单片机花样灯与数码显示系统总体设计 ........................................................... 错误!未定义书签。

2.1三个模块的阐述

2.2单片机花样灯与数码显示控制系统的通行方案设计 ................................. 错误!未定义书签。 2.3单片机花样灯与数码显示控制系统的功能要求 ........................................ 错误!未定义书签。 2.4单片机花样灯与数码显示控制系统的基本构成及原理 ............................ 错误!未定义书签。 3花样灯与数码显示系统的硬件设计 ................................................................................................... 7 3.1 AT89C51单片机简介 ................................................................................................................... 8 3.1.1 AT89C51单片机的主要特性 ................................................................................................ 8 3.1.2 主要引脚功能 ..................................................................................................................... 10 3.2 系统硬件总电路构成及原理 ..................................................................................................... 11 3.2.1系统硬件电路构成 .............................................................................................................. 12 3.2.2系统工作原理 ...................................................................................................................... 12 4系统软件程序的设计......................................................................................................................... 15 4.1 程序主体设计流程 ..................................................................................................................... 15 4.2 理论基础知识 ............................................................................................................................ 16 4.2.1数组及while、switch等语句 ................................................................. 错误!未定义书签。 4.2.2软件延时原理 ......................................................................................... 错误!未定义书签。 4.3程序模块设计 ................................................................................................ 错误!未定义书签。 4.3.1花样灯的设计 ......................................................................................... 错误!未定义书签。 4.3.2 LED数码管显示 ..................................................................................... 错误!未定义书签。 4.4 系统软件调试 ............................................................................................................................. 20 4.4.1 proteus仿真 ......................................................................................................................... 20 4.4.2keil仿真 .............................................................................................................................. 20 参考文献……………………………………………………………………………………………..17 设计心得体会………………………………………………………………………………………...18 附录……………………………………………………………………………………………………19

1

1

基于单片机的交通控制系统模拟设计

基于单片机的花样流水灯及其数码显示技术

摘要:自计算机问世以来,单片机技术在社会各领域中得到了广泛的应用。在流水灯控制系统中,单片机更是取代了由齿轮调节延迟时间的旧式市发展速度,成为日后此系统中的核心部分。由于单片机具有一些突出的优点:体积小、重量轻、电源单一、功耗低;功能强、价格低;数据大都在单片机内部传送,运行速度快、抗干扰能力强、可靠性高,所以单片机被广泛的应用于测控系统、数据采集、智能仪器仪表、机电一体化产品、智能接口、计算机通信以及单片机的多级系统等领域。本文主要讲的是单片机,课题名称为多按键花样流水灯,它使我们学会了如何使用单片机控制我们日常生活中的多设备设施的应用。通过本课题的设计以后,使我了解到了单片机的许多方面的应用。

关键词:花样灯 单片机 数码管

1. 设计思路

(1)为了使设计具有更强的针对性和实用性,使用单片机设计的控制方案,基于AT89C51的单片机设计方案。

(2)确定系统控制的总体设计,包括流水灯变化方案设计以及系统应拥有的各项功能,在这里,本设计除了有流水灯状态控制能实现基本的变化功能,还增加了数码管显示提示。

(3)设计分为3个模块,分别为电源模块,数码显示模块,花样灯模块,并对3个模块进行充分的校正和完善。

(4)进行软件系统的设计,对于本系统,本组采用单片机C语言编写,

2

基于单片机的交通控制系统模拟设计

对单片机内部结构和工作情况做了充足的研究,了解延时原理,总体上完成了软件的编写。

2 花样流水灯与数码显示系统总体设计

2.1三个模块的阐述

2.1.1电源模块

电源提供的方案

为使模块稳定工作,须有可靠电源。因此考虑了两种电源方案: 方案一:采用独立的稳压电源。此方案的优点是稳定可靠,且有各种成熟 电路可供选用;缺点是各模块都采用独立电源,会使系统复杂,且可能影响电路电平。

方案二:采用单片机控制模块提供电源。改方案的优点是系统简明扼要, 节约成本;缺点是输出功率不高。 综上所述,我选择第二种方案。 电源模块仿真效果图1-1

2.1.2 显示模块

数码管显示方案

该系统要求完成计数功能。基于上述原因,我考虑了二种方案:

3

基于单片机的交通控制系统模拟设计

方案一:采用数码管显示。这种方案只显示有限的符号和数码字符,简单,方便。

方案二:采用点阵式LED 显示。这种方案虽然功能强大,并可方便的显示各种英文字符,汉字,图形等,但实现复杂,且须完成大量的软件工作。 综上所述,我选择第一种方案。 数码管显示模块仿真图1-2:

2.1.3 花样灯模块:

本方案采用3种变化形式,且3种方式依次按顺序变化,采用灯作为一个系统。

花样灯仿真效果图1-3:

图1-1

4

8个LED基于单片机的交通控制系统模拟设计

图1-2 图1-3

2.2单片机花样流水灯与数码显示系统的通行方案设计

1)系统采用8个LED灯,一个数码显示器,及电源。

2)流水灯有3种变化方式。 第一种:LED灯由L1---L8逐个变亮;

第二种;L1,L8亮,接着L2,L7亮,再接下来L3,L6亮,然后L4,L5亮,再这样反循环一次。

第三种;L1,L3,L5,L7,L2,L4,L6,L8依次亮。 且三种方式按顺序执行,成花样流水灯状。

3)方式1.2数码显示管是用来记录亮灯的个数,方式3是用来记录哪一个灯亮。

4)具体的数据及其显示如表2-1所示。

2.3 单片机花样灯与数码显示系统的功能要求

系统要满足稳定,准确,快速的三个基本要求。

1)稳定:就是基本上实现了方案设计思路上的变化样式,并且不会出现错误

5

基于单片机的交通控制系统模拟设计

和紊乱。

2)准确; 即系统的偏差接近可允许范围之内,方可认为准确。

3)快速:顾名思义,就是系统的运行速度可以调整,并且不会影响到系统的其他性能指标即可。

2.4单片机花样灯与数码显示系统的基本构成及原理

单片机设计流水灯控制系统,可用单片机直接控制流水灯的状态变化,不同的程序控制不同的变化状态,本次仅仅分为3种形式变化,当然还可以有更多的变化。

据此,本设计系统以单片机为控制核心,连接成最小系统,由按键设置模块产生输入,流水灯模块,数码管显示模块接受输出。系统的总体框图如上1-4所示。

LED数码管显示 最小系统 外围接口电路 单片机 按键 控制电路 LED流水灯

图1-4系统的总体框图

6

L1 L2 L3 L4 L5 L6 L7 L8 数码管计数 基于单片机的交通控制系统模拟设计 方式1 1 1 1 1 1 1 1 1 方式1 2 1 1 1 1 1 1 1 方式1 3 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 1 0 0 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 7 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 2 3 4 5 6 7 8 2 4 6 8 8 6 4 2 1 3 5 7 2 4 6 8 0 0 基于单片机的交通控制系统模拟设计

3花样灯与数码显示系统的硬件设计

3.1 AT89C51单片机简介

AT89C51是一种带4K字节闪烁可编程可擦除只读存储器

(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

3.1.1 AT89C51单片机的主要特性

与MCS-51 兼容 ,4K字节可编程闪烁存储器 ,寿命:1000写/擦循环,数据保留时间:10年,全静态工作:0Hz-24Hz,三级程序存储器锁定,128*8位内部RAM,32可编程I/O线,两个16位定时器/计数器,5个中断源(两个外部中断源和3个内部中断源) ,可编程串行通道,低功耗的闲置和掉电模式,片内振荡器和时钟电路。 定时器原理

定时器工作的基本原理其实就是给初值,让它不断加1直至减完为模值,这个初值是送到TH和TL中的。它是以加法记数的,并能从全1到全0时自动产生溢出中断请求。因此,我们可以把计数器记满为零所需的计数值,即所要求的计数值设定为C,把计数初值设定为TC 可得到如下计算通式:

8

基于单片机的交通控制系统模拟设计

TC=M-C

式中,M为计数器模值。计数值并不是目的,目的是时间值,设计1次的时间,即定时器计数脉冲的周期为T0,它是单片机系统主频周期的12倍,设要求的时间值为T,则有C=T/T0。计算通式变为:

T=(M-TC)T0

模值和计数器工作方式有关。在方式0时M为8192;在方式1时M的值为65536;在方式2和3为256。就此可以算出各种方式的最大延时。如单片机的主脉冲频率为12MHZ,经过12分频后,若采用方式0最大延时只有8.129毫秒,采用方式1最大延时也只有65.536毫秒。这就是为什么扫描周期为50ms的原因,

若使用软件则会耽搁程序流程,显然不可行。相反,时间计时方面却不可能只用计数器,因为显然1秒钟已经超过了计数器的最大定时间,所以我们还必须采用定时器和软件相结合的办法才能解决这个问题。

9

基于单片机的交通控制系统模拟设计

图3 AT89C51系列单片机的内部结构示意图

3.1.2 主要引脚功能

图4 AT89C51引脚图 ·VCC:电源电压 ·GND:接地

·P0口:P0口是一组8位双向I/0口。P0口即可作地址/数据总线使用,又可以作为通用的I/O口使用。当CPU访问片外存储器时,P0口分时先作低8位地址总线,后作双向数据总线,此时,P0口就不能再作I/O口使用了。在访问期间激活要使用上拉电阻。 ·P1口:Pl 是一个带内部上拉电阻的8准位双向I/O口,P1作为通用的I/O口使用。 ·P2 口:P2 是一个带有内部上拉电阻的8 位准双向I/O 口,P2即可作为通用的I/O口使用,也可以作为片外存储器的高8位地址总线,与P0口配合,组成16位片外存储器

10

基于单片机的交通控制系统模拟设计

单元地址。

·P3 口:P3 口是一组带有内部上拉电阻的8 位准双向I/0 口。P3 口除了作为通用的I/O口使用之外,每个引脚还具有第二功能,具体分配如表2

表2 具有第二功能的P3口引脚 端口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 第二功能: RXD(串行输入口) TXD(串行输出口) /INT0(外中断0) / INT1(外中断1) T0(定时/计数器0外部输入) T1(定时/计数器1外部输入) / WR(外部数据存储器写选通) P3.7

/ RD外部数据存储器读选通) ·RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。WDT 溢出将使该引脚输出高电平,设置SFR AUXR的DISRT0 位(地址8EH)可打开或关闭该功能。DISRT0位缺省为RESET输出高电平打开状态。

·ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的1/6 输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。对F1ash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条M0VX和M0VC指令ALE才会被激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。

·PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S51 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。当访问外部数据存储器,没有两次有效的PSEN信号。

·EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。F1ash存储器编程时,该引脚加上+12V的编程电压Vcc。

·XTAL1:振荡器反相放大器及内部时钟发生器的输入端。

——

————

————

————

————

————

3.2 系统硬件总电路构成及原理

实现本设计要求的具体功能,可以选用AT89C51单片机及外围器件构成最小控制系统,8个发光二极管分成3种变化方式,数码显示管进行计数。

11

基于单片机的交通控制系统模拟设计

3.2..1系统硬件电路构成

本系统以单片机为核心,系统硬件电路由状态灯,数码管显示,按键,组成。其具体的硬件电路总图如图1-5所示。

实物图如1-6所示。

3.2..2系统工作原理

先对系统进行初始化,之后再调用子程序入单片机内。分别控制循环彩灯

及其数码管显示模块。(以上两个模块及其工作方式都已经在上面提到)之后就是对程序的无限循环了,达到3种方式不停循环的目的,可以实现手动关闭。

12

基于单片机的交通控制系统模拟设计

图1-5 基于单片机的流水灯控制系统电路图

13

基于单片机的交通控制系统模拟设计

图1-6,硬件结构

14

基于单片机的交通控制系统模拟设计

4系统软件程序的设计

4.1 程序主体设计流程

全部控制程序实际上分为若干模块:键盘设置处理程序,状态灯控制程序,LED显示程序紧停程序等。

整个软件程序、流程图如图1-7所示。

开始 初始化 调用子程序

手动关闭 无限循环 循环彩灯 数码管显示

15

基于单片机的交通控制系统模拟设计

4.2 理论基础知识

4.2.1数组及while,switch,等语句

数组:所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。

While语句: while语句格式为: while(表达式) 语句;/*循环体*/

这里的表达式是循环能否继续下去的条件,而语句是循环体。只要表达式为真,则执行循环体内语句。否则终止循环,执行循环体外语句。 switch语句 switch语句格式为: switch(表达式) {

case 常量表达式1: 语句1 case常量表达式2: 语句2 .

16

基于单片机的交通控制系统模拟设计

. .

case常量表达式n: 语句n default: 语句n+1 } 说明

switch后面的括号内的表达式,ANSI标准允许为任何类型.

当表达式与某一个case后面的常量表达式相等时,就执行case后面的语句,若没有匹配,则执行default后面的语句.

每一个case的常量表达式的值须互不相同,否则便会出现矛盾. 各个case和default的出现次序不影响结果.

执行完一个case语句,流程就转移到下一个case并继续执行.因此在case的分支后,加break语句来跳出switch语句.

4.2.2软件延时原理

单片机因具有体积小、功能强、成本低以及便于实现分布式控制而有非常广泛的应用领域[1]。单片机开发者在编制各种应用程序时经常会遇到实现精确延时的问题,比如按键去抖、数据传输等操作都要在程序中插入一段或几段延时,时间从几十微秒到几秒。有时还要求有很高的精度,如使用单总线芯片DS18B20时,允许误差范围在十几微秒以内[2],否则,芯片无法工作。用51汇编语言写程序时,这种问题很容易得到解决,而目前开发嵌入式系统

17

基于单片机的交通控制系统模拟设计

软件的主流工具为C语言,用C51写延时程序时需要一些技巧[3]。因此,在多年单片机开发经验的基础上,介绍几种实用的编制精确延时程序和计算程序执行时间的方法。

实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行。

单片机系统一般常选用11.059 2 MHz、12 MHz或6 MHz晶振。第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。本程序中假设使用频率为12 MHz的晶振。最长的延时时间可达216=65 536 μs。若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。

在实际应用中,定时常采用中断方式,如进行适当的循环可实现几秒甚至更长时间的延时。使用定时器/计数器延时从程序的执行效率和稳定性两方面考虑都是最佳的方案。但应该注意,C51编写的中断服务程序编译后会自动加上PUSH ACC、PUSH PSW、POP PSW和POP ACC语句,执行时占用了4个机器周期;如程序中还有计数值加1语句,则又会占用1个机器周期。这些语句所消耗的时间在计算定时初值时要考虑进去,从初值中减去以达到最小误差的目的。

4.3程序模块的设计

4.3.1花样灯的设计

case 0:P2=0x10;P0=tableNUM[led_point]; case 1:P2=0x20;P0=tableNUM[led_point];

18

基于单片机的交通控制系统模拟设计

case 2:P2=0x40;P0=tableNUM[led_point]; case 3:P2=0x80;P0=tableNUM[led_point]; case 4:P2=0x10;P0=tableNUM[led_point]; case 5:P2=0x20;P0=tableNUM[led_point];

case 6:P2=0x40;P0=tableNUM[led_point]; case 7:P2=0x80;P0=tableNUM[led_point]; case 8:P2=0x10;P0=tableNUM[led_point];

case 9:P2=0x20;P0=tableNUM[led_point]; case 10:P2=0x40;P0=tableNUM[led_point]; case 11:P2=0x80;P0=tableNUM[led_point]; case 12:P2=0x10;P0=tableNUM[led_point];

case 13:P2=0x20;P0=tableNUM[led_point]; case 14:P2=0x40;P0=tableNUM[led_point]; case 15:P2=0x80;P0=tableNUM[led_point]; case 16:P2=0x10;P0=tableNUM[led_point]; case 17:P2=0x20;P0=tableNUM[led_point]; case 18:P2=0x40;P0=tableNUM[led_point]; case 19:P2=0x80;P0=tableNUM[led_point]; case 20:P2=0x10;P0=tableNUM[led_point]; case 21:P2=0x20;P0=tableNUM[led_point]; case 22:P2=0x40;P0=tableNUM[led_point]; case 23:P2=0x80;P0=tableNUM[led_point];

4.3.2LED数码管显示

case 0:P1=tableLED[led_point];break; case 1:P1=tableLED[led_point];break; case 2:P1=tableLED[led_point];break; case 3:P1=tableLED[led_point];break; case 4:P1=tableLED[led_point];break; case 5:P1=tableLED[led_point];break; case 6:P1=tableLED[led_point];break; case 7:P1=tableLED[led_point];break; case 8:P1=tableLED[led_point];break; case 9:P1=tableLED[led_point];break; case 10:P1=tableLED[led_point];break; case 11:P1=tableLED[led_point];break; case 12:P1=tableLED[led_point];break; case 13:P1=tableLED[led_point];break; case 14:P1=tableLED[led_point];break; case 15:P1=tableLED[led_point];break; case 16:P1=tableLED[led_point];break; case 17:P1=tableLED[led_point];break;

9

1基于单片机的交通控制系统模拟设计

case 18:P1=tableLED[led_point];break; case 19:P1=tableLED[led_point];break; case 20:P1=tableLED[led_point];break; case 21:P1=tableLED[led_point];break; case 22:P1=tableLED[led_point];break; case 23:P1=tableLED[led_point];break;

4.4 系统软件调试

4.4.1 proteus仿真器

仿真的概念其实使用非常广,最终的含义就是使用可控的手段来模仿真实的情况。单片机系统开发中的仿真包括软件仿真和硬件仿真。

软件仿真这种方法主要是使用计算机软件来模拟实际的单片机运行,因此仿真与硬件无关的系统具有一定的优点。用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最后的设计;

硬件仿真使用附加的硬件来替代用户系统的单片机并完成单片机全部或大部分的功能。使用了附加硬件后用户就可以对程序的运行进行控制,例如单步、全速、查看资源断点等。

系统的软件调试借助于proteus仿真器,在进行系统软件的连续调试之前要先进行软件的初调,就是要使各个子程序模块运行正确,程序的运行流程正确。软件调试主要分以下几个步骤进行:

◆功能子程序的调试。能子程序的调试包括运算、采样、数字滤波以及PID运算等子程序的调试。在调试功能子程序时,许多参数都是未知的,要根据其所需的条件,给出假定的数据,使其运行,如果能完成预定的处理功能或与手工计算的结果相符,就说明该子程序己调试通过。调试时由小到大,由里到外。例如,调试PID算法子程序时,先调通其包含的各个运算子程序和参数处理子程序,然后将它们连起来进行通调。通调时,也是假定一些数据、参数和初始条件,然后运行程序。当运算结果与手工计算的结果相同时,该算法子程序则调试完成,反之,就要进行相应的修改。其它子程序的调试同理; ◆程序流程的调试。序流程的调试主要是查看程序运行的步骤是否正确,在某时刻程序运行所处的位置是否正确,是否能正确运行各个中断服务程序。在调试过程中,先将PID算法子程序屏蔽,输出可控硅导通时间用一个固定的常数代替,在各个中断服务子程序设置断点,然后运行程序,查看程序是否能运行到所有的断点,若所有断点都能运行到,则程序流程基本正确。去掉所有断点,再一次运行程序,查看可控硅状态,从而判断程序流程正确,反之,若程序流程不正确,做相应的修改后,重新调试;

◆功能程序与算法程序的通调。完成整个程序流程的调试后,将PID等算法子程序加入,在算法子程序前或后设置断点,运行整个程序。当程序在断点处暂停时,查看PID计算的控制量与手工计算的值是否相同。多运行几次,若每次的结果都正确,则说明程序各个部分互相没有矛盾,反之,则说明算法子程序和其它子程序之间有影响,需要做相应的修改后重新调。

4.4.2 集成开发环境KEIL

20

基于单片机的交通控制系统模拟设计

KEIL IDE Vision2集成开发环境主要由以下部分组成:

◆ u Vision2 IDE。ision2 IDE包括:一个工程管理器,一个功能丰富并有交互式错误提示

的编辑器选项设置生成工具,以及在线帮助。使用vision2创建源文件并组成应用工程加以管理。vision2可以自动完成编译汇编链接程序的操作;

◆ C51编译器和A51汇编器。Vision2 IDE创建的源文件可以被C51编译器或A51汇编器

处理生成可重定位的object文件。KEIL C51编译器遵照ANSI C语言标准支持C语言的所有标准特性,另外还增加了几个可以直接支持80C51结构的特性。KEIL A51宏汇编器支持80C51及其派生系列的所有指令集;

◆ LIB51库管理器。B51库管理器可以从由汇编器和编译器创建的目标文件建立目标库,

这些库是按规定格式排列的目标模块,可在以后被链接器所使用当链接器处理一个库时仅仅使用了库中程序使用了的目标模块而不是全部加以引用; ◆BL51链接器定位器。L51链接器使用从库中提取出来的目标模块和由编译器汇编器生成

的目标模块创建一个绝对地址目标模块,绝对地址目标文件或模块包括不可重定位的代码和数据所有的代码和数据都被固定在具体的存储器单元中。 利用KEIL开发和调试系统软件流程大致如下: ◆启动Vision2,进入KEIL软件的集成开发环境;

◆利用KEIL内置的文本编辑器进行程序源文件的编辑,因为KEIL集成的文本编辑器对中文支持不是很好,可以选择其他的编辑器(本文使用的文本编辑器是Ultraedit—32),Vision2能够自动识别外部改变了的源文件;

◆建立工程,指定针对哪种单片机进行开发,指定对源程序的编译、链接参数,指定调试方式(本文采用外部硬件仿真器仿真调试的方式,即使TKS仿真器仿真),然后对工程进行相关设置;

◆设置好工程后即可进行编译、链接。连接仿真器对软件进行调试。也可以生成下载到单片机存储器上的HEX文件。 系统软件调试

系统的软件调试借助于proteus仿真器,在进行系统软件的连续调试之前要先进行软件的初调,就是要使各个子程序模块运行正确,程序的运行流程正确。软件调试主要分以下几个步骤进行:

◆功能子程序的调试。能子程序的调试包括运算、采样、数字滤波以及PID运算等子程序的调试。在调试功能子程序时,许多参数都是未知的,要根据其所需的条件,给出假定的数据,使其运行,如果能完成预定的处理功能或与手工计算的结果相符,就说明该子程序己调试通过。调试时由小到大,由里到外。例如,调试PID算法子程序时,先调通其包含的各个运算子程序和参数处理子程序,然后将它们连起来进行通调。通调时,也是假定一些数据、参数和初始条件,然后运行程序。当运算结果与手工计算的结果相同时,该算法子程序则调试完成,反之,就要进行相应的修改。其它子程序的调试同理; ◆程序流程的调试。序流程的调试主要是查看程序运行的步骤是否正确,在某时刻程序运行所处的位置是否正确,是否能正确运行各个中断服务程序。在调试过程中,先将PID算法子程序屏蔽,输出可控硅导通时间用一个固定的常数代替,在各个中断服务子程序设置断点,然后运行程序,查看程序是否能运行到所有的断点,若所有断点都能运行到,则程序流程基本正确。去掉所有断点,再一次运行程序,查看可控硅状态,从而判断程序流程正确,反之,若程序流程不正确,做相应的修改后,重新调试;

◆功能程序与算法程序的通调。完成整个程序流程的调试后,将PID等算法子程序加入,在算法子程序前或后设置断点,运行整个程序。当程序在断点处暂停时,查看PID计

21

基于单片机的交通控制系统模拟设计

算的控制量与手工计算的值是否相同。多运行几次,若每次的结果都正确,则说明程序各个部分互相没有矛盾,反之,则说明算法子程序和其它子程序之间有影响,需要做相应的修改后重新调。

参考文献:

[l]边海龙,孙永奎. 单片机开发与典型工程项目实例详解[J].电子工业出

版社,2008,(10):143-160.

[2]张鑫,华臻,陈书谦. 单片机原理及应用[J].电子工业出版社,2008(5). [3]黄智伟.凌阳单片机课程设计指导[J]. 北京航空航天大学出版社,2007, [4]余锡存 曹国华.单片机原理及接口技术[M].陕西:西安电子科技大学出

版社,2000.7

[5]雷丽文 等.微机原理与接口技术[M].北京:电子工业出版社,1997.2 [6]柴钰.单片机原理和应用[M].西安电子科技大学出版社.

[7]张靖武.单片机系统的PROTUSE设计和仿真[M].电子工业出版社.2007. [8]唐 工..51单片机工程应用实例[M].

设计心得体会

经过两周的努力工作,终于完成了自己的单片机课程设计。虽说忙碌了点,但我觉得这样的生活充实且有成就感,当然,也获益匪浅。

在焊接过程中,我学会应先合理的布局,并认真检查每个元器件,确保无误后再焊接。还有,不能急于求成,要焊接一个模块,检查一个模块,免得整个版子焊完后再在一大堆线中检查,这样不仅效率低且耗时。自然,我也学会如何去发现问题与解决问题的一些方法。

至于软件设计与调试,我觉得它主要考验你的思维逻辑能力及你对指令的熟悉程度。可以说再整个软件设计过程中,我不仅学会了延时的两种方法,即软件延时和硬件延时,还掌握数码管的两种显示方式(即动态显示与静态显示)及其如何选择。当然,通过几次反复调试过程,使得我对汇编指令有了更深刻的理解。

在整个课程设计过程我还掌握了一下几点:

(1)掌握了电子系统设计的流程,熟悉了各种硬件电路以及软件编程方法。 (2)理解了最单片机的各部分组成及特性。

(3)熟练使用了各种计算机辅助设计工具完成设计,充分掌握了这些工具的使用。 (4)学会了利用Keil uVision3对汇编语言进行编译过程.更进一步加深了对PROTEUS软件的学习。

还有,我还发现自身一些毛病。一,前期准备工作做的不够好,想的还算多,可就是没落实。先说选题,就表现自己有畏难情绪,其实当时找到好几个题目,但交通灯最熟悉,所以就选了它。就这,还没做的很理想,还有好些功能可以加上去,像通过测流量来自动调整通行时间,加个监控电路,看门狗电路等。二,行动起来不是很卖力,虽说动手还算早,但每天的进展却不大,可以说做与玩相伴而行。

通过本次的课程设计,充分意识到自己所学的东西还是非常有限的,不过通过设计,还是学到了一些书本上没有学到的东西,为自己以后的学习起了很大的帮助。就我个人而言,很深刻地体会到一点,那就是我们在设计过程中一定要有一个整体的清晰的思路,知道自己的设计的对象的基本功能和核心器件的适用及其作用,只要把握住这些主要方面,

22

基于单片机的交通控制系统模拟设计

一些小问题都将围绕着这些主要问题而逐步得到解决。同时我也懂得,在整个设计过程中,生活中也一样,一定要意志坚定,克服自己的畏难情绪,这样才能将事情做好,才能干出一番成就。

我觉得类似这种课程设计的实践真的不错,通过这些项目练习,我自学能力,解决实际问题的能力得到提高,可以说是对综合素质全面提升,我想这也是我们上大学应真正学到的。

附录

附录一:系统总体原理图

23

基于单片机的交通控制系统模拟设计

附录二:系统程序清单

#include #define uchar unsigned char #define unit unsigned int

uchar num8051[]={0x80,0xc0,0x92,0xf9}; uchar

tableNUM[]={0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0xa4,0x99,0x82,0x80,0x80,0x82,0x99,0xa4,0xf9,0xb0,0x92,0xf8,0xa4,0x99,0x82,0x80}; uchar

tableLED[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x7e,0x3c,0x18,0x00,0x00,0x18,0x3c,0x7e,0xfe,0xfb,0xef,0xbf,0xfd,0xf7,0xdf,0x7f}; void delayms(unit); void main() {

char num_8051=0; char led_point=0; int i=0;

while(i<500){ switch(num_8051) {

case 0:P2=0x10;P0=num8051[num_8051];break; case 1:P2=0x20;P0=num8051[num_8051];break; case 2:P2=0x40;P0=num8051[num_8051];break; case 3:P2=0x80;P0=num8051[num_8051];break; default:break; }

delayms(10); num_8051++; num_8051%=4; i++; } while(1){

24

基于单片机的交通控制系统模拟设计

switch(led_point) {

case 0:P2=0x10;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 1:P2=0x20;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 2:P2=0x40;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 3:P2=0x80;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 4:P2=0x10;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 5:P2=0x20;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 6:P2=0x40;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 7:P2=0x80;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 8:P2=0x10;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 9:P2=0x20;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 10:P2=0x40;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 11:P2=0x80;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 12:P2=0x10;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 13:P2=0x20;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 14:P2=0x40;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 15:P2=0x80;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 16:P2=0x10;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 17:P2=0x20;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 18:P2=0x40;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 19:P2=0x80;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 20:P2=0x10;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 21:P2=0x20;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 22:P2=0x40;P0=tableNUM[led_point];P1=tableLED[led_point];break; case 23:P2=0x80;P0=tableNUM[led_point];P1=tableLED[led_point];break; default:break; }

delayms(400); led_point++; led_point%=24; } }

void delayms(unit x) { unit i,j;

for(i=x;i>0;i--) for(j=110;j>0;j--); }

25

基于单片机的交通控制系统模拟设计

附录三:

元器件清单 序号 名称 型号 数量 1 万用板 9*15cm 1 2 USB插座 单扁口母头 1 3 单片机 AT89C51 1 4 40p锁紧卡座 40脚 1 5 晶振 12MHz 1 6 电容 30pF 2 7 电解电容 10μF/25V 1 8 电阻 10kΩ 1/8W 1 9 电阻 1kΩ 1/8W 5 10 排阻 8×1kΩ 1 11 按键开关 自锁 1 12 拨动开关(8位) 8联排 1 13 发光二极管(LED)红 φ3mm 3 14 发光二极管(LED)绿 φ3mm 2 15 发光二极管(LED)黄 φ3mm 4 16 数码管(四联,共阳) DZF-3461BS 1 17 PNP三极管 C9012 4 18 二极管 1N4148 2 26

因篇幅问题不能全部显示,请点此查看更多更全内容