通信工程系统实验报告--51单片机实现交通灯和分秒计时
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) {