通信工程系统实验报告--51单片机实现交通灯和分秒计时

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、设计目的

♦通过动手焊接PCB版,熟悉焊接过程,培养动手能力

♦锻炼51单片机的C语言编程能力

二、设计功能目标

实现按键选择功能,并可暂停继续。

(1)按键一按下,数码管进行分秒递增计时,四只数码管低二位0~59计数后进位给高二位0~59计数(即分秒计时);

(2)按键二按下,选择模拟交通灯系统,数码管配合灯进行倒计时,左边红灯右边绿灯20s—>右边黄灯闪烁5s—>黄灯灭,红绿灯交替,一直循环。

(3)按键三按下,暂停/继续;

(4)系统复位按键,整个系统复位,复位后可进行功能选择。

三、原理描述

1.硬件部分

电路模块介绍:

(A)稳压源部分将输入的交流电转换为稳定的5V直流电压;由于目前提供的已经是直流变压器,所以整流桥可以不用;

(B)作为单片机的输入部分(P1.0~P1.3)起控制作用;

(C)作为单片机的输出部分,P0.0~P0.3经由7段译码器(74LS47)的控制数码管的显示结果(0~9),P0.4~P0.7数码管的选通控制口,提供数码管工作电源(公共端),P2.7 控制数码管的小数点数否点亮

数码管为共阳极由74LS46/47驱动;

(D)发光二极管:输出部分,由P2.0~P2.5口控制,高电平灯亮;

(E)单片机AT89S52,中心控制器

(F)J1口留作通信口使用,其中J1.1(TXD)由P3.1(11脚)控制,J1.2(RXD)由P3.0 (10脚)控制

(G)J2留作在线烧录程序使用

总体电路图:

芯片简介:

AT89S51 74LS47

(1)AT89S51单片机

AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system

programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,AT89S51在众多嵌入式控制应用系统中得到广泛应用。

(2)74LS47七段译码器

是BCD-7段译码器/驱动器,数字集成电路,用于将BCD码转化成数码块中的数字,然后我们就能看到从0-9的数字。

2. 软件部分

(一)流程图:

(1)主程序部分

(2)子程序部分

(二)最终源程序

见报告结束处附录

四、已实现的功能

✧ 预期目标的功能全部实现

✧ 黄灯5s 的时间内均匀闪烁三次,看起来很舒服,这是意外收获

五、调试过程

1.对照元器件清单依次将实际元器件与之对照,电阻标清阻值

2.按照电电路原理图将PCB 板上的元器件按照有小到大(或由矮到高)的顺序焊接好

3.新建一个测试程序,烧录在51单片机中,观察电路各部分是否可以正常显示。发现了问题,左边红色的LED 灯不亮,断开电路电源后,用万用表测红色LED 灯的两端,原则上接入闭合电路的灯不会在蜂鸣档亮的,猜测灯坏了或者一个引脚没有接好,重新焊接后修复,电路正常工作

4.硬件电路确保没有问题,开始用Keil 配合Proteus 进行C 语言编程联调,修改和编译程序,生成目标HEX 文件以用于烧录

5.将程序烧录在AT89S51芯片中,观察硬件电路运行状态,发现黄灯闪烁速率过

Display1(分秒计时)

Display2(模拟红绿灯)

慢,通过调整延时间隔改良效果,从而达到满意的状态,在红绿灯和黄灯的交替过程实现上,参照书籍采用了case语句,发现这是一种很不错的方法

6.调试成功

六、心得小结

大三学习单片机的时候,一学期有涉及过动手焊接和编程调试,所以这一次的设计任务对我来说并不陌生。当初是自己去电子市场买器件用导线焊接,所以手工方面的复杂程度大大降低,不过这次的程序却是我认真钻研的结果,在基础的程序上更改了东西,主要是黄灯闪烁的部分,花了很长时间,现在的效果是不错的,报告撰写也花了不少时间,主要是流程图不太好画,现在终于大功告成了,真的很开心,收获很多!

附录:最终源程序

#include

#include

#define uchar unsigned char

#define uint unsigned int

//引脚绑定

sbit Key1=P1^0;

sbit Key2=P1^1;

sbit Key3=P1^2; //p1:Key1、Key2、Key3分别绑定

sbit LED1=P0^4;

sbit LED2=P0^5;

sbit LED3=P0^6;

sbit LED4=P0^7; //p0:四只数码管控制位绑定

sbit L1=P2^0;

sbit L2=P2^1;

sbit L3=P2^2;

sbit L4=P2^3;

sbit L5=P2^4;

sbit L6=P2^5; //p2:6只Led灯引脚绑定

void delayMs(uchar ms); //延时程序

void display1(void); //分秒计时显示程序

void display2(void); //交通灯显示程序

void init_timer0(void);

void init_timer1(void);

bit light_red_green=0;

bit light_yellow=0;

uchar select_red_green=0;

uchar min=0;

uchar sec=0;

uchar yellow_time=5;

uchar red_green_time=20;

uchar time=20;

uint num=0;

//-----------------------------------------------------

//主程序

//-----------------------------------------------------

void main (void) {

相关文档
最新文档