第一篇:交通灯单片机课程设计
《单片机原理与接口技术课程设计报告》
课题:以交通灯为主的多功能任务设计
班级 学号 学生姓名
指导教师
淮阴工学院 电子与电气工程学院
2015-6 1
目录
一、课程设计目的......................................................................................................3
二、设计要求..............................................................................................................3 1. 总体要求........................................................................................................3 2. 具体要求........................................................................................................3 3. 系统硬件总框图............................................................................................4 1)AT89C52单片机.......................................................................................5 3)数码管显示电路........................................................................................6 4)LED灯显示...............................................................................................7 5)键盘扫描模块............................................................................................7 6)蜂鸣器电路................................................................................................8
三、硬件电路的设计及描述......................................................................................8 1. 硬件总框图及原理图....................................................................................8 2. 主程序流程图..............................................................................................10 3. 各模块流程图..............................................................................................11 1)时间显示程序流程图..............................................................................12 2)流水灯程序流程图..................................................................................12 3)利用蜂鸣器的音乐流程图......................................................................13 4)交通灯控制..............................................................................................13
四、源程序代码........................................................................................................14
六、调试情况
六、设计心得............................................................................................................20
七、参考文献............................................................................................................20
一、设计目的
《单片机原理及应用》课程设计是一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。在课程设计过程中,在教师指导下,应用工程的方法,通过一个简单课题的设计练习,可使学生初步体验单片机应用系统的设计过程、设计要求、完成的工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。
通过课程设计,应该能加强学生如下能力的培养:(1)独立工作能力和创造力;
(2)综合运用专业及基础知识,解决实际工程技术问题的能力;(3)查阅图书资料、产品手册和各种工具书的能力;(4)工程绘图的能力;
(5)编写技术报告和编写技术资料的能力。
二、设计要求
1.总体要求
(1)独立完成设计任务(2)绘制系统硬件总框图(3)绘制系统原理电路图
(4)制定编写设计方案,编制软件框图,完成详细完整的程序清单和注释(5)制定编写调试方案,编写用户操作使用说明书
(6)写出设计工作小结。对在完成以上文件过程所进行的有关步骤如设计思想、指标论证、方案确定、参数计算、元器件选择、原理分析等作出说明,并对所完成的设计作出评价,对自己整个设计工作中经验教训,总结收获和今后研究方向。
2.具体要求
本次工程实践的校内部分主要以单片机为基础,进行单片机软件编程,目的 3 是为了提高学生的软件编程和系统设计能力,整个设计系统包括两个部分,硬件及软件部分,硬件部分已经制作成功,学生只需要掌握其原理和焊接相应的元器件,掌握元器件的辨别和元器件的作用以及应用场所即可,另外对所焊接的电路还需要进行仔细的检查,判断是否有焊接错误的地方或者短路的地方,对出现的异常情况要能够根据现象判别原因,并具备解决问题的能力,从而切实提高学生的硬件电子电路的分析、判断能力。
软件编程是本次课程设计的重要环节。在为期两周的工程实践中,将占据主要时间,完成的软件编程任务主要包括以下几点:
1)、熟悉Keil C51编程平台及相关编程软件
2)、编写、调试蜂鸣器、继电器动作、方波程序并进行软硬件联调 3)、编写、调试LED流水灯(循环显示)程序并进行软硬件联调 4)、编写、调试键盘扫描子程序并进行软硬件联调 5)、编写、调试数码管动态扫描程序并进行软硬件联调 6)、基于交通灯的多功能控制设计
其中前五个内容是后两个内容的基础,主要是编制一些子程序,为后继的整个系统设计打下基础。交通灯控制是在五个课题中选做的一个设计,是一个简单的单片机编程设计,来实现智能交通灯的多功能作用。
3.系统硬件总框图
图1 系统设计总框图
此次课程设计,AT89C52是一种带2K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,俗称单片机。1)AT89C52单片机
设计中所用的单片机型号为AT89C52,其主要功能为:
AT89C52是低功耗、高性能的CMOS 8位单片机。片内带有8KB的Flash存储器,且允许在系统内改写或用编程器编程。另外,AT89C52的指令系统和引脚与80C52完全兼容,所以,近几年AT89C52单片机应用极为广泛。
AT89C52单片机除了含有8KB的Flash存储器外,片内还有256 B的RAM,32条I/O口线,3个16位定时/计算器、6个中断源、1个全双工串行口等。同时,与80C52一样,有空闲和掉电两种节电运行方式。
AT89C52引脚如下图所示:
图2 AT89C52引脚
AT89C52单片机为40脚双列直插封装的8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。
2)DS1302模块
DS1302的RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。
其管脚图如下:
图3 DS1302管脚图
各引脚功能:Vcc1为后备电源,VCC2为主电源,X1和X2是振荡源,SCLK为输入端
RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。
3)数码管显示电路
图4 数码管显示电路
设计中采用六位共阴极数码管,通过单片机STC89C52的P0口控制其位选和段选,以达到动态显示相应数值的效果。在其位选控制部分,采用了一个9012型三极管,要求当P0口输出低电平时,位选成功。
所谓动态扫描就是指我们采用分时的方法,轮流控制各个显示器的COM端,6 使各个显示器轮流点亮。在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的(约1ms),但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。
4)LED灯显示
图5 LED显示模块
本次课程设计中,“程序语言”通过“翻译”软件“翻译”成单片机所需的二进制代码,单片机可工作。要用外加电源和分压电阻来控制低电平驱动点亮,因为单片机不能直接高电平驱动LED灯。如图D1-D8和R1、R2以及R6-R11连接到单片机IO口,当P1口某脚变低时相应LED发光。实现LED灯的闪烁,只需利用编程方法依次从低位到高位逐个变为低电平,等待少许时刻再变高即可。
5)键盘扫描模块
图6 按键输入电路
本模块四个开关分别用于控制流水灯控制电路,时间显示电路,音乐蜂鸣器电路,交通灯四部分功能。当按下其中一个开关时,该部分电路导通,给单片机 发出地址信号,实现其中一项功能的运做,如图4所示。
KEYA键:其功能是当该键按下时,蜂鸣器程序工作; KEYB键:其功能是当该键按下时,流水灯程序工作;
KEYC键:其功能是当该键按下时,数码管动态扫描程序工作; KEYD键:其功能是当该键按下时,交通灯程序工作。
6)蜂鸣器电
图7 蜂鸣器电路
路
蜂鸣器单元电路是通过一个PNP三极管来放大驱动蜂鸣器,蜂鸣器的正极接到+5V电源上面,蜂鸣器的负极接到三极管的发射极,三极管的基极经过限流电阻后由单片机的P3.4控制。
当输出高电平时,三极管截止,蜂鸣器的两引脚间的直流电压接近于0V,没有电流流过线圈,蜂鸣器不发声;当输出低电平时,三极管导通,使蜂鸣器的两个引脚间获得将接近+5V的直流电压,这样蜂鸣器的电流形成回路,发出声音。因此,我们可以通过程序控制IO口输出的电平来控制蜂鸣器是否发出声音,实现各种可能音响的产生。
三、硬件电路的设计及描述
1.硬件总框图及原理图
图8 硬件总框图
图9 硬件总原理图
2.主程序流程图
3.各模块流程图 1)时间显示程序流程图
2)流水灯程序流程图
3)利用蜂鸣器的音乐流程图
4)智能交通灯
四、源程序代码
/******************************************************************** * 文件名
: 4个功能由按键控制.c * 描
述
: 按下A键,实现蜂鸣器动作。
按下B键,实现LED流水灯循环显示。
按下C键,实现数码管动态扫描显示。
按下D键,实现交通灯功能。* 创建人
:
***********************************************************************/ #include
#define uint unsigned int
// 无符号整形习惯的定义
#define uchar unsigned char
//无符号字符型习惯的定义 void buzz_key(void);
//子函数声明 void led_key(void);void tube_key(void);void traffic(void);unsigned char code duanma[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};// 0 1 2 3 4 5 6 7 8 9
unsigned char code weima[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
// 选择哪个数码管
unsigned char temp[6];uchar i=35;uchar k=30;uchar l=5;uchar j;uchar b;
//定义变量
sbit duan=P2^6;//定义管脚 sbit wei=P2^7;sbit key_A=P3^4;sbit key_B=P3^5;sbit key_C=P3^6;sbit key_D=P3^7;sbit buzz=P2^3;sbit DIOLA=P2^5;sbit csda=P3^2;sbit red=P1^0;//交通灯管脚定义 sbit green=P1^1;sbit yellow=P1^2;/******************************************************************** * 名称 : Delay_1ms()* 功能 : 延时子程序,延时时间为 1ms * x * 输入 : x(延时一毫秒的个数)* 输出 : 无
***********************************************************************/
void Delay_1ms(unsigned int t){ unsigned char x,y;for(x=t;x>0;x--)for(y=110;y>0;y--);
}
/******************************************************************** * 名称 : Main()* 功能 : 实现蜂鸣器,流水灯,数码管,交通灯
***********************************************************************/ void main(){
DIOLA=0;//流水灯锁存器关 流水灯未选通
wei=0;//位选关
duan=1;
P0=0;
duan=0;
csda=0;
while(1){
if(key_A==0 || key_B==0 || key_C==0|| key_D==0)
{
if(key_A==0)
//A键按下
{
buzz_key();
//调用蜂鸣器子程序
}
else if(key_B==0)//B键按下
{
led_key();
//调用流水灯子程序
}
else if(key_C==0)//C键按下时
{
tube_key();//调用数码管显示子程序
}
else
//D键按下时
{
traffic();
//调用交通灯子程序
i=35;
k=30;
l=5;
return;
}
}
} }
/******************************************************************** * 名称 : buzz_key(void)* 功能 : 蜂鸣器子程序
***********************************************************************/
void buzz_key(void)
{
DIOLA=0;wei=0;
buzz=0;
//蜂鸣器响
while(key_B&&key_C&&key_D&&!key_A);
buzz=1;
//关蜂鸣器
}
/********************************************************************* * 名称 : led_key(void)* 功能 : 流水灯子程序
***********************************************************************/ void led_key(void){
DIOLA=1;b=0xfe;
P1=b;//11111110 while(key_B==0){
b=_crol_(b,1);
//左移11111101
Delay_1ms(500);
P1=b;
//111111011
Delay_1ms(500);
}
while(key_A&&key_B&&key_C&&key_D);
P1=0xff;
}
/******************************************************************** * 名称 : tube_key(void)* 功能 : 数码管子程序
***********************************************************************/
void tube_key(void){
DIOLA=0;
//流水灯使能端置0 while(key_C==0)
{ unsigned int i;
for(i=0;i<6;i++)
{
wei=1;
P0=weima[i];
//位选信号
wei=0;
duan=1;
P0=duanma[i];//段选信号
duan=0;
Delay_1ms(500);
}
duan=1;
P0=0;
duan=0;
//清零
}
}
/******************************************************************** * 名称 : traffic_key(void)* 功能 : 交通灯子程序
***********************************************************************/
void traffic(void)
{
DIOLA=0;
while(key_D==0)
{
if(i>0)
{
DIOLA=1;
b=0xfe;
P1=b;//11111110
for(j=0;j<40;j++)
{
P0 = 0;
wei=1;
//消隐
P0 = weima[0];
wei=0;
duan=1;
//第1位数码管显示
P0 = duanma[(i / 10)%10];//在这里取 i 的个位数
Delay_1ms(40);
//延时40毫秒后显示下一个数
P0 = 0;
wei=1;
//消隐
P0 = weima[1];
wei=0;
duan=1;
//第2位数码管显示
P0 = duanma[i % 10];
//在这里取 i 的个位数
Delay_1ms(40);
//延时40毫秒后显示下一个数
}
i--;
}
else if(k>0)
{
DIOLA=1;
b=0xfd;
P1=b;//11111110
for(j=0;j<40;j++)
{
P0 = 0;
wei=1;
//消隐
P0 = weima[0];
wei=0;
duan=1;
//第1位数码管显示
P0 = duanma[(k / 10)%10];//在这里取 i 的个位数
Delay_1ms(40);
//延时3毫秒后显示下一个数
P0 = 0;
wei=1;
//消隐
P0 = weima[1];
wei=0;
duan=1;
//第2位数码管显示
P0 = duanma[k % 10];
//在这里取 i 的个位数
Delay_1ms(40);
//延时3毫秒后显示下一个数
}
k--;
}
else if(l>0)
{
DIOLA=1;
b=0xfb;
P1=b;//11111110
for(j=0;j<40;j++)
{
P0 = 0;
wei=1;
//消隐
P0 = weima[0];
wei=0;
duan=1;
//第1位数码管显示
P0 = duanma[(l / 10)%10];//在这里取 i 的个位数
Delay_1ms(40);
//延时3毫秒后显示下一个数
P0 = 0;
wei=1;
//消隐
P0 = weima[1];
wei=0;
duan=1;
//第2位数码管显示
P0 = duanma[l % 10];
//在这里取 i 的个位数
Delay_1ms(40);
//延时3毫秒后显示下一个数
}
l--;
}
}
}
五、设计心得
通过两个星期的实验,我的设计虽然有一些毛病,但总体上还是成功的。两周的时间虽然短暂,但我从中受益匪浅,毕竟在课堂学习到的东西真真正正的用到实际中还是有很大困难的,要把理论运用于实践确实并非一件易事。我从最初的设想设计一个什么样的数字电路到绘制电路图,然后打印排版,最后矫正设计中的漏洞与不足,整个过程我翻阅了大量的资料。
这次交通灯的课程设计,也使我得到了一次用专业知识、专业技能分析和解决现实问题的能力。使我在单片机的基本原理、单片机应用学习过程中,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为一名合格的应用型人才打下良好的基础。综合课程设计让我把以前学习到的知识得到巩固和进一步的提高认识,对已有知识有了更深层次的理解和认识。在此,由于自身能力有限,在课程设计中碰到了很多的问题,我通过查阅相关书籍、资料以及和周围同学交流得到解决。
还有交通灯是我们生活中非常常见的一种东西,对于我们学以致用的这种能力得到了很好锻炼,能够为我们以后的工作于学习打下基础。
六、参考文献
1.《单片机原理及接口技术》 李朝青 北京航空航天大学出版社,2004 2.《单片机原理及应用》 李全力 高等教育出版社,2001 3.《电子系统设计与实践》 杨刚,周群 电子工业出出版社,1997 4.《单片机微型计算机技术》 刘国荣 机械工业出版社,1997 5.《数字电子技术》 杨志忠 高等教育出版社,2003 6.《电子技术》 胡宴如 高等教育出版社,2001 7.《电子线路CAD》 王延才 机械工业出版社,2001 8.《单片机应用技术选编》 何利民 北京航空航天大学出版社,1996 9.《单片机应用技术》 吴国经 中国电力出版社,2004 10.《单片机及接口技术实践教程》 胡健 北京机械工业出版社,2002 11.《使用接口技术》 李广军 成都电子科技大学出版社,1998
第二篇:单片机课程设计任务书(交通灯)
单片机课程设计任务书
本次设计共 41×2 人。
一、设计任务:
1、路口交通灯控制系统设计 1)A 道通行,B 道禁行 30s; 2)黄灯闪烁 5s; 3)A 道禁行,B 道通行 30s; 4)黄灯闪烁 5s。5)按下 K1,A 道通行,B 道禁行,直到 K1 复位; 6)按下 K2,B 道通行,A 道禁行,直到 K2 复位; 7)按下 K3,A、B 禁行。
二、设计要求 1)主控芯片:AT89S52,显示器件可以选用发光二极管、数码管或 LCD 其中一种; 2)系统总体设计和软硬件功能划分; 3)硬件电路设计; 4)软件设计; 5)软件、硬件仿真调试; 6)转换 PCB 板; 7)生产 PCB 板,焊接调试; 8)样品试运行。
三、时间分配: 整个设计时间为一周,根据实际进度由指导教师控制。
四、设计者: 电气 0812,共 41×2 人。
五、使用仪器、材料:
1、电脑、单片机实验箱、单片机编程器等。
2、AT89S52 单片机芯片,相应的电子元器件等。
六、上缴材料:
1、设计任务书一份;设计说明书(包括:系统功能描述,设计思路,软、硬件设计,设 计图纸,样品等);总结报告等。
2、样品一件。
第三篇:基于AT89C51单片机的交通灯课程设计报告[定稿]
单片机原理及应用课程设计任务书
系(部):电子与通信工程系
课题名称 交通灯程序设计
设计内容及要求(1)课题内容:
以单片机为核心,设计一个简单交通灯控制系统,用于十字路口车辆交通管理,东西、南北两个方向分别设置红、绿、黄3种通行指示灯,计时牌显示路口通行转换剩余时间,另外,在特种车辆如119、120通过路口时,系统可转为特种车辆放行,其他车辆禁止通行的状态,15s后系统恢复正常管理。
发挥部分:东西、南北两个方向通行的时间可以通过键盘设置。
(2)要求:完成该系统的硬件和软件的设计,在Proteus软件上仿真通过后,下载到单片机进行硬件验证。最后就课程设计本身提交一篇课程设计说明书。
设计工作量
1、汇编或C51语言程序设计;
2、程序调试;
3、在Proteus上进行仿真后,进行下载;
4、提交一份完整的课程设计说明书,包括设计原理、程序设计、程序分析、仿真分析、调试过程,参考文献、设计总结等。
进度安排 起止日期(或时间量)设计内容(或预期目标)备注
第一天 课题介绍,答疑,收集材料,C51介绍
第二天 设计方案论证,练习编写C51程序
第三天~第六天 程序设计
第六天~第八天程序调试、仿真
第九天~第十天 系统测试并编写设计说明书
交通灯程序设计
摘要
本次单片机课程设计选择的题目是交通灯程序设计,主要是根据本学期所学的《单片机原理和接口技术》的知识,编写交通灯的控制程序,在WAVE6000集成调试软件上进行编译,并在Proteus 7 Professional软件上进行仿真,观看结果。在经过多次的调试和电路上的修改,实现了所需要的结果(达到了设计任务书上的要求)。主要涉及的内容包括倒计时、中断等,使用芯片80C51进行程序控制。
关键词
AT89C51LED显示交通灯
目录
1、交通灯程序 62、交通灯仿真电路 93、结论与心得 104、存在的不足及建议 10
参考文献 101、交通灯程序
#include
//#include
#define ucharunsigned char
#define uintunsigned int
uchar h;
uint r=0;
uint s;
uchar codedis[]={ 0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff};void delay(uint c)
{
uint i,j;
for(i=0;i for(j=0;j<100;j++); } //interrupt 1void t0(void)interrupt 0 using 1 { delay(2); if(INT0==0) { P1=0xdb; P0=0xff; } for(h=15;h>0;h--) { for(s=248;s>0;s--) { P0=0xff; P2=0x01; P0=dis[h/10]; delay(1); P0=0xff; P2=0x02; P0=dis[h%10]; delay(1); P0=0xff; P2=0x04; P0=dis[h/10]; delay(1); P2=0x00; P0=0xff; P2=0x08; P0=dis[h%10]; delay(1); } } } void main(void) { EA=1; EX0=1; while(1) { P1=0xeb; for(h=15;h>0;h--) { for(s=248;s>0;s--) {if(h<=3) P1=0xfb; if(s<=124) P1=0xeb; P0=0xff; P2=0x01; P0=dis[h/10]; delay(1); P0=0xff; P2=0x02; P0=dis[h%10]; delay(1); P0=0xff; P2=0x04; P0=dis[(h+3)/10]; delay(1); P2=0x00; P0=0xff; P2=0x08; P0=dis[(h+3)%10]; delay(1); } } P1=0xf3; for(h=3;h>0;h--) { delay(120); P0=0xff; P2=0x0a; P0=dis[h%10]; delay(900); } delay(248); P1=0xdd; for(h=10;h>0;h--) { for(s=248;s>0;s--) { if(h<=3) P1=0xdf; if(s<=124) P1=0xdd; P0=0xff; P2=0x01; P0=dis[(h+3)/10]; delay(1); P0=0xff; P2=0x02; P0=dis[(h+3)%10]; delay(1); P0=0xff; P2=0x04; P0=dis[h/10]; delay(1); P0=0xff; P2=0x08; P0=dis[h%10]; delay(1); } } P1=0xde; for(h=3;h>0;h--) { delay(120); P0=0xff; P2=0x0a; P0=dis[h%10]; delay(900); } delay(248); } } 2、交通灯仿真电路 3、结论与心得 本次单片机程设计收获颇丰,不仅对于WAVE6000集成调试软件和Proteus 7 Professional软件有了进一步的熟悉,使用WAVE6000集成调试软件进行了C语言的程序编写与编译,也再次的复习了本学期所学的知识。 本学期学习了《单片机原理与接口技术》这门功课,主要学习了使用汇编语言进行编写程序,利用单片机实现其功能。这次的课程设计,根据所学知识,包括LED的显示、倒计数器、中断等,进行交通灯程序的设计,对于软件编程、排错调试、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,也对单片机的使用有了更深刻的了解。遗憾的是没有作出实物,只是在Proteus 7 Professional软件进行仿真,看到了所编程序所实现的功能,完全达到了课程设计的要求。也通过这次的课程设计,对使用C语言进行程序编写,在AT89C51上实现功能,有了更多的了解与认识,也因为学习过C语言,所以很快就摸清了门路。整个设计过程很顺利。 通过这次的课程设计,对《单片机原理与接口技术》所学的知识有了更进一步的了解,也看到单片机的优点。收获颇丰。 4、存在的不足及建议 由于实验室机器的落后,电脑的病毒太多,导致多次劳动的成功打了水漂。实验室电脑不能连网,交流不便。 参考文献 曾屹.单片机原理与应用[M].湖南:中南大学出版社,2009年. #include //*****define led port ********** sbit R1=P2^4;//east and west red led sbit Y1=P2^3;//east and west yellow led sbit G1=P2^2;//east and west green led sbit R2=P2^5;//south and north red led sbit Y2=P2^6;//south and north yellow led sbit G2=P2^7;//south and north green led //*********define key************** sbit k0=P3^0;//emergency sbit k1=P3^1;//east and west pass sbit k2=P3^2;//south and north pass sbit k3=P3^3;//start and subtract 1 sbit k4=P3^4;//pause and add 1 sbit k5=P3^5;//set time //*********define variable********* bit flag,flag_t;uchar dx_time,nb_time;uchar cnt,pass_time,cnt1,y_time;uchar k0num,k1num,k2num,k3num,k4num,k5num; //*********define key******** void delay(uint i){ uint x,y;for(x=i;x>0;x--) for(y=110;y>0;y--);} void timer0_init(){ TMOD=0x11;TH0=(65536-50000)/256;TL0=(65536-50000)%256;TH1=(65536-50000)/256;TL1=(65536-50000)%256;EA=1;ET0=1;ET1=1;} void led_display(uchar dx,nb){ uchar dx1,dx2,nb1,nb2;dx2=dx/10;dx1=dx%10;nb2=nb/10;nb1=nb%10;if(dx>99){ led_w1=1; led_w2=1;} else { led_w1=0; P0=table[dx1]; delay(5); led_w1=1; if(dx<10&&dx>0)led_w2=1; else { led_w2=0; P0=table[dx2]; delay(5); led_w2=1; } } if(nb>99){ led_w3=1; led_w4=1;} else { led_w3=0; P0=table[nb1]; delay(5); led_w3=3; if(nb<10&&nb>0)led_w4=1; else { led_w4=0; P0=table[nb2]; delay(5); led_w4=4; } } } //*************light work********** void circle_led(){ if(!flag){ if(pass_time>5) { led_display(pass_time-5,pass_time); R1=1;Y1=1;G1=0; //east and west pass R2=0;Y2=1;G2=1; //south and north stop } if(pass_time<=5&&pass_time>0) { if(cnt>=10)led_display(pass_time,pass_time); else led_display(100,pass_time); R1=1;G1=1; //east and west yellow led flash if(cnt>=10)Y1=0; else Y1=1; R2=0;Y2=1;G2=1; } if(pass_time==0) { pass_time=nb_time; flag=1; } } else { if(pass_time>5) { led_display(pass_time,pass_time-5); R1=0;Y1=1;G1=1; //east and west stop R2=1;Y2=1;G2=0; //south and north pass } if(pass_time<=5&&pass_time>0) { if(cnt>=10)led_display(pass_time,pass_time); else led_display(pass_time,100); R1=0;Y1=1;G1=1; R2=1;G2=1; //south and north yellow led flash if(cnt>=10)Y2=0; else Y2=1; } if(pass_time==0) { pass_time=dx_time; flag=0; } } } void emergency() //east and west,south and north stop { led_display(0,0);R1=0;Y1=1;G1=1;R2=0;Y2=1;G2=1;} void dx_pass() //east and west pass,south and north stop { led_display(100,100);if(y_time<=5&&y_time>0){ TR1=1; R1=0;Y1=1;G1=1; R2=1;G2=1; //south and north yellow led flash if(cnt1>=10)Y2=0; else Y2=1;} if(y_time==0){ TR1=0; R1=1;Y1=1;G1=0; R2=0;Y2=1;G2=1;} } void nb_pass() //south and north pass,east and west stop { led_display(100,100);if(y_time<=5&&y_time>0){ TR1=1; R1=1;G1=1; if(cnt1>=10)Y1=0;//east and west yellow led flash else Y1=1; R2=0;Y2=1;G2=1; } if(y_time==0){ TR1=0; R1=0;Y1=1;G1=1; R2=1;Y2=1;G2=0;} } //***********keyboard scan************ void keyscan(){ if(!k5num) { if(k0==0)//*******emergency******* { delay(10); if(k0==0) { while(!k0); TR0=0; k0num=1; } } if(!k1num&&!k0num) { if(k1==0) { delay(10); if(k1==0) { while(!k1); k1num=1; k2num=0; y_time=5;//单方向通行时,黄灯闪烁时间 TR0=0; TR1=1; } } } if(!k2num&&!k0num) { if(k2==0) { delay(10); if(k2==0) { while(!k2); k1num=0; k2num=1; y_time=5;//单方向通行时,黄灯闪烁时间 TR0=0; TR1=1; } } } if(k3==0) { delay(10); if(k3==0) { while(!k3); if(k1num||k2num)pass_time=dx_time;//由东西或南北通行返回时,重新开始执行。 k0num=0; k1num=0; k2num=0; k4num=0; k5num=0; TR0=1; TR1=0; flag_t=0; } } { } if(!k4&&!k0num) //pause { delay(10);if(k4==0){ while(!k4); TR0=0; k4num=1;} } if(k4num==1) //暂停键按下时,才可以调整两个方向通行时间 if(k5==0){ delay(10);if(k5==0){ k5num++; while(!k5); switch(k5num) { case 1: TR0=1; flag_t=1;//调整时间时,pass_time值不变。 k5num=1; break; case 2: k5num=2; break; case 3: TR0=0; k5num=0; pass_time=dx_time;//重新赋值 break; } } } if(k5num!=0){ if(k3==0){ delay(10); if(k3==0) { while(!k3); switch(k5num) { case 1: dx_time--; if(dx_time<10) break; case 2: nb_time--; if(nb_time<10) break; } } } if(k4==0) { delay(10); if(k4==0) { while(!k4); switch(k5num) { case 1: dx_time++; if(dx_time>=100) break; case 2: nb_time++; if(nb_time>=100) break; } } } } } } void main(){ timer0_init();dx_time=45;nb_time=30; dx_time=99;nb_time=99;dx_time=10;nb_time=10; pass_time=dx_time;while(1){ keyscan();if(k0num)emergency();else { switch(k4num){ case 0: if(!k1num&&!k2num) circle_led(); else { if(k1num)dx_pass(); if(k2num)nb_pass(); } break; case 1: switch(k5num) { case 0: if(!k1num&&!k2num) circle_led(); else { if(k1num)dx_pass(); if(k2num)nb_pass(); } break; case 1: R1=1;Y1=1;G1=1;//调整时间时,关闭所有灯 R2=1;Y2=1;G2=1; if(cnt<=10) led_display(100,nb_time); else led_display(dx_time,nb_time); break; case 2: R1=1;Y1=1;G1=1;//调整时间时,关闭所有灯 R2=1;Y2=1;G2=1; if(cnt<=10) led_display(dx_time,100); else led_display(dx_time,nb_time); break; } break; } } } } void timer0()interrupt 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;cnt++;if(cnt==20){ cnt=0; if(flag_t==0)pass_time--;//调整时间时,不执行此操作 } } void timer1()interrupt 3 { TH1=(65536-50000)/256;TL1=(65536-50000)%256;cnt1++;if(cnt1==20){ cnt1=0; y_time--;//单方向通行时,黄灯闪烁时间。 } } PLC的定义及工作原理 ⒈定义:可编程控制器,简称PLC(Programmable logic Controller),是指以计算机技术为基础的新型工业控制装置。“PLC是一种专门为在工业环境下应用而设计的数字运算操作的电子装置”。它采用可编程序的存储器,用来在其内部存储执行逻辑运算、顺序控制、定时、计数和算术运算等操作的指令,并通过数字式或模拟式的输入和输出,控制各种类型的机械或生产过程。 ⒉工作原理: 当PLC投入运行后,其工作过程一般分为三个阶段,即输入采样、用户程序执行和输出刷新三个阶段。完成三个阶段称作一个扫描周期。在整个运行期间,PLC的CPU以一定的扫描速度重复执行三个阶段。 (一)输入采样阶段 在输入采样阶段,PLC以扫描方式依次地读入所有输入状态和数据,并将它们存入I/O映象区中的相应得单元内。 (二)用户程序执行阶段 在用户程序执行阶段,PLC总是按由上而下的顺序依次地扫描用户程序(梯形图)。 (三)输出刷新阶段 当扫描用户程序结束后,PLC就进入输出刷新阶段。在此期间,CPU按照I/O映象区内对应的状态和数据刷新所有的输出锁存电路,再经输出电路驱动相应的外设。 随着自动化控制技术和微电子技术的迅猛发展,PLC作为前沿的工业控制器,具有体积小、可靠性高、易操作、灵活性强、抗干扰能力强等一系列优点,广泛用于自动化控制领域。用内部编程取代继电器逻辑控制电路中大量的中间继电器和时间继电器,简化了控制路线,提高了系统控制的可靠性,这是PLC最大的优点。借助于书序控制图和梯形图来编制用户控制程序,实现自动控制系统顺序控制,是PLC的主要功能之一。 实训1 基础试验 1.两灯交替闪烁 指令表 梯形图 工作过程: 按下启动开关X0,Y0亮,且开始计时,2S后,T0动作,T0常闭断开Y0熄灭,T0常开闭合Y1亮,经过2s,Y0亮;如此循环,直到按下停止开关X1。 2.利用计数器实现循环 指令表 梯形图 工作过程: 按下启动开关X0,Y0亮,开始计时2S后,T0动作,Y0熄灭,Y1亮,如此循环,直到循环了5次,计数器CO动作,常开触点闭合,整个过程停止。 实训2 十字路口交通灯控制系统 1、实训目的 ① 了解PLC基本功能指令使用方法 ②掌握功能指令图的输入方法 ③学会利用功能指令进行设计 2、实训的内容 该实验在十字路口交通信号灯控制实验区内完成,按启动按钮,六盏灯按如下时序工作:第一组绿灯亮5秒后闪烁3次(灭0.5秒,亮0.5秒),黄灯亮2秒,红灯亮10秒;第二组红灯亮10秒,绿灯亮5秒后闪烁3次(灭0.5秒,亮0.5秒),黄灯亮2秒。 从时序图可以看出,该系统有一个输入装置和 6个输出装置。下表为输入装置与输出装置与PLC的地址编号对应表。 指令表 ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ LD M8002 SET L0 STL S0 LD X000 OUT Y000 OUT Y003 SET S21 SET S31 STL S21 OUT Y000 OUT T0 K50 ⒓ LD T0 ⒔ SET S22 ⒕ STL S22 ⒖ OUT T1 K30 ⒗ LDI T1 ⒘ AND M8013 ⒙ OUT Y000 ⒚ LD T1 ⒛ SET S23 21.STL 22.OUT 23.OUT 24.LD 25.SET 26.STL 27.OUT 28.OUT 29.STL 30.OUT 31.OUT 32.LD 33.SET 34.STL 35.OUT 36.OUT 37.LD 38.SET 39.STL 40.OUT 41.LDI 42.AND 43.UT 44.LD 45.SET 46.STL 47.OUT 48.OUT 49.STL 50.STL 51.LD 52.AND 53.SET 54.RET 55.END S23 Y001 T2 K20 T2 S24 S24 Y002 T3 K100 S31 Y003 T4 K100 T4 S32 S32 Y004 T5 T5 S33 S33 T6 K30 T6 M8013 Y004 T6 S34 S34 Y005 T7 S24 S34 T3 T7 S0 附加任务 机械手手动控制实验 控制要求1: 实现机械手左右移动。 按下向左按钮,机械手向左移动,到达左限位开关后停止;按下向右按钮,机械手向右移动,到达右限位开关后停止。 控制要求2: 实现机械手上下移动。 按下向上按钮,机械手向上移动,到达上限位开关后停止;按下向下按钮,机械手向下移动,到达下限位开关后停止。 控制要求3: 实现机械手左右、上下移动。 按下向左按钮,机械手向左移动,到达左限位开关后停止,按下向右按钮,机械手向右移动,到达右限位开关后停止。 按下向上按钮,机械手向上移动,到达上限位开关后停止;按下向下按钮,机械手向下移动,到达下限位开关后停止。 控制要求4: 实现上述控制后,机械手电磁铁在A位置可吸引提取物料(铁块)或释放物料。机械手电磁铁在B位置同样可吸引提取物料(铁块)或释放物料。 可手动操作实现物料从A位置移动到B位置或从B位置移到达A位置。 总 结 这是一个比较典型的十字路口交通灯的梯形图设计,最为一种设计实践,主要是为PLC在交通控制系统中提出一种设计理论,为以后PLC在复杂的控制系统中提出一种可行的理论方案。在实际应用中,采用PLC控制城市交通信号灯,能根据不同路况要求,随时修改控制程序,以改变各信号灯的工作时间和工作状况。与继电器或逻辑电路控制系统相比,PLC控制系统具有更高的可靠性、灵活性和经济实用性。 通过这次设计实践,我巩固了PLC的基本编程方法,对PLC的工作原理和使用方法也有了更深刻的理解。在对理论的运用中,提高了我们的工程素质,当我们把自己想出来的程序与到PLC的时候问题出现了,不是不能运行,就是运行的结果和要求的结果不相符。通过解决一个个在调试中出现的问题,我们对PLC的理解加强了,看到了实践与理论的差距,通过此次课程,让我了解了PLC梯形图、指令表、顺序功能图有了更好的了解,也让我了解了关于PLC设计原理。有很多设计理念来源于实际,从中找出最合适的设计方法。第四篇:单片机交通灯控制程序
第五篇:PLC交通灯课程设计