资源描述
单片机课程设计
————设计汇报
学 院: 物理电气信息学院
专 业: 电子信息工程
姓 名: 杨锋
学 号: 1243756
指导老师: 陈潮红
完成时间: -12-28
目录
目录
第一章 序言
1.1:传统交通灯介绍
1.2 基于单片机智能交通灯控制系统设计意义
第二章 课程设计流程
2.1 课程设计目标
2.2 经过单片机实现交通灯
第三章 硬件设计和介绍
3.1 8255单片机介绍
3.2 8255单片机关键性能参数
3.3 8255芯片内部结构介绍关键引脚功效
3.4 80C5I单片机介绍和结构
3.5 课程设计系统步骤图
第四章 课程设计系统原程序
第五章 系统仿真图
第六章 课程设计总结及心得体会
致谢
第一章 前 言
1.1:传统交通灯介绍
在今天,红绿灯安装在各个道口上,已经成为疏导交通车辆最常见和最有效手段。但这一技术在19世纪就已出现了。
1858年,在英国伦敦关键街头安装了以燃煤气为光源红,蓝两色机械扳手式信号灯,用以指挥马车通行。这是世界上最早交通信号灯。1868年,英国机械工程师,纳伊特在伦敦威斯敏斯特区议会大厦前广场上,安装了世界上最早煤气红绿灯。它由红绿两灯以旋转式方形玻璃提灯组成,红色表示“停止”,绿色表示“注意”。1869年1月2日,煤气灯爆炸,使警察受伤,遂被取消。
19,电气开启红绿灯出现在美国。这种红绿灯由红绿黄三色圆形投光器组成,安装在纽约市5号大街一座高塔上。红灯亮,表示“停止”,绿灯亮,表示“通行”。而中国最早马路交通灯却是诞生于1928年上海英租界。从最早手牵皮带到20世纪50年代电气控制,从采取计算机控制到现代化电子定时监控,交通信号灯在科学化、自动化上不停地更新、发展和完善。不过,伴随社会不停进步,传统交通灯缺点也日益出现,其中设计过于死板,达不到道路最大通行效率是最显著问题,红绿灯交替变换时间过于程式化。
伴随中国经济高速发展,大家对多种交通车辆需求量不停增大,城市交通拥护问题日益严重,现在,大部分城市十字路口交通控制灯,通常做法是:事先经过车辆流量调查,利用传统方法设计好红绿灯延时,然而,实际上车流量是不停改变,有路口在不一样时间段车流量大小甚至有很大差异,所以说,统计方法已不能适应快速发展交通现实状况。
1.2基于单片机智能交通灯控制系统设计意义
现在,中国交通灯通常设在十字路门,在醒目位置用红、绿、黄三种颜色指示灯。加上一个倒计时显示计时器来控制行车。对于通常情况下安全行车,车辆分流尚能发挥作用,但依据实际行车过程中出现情况,还存在以下缺点:1.两车道车辆轮番放行时间相同且固定, 在十字路口,常常一个车道为主干道,车辆较多,放行时间应该长些;另一车道为副干道,车辆较少,放行时间应该短些。2.没有考虑紧急车经过时,两车道应采取方法,臂如,消防车实施紧急任务经过时,两车道车全部应停止,让紧急车经过。
针对道路交通拥挤,交叉路口常常出现拥堵情况。利用单片机控制技术.提出了软件和硬件设计方案及两点改善方法:1、依据各道路路口车流量大小自动调整通行时间。2、考虑特殊车辆通行情况,设计紧急切换开关。
第二章 课程设计步骤
交通灯通常设在十字路门,在醒目位置用红、绿、黄三种颜色指示灯。加上一个倒计时显示计时器来控制行车。对于通常情况下安全行车,车辆分流尚能发挥作用,但依据实际行车过程中出现情况,还存在以下缺点:1.两车道车辆轮番放行时间相同且固定, 在十字路口,常常一个车道为主干道,车辆较多,放行时间应该长些;另一车道为副干道,车辆较少,放行时间应该短些。2.没有考虑紧急车经过时,两车道应采取方法,臂如,消防车实施紧急任务经过时,两车道车全部应停止,让紧急车经过。
2.1、课程设计目标
1. 巩固《单片机技术》课程所学相关知识。
2. 经过硬件设计、软件设计,使学生掌握用单片机组成应用系统方法,提升软件设计能力。
3. 掌握单片机用于多种功效控制方法。
4. 学会产品设计方法。
2.2经过单片机实现交通灯
系统完成内容以下:
1南北方向:绿灯亮30S放行,黄灯亮4S警告,然后红灯亮30S严禁。
2东西方向:绿灯亮30S放行,黄灯亮4S警告,然后红灯亮30S严禁。
3.南北方向红灯亮时,同时用2位LED进行30S递减时间显示。
4.东西方向红灯亮时,同时用2位LED进行30S递减时间显示。
5.单片机程序设计、调试。
第三章硬件设计和介绍
3.1.8255内部结构和引脚功效
8255内部结构图
3.2.特征
(1)一个并行输入/输出LSI芯片,多功效I/O器件,可作为CPU总线和外围接口.
(2)含有24个可编程设置I/O口,即3组8位I/O口为PA口,PB口和PC口.它们又可分为两组12位I/O口,A组包含A口及C口(高4位,PC4~PC7),B组包含B口及C口(低4位,PC0~PC3).A组可设置为基础I/O口,闪控(STROBE)I/O闪控式,双向I/O3种模式;B组只能设置为基础I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器控制字决定.
3.3.引脚功效
RESET:复位输入线,当该输入端处于高电平时,全部内部寄存器(包含控制寄存器)均被清除,全部I/O口均被置成输入方法。
CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,许可8255和CPU进行通讯;/CS=1时,8255无法和CPU做数据传输.
RD:读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,许可8255经过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,许可CPU将数据或控制字写入8255。
D0~D7:三态双向数据总线,8255和CPU数据传送通道,当CPU 实施输入输出指令时,经过它实现8位数据读/写操作,控制字和状态信息也经过数据总线传送。
PA0~PA7:端口A输入输出线,一个8位数据输出锁存器/缓冲器, 一个8位数据输入锁存器。
PB0~PB7:端口B输入输出线,一个8位I/O锁存器, 一个8位输入输出缓冲器。
PC0~PC7:端口C输入输出线,一个8位数据输出锁存器/缓冲器, 一个8位数据输入缓冲器。端口C能够经过工作方法设定而分成2个4位端口, 每个4位端口包含一个4位锁存器,分别和端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。'
A0,A1:地址选择线,用来选择8255PA口,PB口,PC口和控制寄存器.
当A0=0,A1=0时,PA口被选择;
当A0=0,A1=1时,PB口被选择;
当A0=1,A1=0时,PC口被选择;
当A0=1.A1=1时,控制寄存器被选择.
3.4.80C51单片机介绍和结构
有4个I/O端口,每个端口全部是8位双向口,共占32根引脚。每个端口全部包含一个锁存器(即专用寄存器P0~P3)、一个输出驱动器和输入缓冲器。通常把4个端口称为P0~P3。在无片外扩展存放器系统中,这4个端口每一位全部能够作为双向通用I/O端口使用。在含有片外扩展存放器系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。
1. P1口
80C51单片机Pl口只有一个功效:通用输入/输出接口。通用I/O接口有输出、输入和端口操作三种工作方法。
(1)输出方法
计算机实施写P1口指令如MOV Pl, #data时,P1口工作于输出方法,此时数据data经内部总线送入锁存器锁存。假如某位数据为1,该位锁存器输出端Q = 1、 = 0,使V1截止,从而在引脚P1.x上出现高电平。反之,假如数据为0,则Q = 0、 = 1,使V1导通,P1.x上出现低电平。
(2)输入方法
计算机实施读P1口指令如MOV A, P1时,P1口工作于输入方法。控制器发出读信号打开三态门1,引脚P1.x上数据经三态门l进入芯片内部总线,并送到累加器ACC,所以输入时无锁存功效。 在实施输入操作时,假如锁存器原来寄存数据Q = 0。那么因为 = 1,将使V1导通,引脚被一直钳位在低电平上,不可能输入高电平。为此,在输入前必需先用输出指令置Q = 1,使V1截止。正因为如此,P1口称为准双向口。 单片机复位后,P1各口线状态均为高电平,可直接用作输入。
52子系列单片机P1口中P1.0和P1.1含有第二功效,除了作为通用I/O接口外,P1.0(T2)还作为定时器/计数器2外部计数脉冲输入端,P1.1还作为定时器/计数器2外部控制输入端(T2EX)。P1口输出时能驱动4个LSTTL负载。P1口内部有上拉电阻,所以在输入时,即使由集电极开路电路或漏极开路电路驱动,也无需外接上拉电阻。
2. P2口
P2口有两种用途:通用I/O接口或高8位地址总线。
1)地址总线状态
计算机从片外ROM中取指令,或实施访问片外RAM、片外ROM指令时,模拟开关打向上边,P2口上出现程序计数器PC高8位地址或数据指针DPTR高8位地址(A8~A15),上述情况下,锁存器内容不受影响。当取指或访问外部存放器结束后,模拟开关打向下边,使输出驱动器和锁存器Q端相连,引脚上将恢复原来数据。 通常地说,假如系统扩展了外部ROM,取指操作将连续不停,P2口不停送出高8位地址,这时P2口就不应再作为通用I/O口使用。假如系统仅仅扩展外部RAM,情况应具体分析,当片外RAM容量不超出256B时,能够使用寄存器间接寻址方法指令:
MOVX A,@RiMOVX @Ri,A
由P0口送出8位地址寻址,P2口引脚原有数据在访问片外RAM期间不受影响,故P2口仍可用作通用I/O接口;当片外RAM容量较大需要由P2口、P0口送出16位地址时,P2口不再用作通用I/O接口;当片外RAM地址大于8位而小于16位时,能够经过软件从P1、P2、P3口中某几根口线送出高位地址,从而可保留P2全部或部分口线作通用I/O接口用。
2)通用I/O接口状态
P2口作准双向通用I/O接口使用时,其功效和P1口相同,工作方法、负载能力也相同。
3. P3口
P3口除了作为准双向通用I/O接口使用外,每一根线还含有第二种功效。
P3口用作I/O接口时,其功效和P1口相同。P3口作为第二功效输入操作时,其锁存器Q端必需为高电平,不然无法输入或输出第二功效信号。单片机复位时,锁存器输出端为高电平。P3口第二功效中输入信号RXD、 、 、T0、T1经缓冲器1输入,可直接进入芯片内部。
4. P0口
P0口有两种功效;地址/数据分时复用总线和通用I/O接口。P0口输出时能驱动8个LSTTL负载,即输出电流大于800µA。
5.单片机在医用设备领域中应用
单片机在医用设备中用途亦相当广泛,比如医用呼吸机,多种分析仪,监护仪,超声诊疗设备及病床呼叫系统等等
6.在多种大型电器中模块化应用
一些专用单片机设计用于实现特定功效,从而在多种电路中进行模块化应用,而不要求使用人员了解其内部结构。如音乐集成单片机,看似简单功效,微缩在纯电子芯片中(有别于磁带机原理),就需要复杂类似于计算机原理。如:音乐信号以数字形式存于存放器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。 在大型电路中,这种模块化应用极大地缩小了体积,简化了电路,降低了损坏、错误率,也方便于更换。
3.5课程设计系统步骤图
第四章 交通灯系统原程序
#include<reg51.h>
#include<absacc.h>
#define b8255 XBYTE[0xff29] //定义8255 B口地址
#define c8255 XBYTE[0xff2a] //定义8255 C口地址
#define ctrl8255 XBYTE[0xff2b] //定义8255控制字地址
code unsigned char sag[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//段码 (段码排列:abcdefg dp)
sbit clk=P3^1;
sbit sdata=P3^0;
data unsigned char c_data,b_data=0;
unsigned char *b_port,*c_port;
unsigned int intdata=65536-50000;//定时常数(按100ms计算T=(65535-intdata)Tcy,Tcy=2uS)
unsigned char sec1=10;//1秒计时初值(sec1=10*100 ms)
unsigned char sec2=5; //0.5秒计时初值(sec2=5*100 ms)
unsigned char sec=30; //25秒计时初值(sec=25*sec1 s)
bit direct=0,direct1=0;
extern void display(unsigned char d);
void EastWest(void);
void SouthNorth(void);
void Flash(void);
void HC164_Send(unsigned char displaysag);
void display(unsigned char d);
void main(void)
{
unsigned char *ctrl;
ctrl=& ctrl8255;
c_port=& c8255;
b_port=& b8255;
*ctrl=0x80; //置8255控制字,A口输出,B口输出,C口输出,工作方法0
TMOD=0x01; //定时器0工作在定时方法
TH0=intdata/256; //商3C(intdata=C3B0)
TL0=intdata%256; //余数B0
IE=0x82; //开中止(总中止及T0中止)
EastWest(); //初始化交通灯显示
display(sec); //初始化计时显示
TR0=1; //开启定时
while(1)
{
if(sec2==0) //定时到0.5秒
{
sec2=5;
Flash();
*b_port=b_data;
*c_port=c_data;
}
if(sec1==0) //定时到1秒
{
sec1=10;
sec=sec-1; //倒计时
display(sec); //显示计时
if(direct1==0) //交通灯显示
{
EastWest();
*b_port=b_data;
*c_port=c_data;
}
else
{
SouthNorth();
*b_port=b_data;
*c_port=c_data;
}
if(sec==0) //变换方向
{
sec=30+1; //置计时初值(因为显示在倒 计时后,初值需加1)
direct=!direct;
}
}
direct1=direct; //确保交通灯显示和倒计时置数同时
}
}
void EastWest(void) //东西向显示
{
if(sec>5 )
{
b_data=0x08;
c_data=0x61;
}
else if(sec<=2 && sec>=0)
{
b_data=0x08;
c_data=0xa2;
}
}
void SouthNorth(void) //南北向显示
{
if(sec>5 )
{
b_data=0x03;
c_data=0x0c;
}
else if(sec<=2 && sec>=0)
{
b_data=0x05;
c_data=0x14;
}
}
void Flash(void) //闪烁显示
{
if(sec<=5 && sec>2)
{
if(!direct1) //交通灯显示
{
if((c_data & 0x41)==0x41)
{
c_data&=0xbe;
}
else
{
c_data|=0x41;
}
}
else
{
if((c_data & 0x08)==0x08)
{
c_data&=0xf7;
b_data&=0x0d;
}
else
{
c_data|=0x08;
b_data|=0x02;
}
}
}
}
void display(unsigned char d) //显示
{
unsigned char i;
unsigned int outdata[2];
outdata[1]=(d/10)%10; //取出高位(整形会将b/10小数位丢掉)
outdata[0]=d%10; //取出低位;
for(i=0;i<2;i++)
{
switch(outdata[i])
{
case 0:HC164_Send(sag[0]);break;
case 1:HC164_Send(sag[1]);break;
case 2:HC164_Send(sag[2]);break;
case 3:HC164_Send(sag[3]);break;
case 4:HC164_Send(sag[4]);break;
case 5:HC164_Send(sag[5]);break;
case 6:HC164_Send(sag[6]);break;
case 7:HC164_Send(sag[7]);break;
case 8:HC164_Send(sag[8]);break;
case 9:HC164_Send(sag[9]);break;
}
}
}
void HC164_Send(unsigned char displaysag)
{
unsigned char i;
for(i=0;i<8;i++)
{
if((displaysag & 0x01)==0x01) //判定段码最低位
{
sdata=1; //输出1
}
else
{
sdata=0; //输出0
}
clk=0;
clk=1; //产生上升沿
displaysag>>=1; //段码右移1位
}
}
void int_0(void) interrupt 1 using 2 //1号中止,使用2号寄存器组
{
IE=0x00; //关中止
TH0=0x3c; //intdata/256;
TL0=0xb0; //intdata%256;//置定时初值
sec1=sec1-1; //1秒倒计时
sec2=sec2-1; //0.5秒倒计时
IE|=0x82; //开中止
}
第五章 系统仿真图
第六章 课设总结及心得体会
经过此次课程设计不能,我学到了很多平时学不到东西,让我受益匪浅,感慨颇多,深有体会。这次课程设计历时一个星期,经过这个星期学习,发觉了自己很多不足,不管是对知识了解还是实践能力和理论联络实际能力还急需提升。
在这个过程中,我也曾经因为错误失落过,也曾经因为小有成绩而热情高涨。正如生活一样,汗水预示着结果也见证着收获。即使这只是一次极简单课程设计,可是平心而论,也花费了我们不少心血,这才意识到老一辈对我们社会付出,为了大家生活更美好,她们为我们社会所付出多少心血啊!
经过这次课程设计,我感到:这个工程确实很累,但当试验成功时候,我心中就不免兴奋,不免激动。以前种种艰辛这时就变成了最甜美回想!
对我而言,知识上收获关键,精神上丰收愈加可喜。让我知道了学无止境道理。我们每一个人永远不能满足于现有成就,人生就像在爬山,一座山峰后面还有更高山峰在等着你。挫折是一份财富,经历是一份拥有。我想这次课程设计给我留下来很多印象,给了自己很多经验,一定会在以后学习生活中留下很多主动影响!
致谢
陈潮红 老师
展开阅读全文