资源描述
单片机原理与接口技术课程设计题目:基于89C51单片机交通灯设计学院:信息工程学院 专业班级: 姓名: 学号:2008001118目 录一、设计题目:带有强制按钮的交通灯2二、实验设备:2三、芯片介绍:2四、设计内容:2五、I/O端口使用表:5六、硬件原理图:5七、程序流程图:6八、C语言程序:7九、总结与体会:9十、参考文献:10一、 设计题目:带强制按钮的交通灯二、 实验设备:装有STC下载软件、Keil编程软件的计算机;89C51单片机开发板一块。三、 芯片介绍: MCS-51系列单片机是在一块芯片上集成了CPU、RAM、ROM、定时/计数器和多功能I/O口等基本功能部件的一台计算机。单片机必须配备部件外围元件才能使用,其系统核心是单片机芯片,芯片引脚按功能分为3类,即数据总线、地址总线、和控制总线。MCS-51系列单片机的外形采用40引脚双列直插封装(DIP)或LCC/QFP封装,每条引脚有规定的序号和名称。DIP封装的引脚排列和逻辑如下图:MCS-51主要功能引脚说明如下: (1)主电源引脚Vcc和GNDVcc电源输入端。工作电源和编程校验为+5V。GND共用接地段。 (2)时钟电路引脚XTAL1和XTAL2XTAL1和XTAL2分别用做晶体振荡电路的反响请输入端和输出端。 (3)控制信号引脚RST,ALE,PSEN非和EA非RST复位信号输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。ALE当访问外部程存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。PSEN非程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。 (4)4个8位I/O端口P0,P1,P2和P3P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下, P0具有内部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。在访问外部程序存储器或用16位地址读取外部数据存储器时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址访问外部数据存储器时,P2口输出P2锁存器的内容。P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,P3输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。端口引脚 第二功能:P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 INTO(外中断0)P3.3 INT1(外中断1)P3.4 TO(定时/计数器0)P3.5 T1(定时/计数器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)四、 设计内容:1. 交通灯循环显示。2. 当按下按钮K1触发时外部中断0,控制东西绿灯强制;当按下按钮K2触发时外部中断1,控制南北绿灯强制。按钮KEY按下强制解除。 3. 定时计数器0控制绿灯显示时间,并用数码管显示时间。五、 I/O端口使用表:引脚所接元件功能P2.7D0东西黄灯P2.6D1东西红灯P2.5D2东西绿灯P2.2D3南北绿灯P2.1D4南北黄灯P2.0D5南北红灯P1SMG1时间十位P0SMG2时间个位P3.2K1东西绿灯强制P3.3K2南北绿灯强制P3.7KEY强制解除六、 硬件原理图: 七、 程序流程图: 主程序流程图:开始 交通灯显示子程序初始化T0、INT0、INT1中断设置定时50ms;T0中断优先级为低交通灯显示子程序流程图:东西路口绿灯亮;南北路口红灯亮东西路口南北路口黄灯亮定时器定时10s东西路口绿灯闪5次;南北路口红灯同时闪5次东西路口南北路口黄灯亮延时东西路口红灯亮;南北路口绿灯亮定时器定时10s东西路口红灯闪5次;南北路口绿灯同时闪5次外部中断0服务子程序: 外部中断1服务子程序:开始东西路口绿灯亮;南北路口红灯亮KEY=1?开始KEY=1?NONO东西路口红灯亮;南北路口绿灯亮返回返回YESYES八、 C语言程序:#include#define uchar unsigned char #define uint unsigned int unsigned char code Table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; /数码管显示表 uchar tur=0;uchar k=0;uchar j; sbit KEY=P37; /位定义sbit Yellow_E=P27;sbit Red_E=P26;sbit Green_E=P25;sbit Yellow_S=P21;sbit Red_S=P20;sbit Green_S=P22;Extra0() interrupt 0 /外部中断0,东西绿灯强制 while(KEY=1) Yellow_E=1;Red_E=1;Green_E=0; Yellow_S=1;Red_S=0;Green_S=1; Extra1() interrupt 2 /外部中断1,南北绿灯强制 while(KEY=1) Yellow_E=1;Red_E=0;Green_E=1; Yellow_S=1;Red_S=1;Green_S=0; Time0() interrupt 1 /定时计数器子程序TH0=(65536-50000)/256; /高位重装TL0=(65536-50000)%256; /低位重装void Delay(uint x) /延时子程序uint i;while(x-) for(i=0;i=1000;i+);void Traffic_LED() /交通灯显示子程序uchar i;switch(tur)case 0:Yellow_E=1;Red_E=1;Green_E=0;/东西绿灯亮 Yellow_S=1;Red_S=0;Green_S=1; /南北红灯亮 j=0; while(j+)=10) for(k=0;k20;k+) TR0=1; /定时器开始计时while(!TF0); P1=Table(j)/10; /数码管十位P0=Table(j)%10; /数码管个位P1=0xC0; /数码管复位P0=0xC0;case 1:Yellow_E=1;Red_E=1;Green_E=0;/东西路口绿灯闪5次 Yellow_S=1;Red_S=0;Green_S=1;/南北路口红灯闪5次 for(i=0;i=10;i+) Green_E=!Green_E;Red_S=!Red_S;Delay(20); case 2:Yellow_E=0;Red_E=1;Green_E=1;/东西路口黄灯亮 Yellow_S=0;Red_S=1;Green_S=1; /南北路口黄灯亮 Delay(50); /延时case 3:Yellow_E=1;Red_E=0;Green_E=1; /东西路口红灯亮 Yellow_S=1;Red_S=1;Green_S=0; /南北路口绿灯亮10s j=0; while(j+)=10) for(k=0;k20;k+) TR0=1; /定时器开始计时while(!TF0); P1=Table(j)/10; /数码管十位P0=Table(j)%10; /数码管个位P1=0xC0; /数码管复位P0=0xC0;case 4:Yellow_E=1;Red_E=0;Green_E=1; /东西路口红灯闪5次 Yellow_S=1;Red_S=1;Green_S=0; /南北路口绿灯闪5次 for(i=0;i=10;i+) Red_E=!Red_E;Green_S=!Green_S;Delay(20); case 5:Yellow_E=0;Red_E=1;Green_E=1; /东西路口黄灯亮 Yellow_S=0;Red_S=1;Green_S=1; /南北路口黄灯亮 Delay(50); /延时void main()EA=1; /开中断ET0=1; /定时计数器0开中断EX0=1; /外部中断0开中断EX1=1; /外部中断1开中断IT1=1; /外部中断0下降沿触发IT0=1; /外部中断1下降沿触发TMOD=0x01; /定时计数器0工作在方式一TR0=0;PT0=0; /设置定时计数器0中断优先级为低while(1)Traffic_LED();/调用交通灯显示子程序九、 总结与体会: 经过这一周的课程设计,我确定一个方向-关于交通灯系统设计,我认真查阅资料,学习关于这方面的知识,比如说要了解89c51芯片中各个引角的功能,怎么样去使用89c51这个可编程并行接口芯片,怎么样用89c51这个地址锁存器来存储高位地址和低位地址以及交通有哪些规则.在这学期理论学习的基础上,又下了一次苦工夫,算是明白了设计一个系统的过程;也让我体会到要想成功地设计某个东西,光学好专业知识是不够的,必须要系统的知识,无论在哪方面都要有个明白的概念,只有这样才不至于在设计过程中摸不着头脑,知道去哪些是需要查的资料,还有一点,我觉得我在芯片编程方面,或许是我的C语言学得不够呛好,我只能借助参考资料,这样一来又巩固了我的对C语言的了解. 如此,我体会到学习理论知识固然重要,但在你学完了之后,你不在实践中运用你所学的知识,我想学是白学了,过一段时间后,你可能什么都记不起来了,或许在学心里只有一个概念,认为这个知识我曾经学得不错,我现在怎么想不起来了,一心想依赖课本;如果我们用实践来学习知识,你会努力地去搜索你想要需要的东西,即使是过了一段时间后,你也会记得你曾经对这点不明白认真地查阅过,你不会忘记!一句话,课程设计对我们很重要! 最后感谢李丽宏老师给我们这次课程设计的机会和环境以及对我们的耐心讲解和认真辅导。十、 参考资料:1. 单片机原理与接口技术;作者:牛昱光;出版社:电子工业出版社。2. 51单片机实验指导书;太原理工大学信息工程学院实验中心。
展开阅读全文