河南理工大学
单片机课程设计报告
交通灯控制系统设计
姓 名: 学 号: 专业班级: 指导老师:
所在学院: 电气工程与自动化学院
2010年6月08日
摘要
近年来随着科技的飞速发展,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月异更新。在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,加以完善。十字路口车辆穿梭,行人熙攘,车行车道,人行人道,有条不紊。那么靠什么来实现这井然秩序呢?靠的是交通信号灯的自动指挥系统。
通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:中央处理器、存储器和I/O接口电路等。
单片机经过1、2、3、3代的发展,目前单片机正朝着高性能和多品种方向发
展,它们的CPU功能在增强,内部资源在增多,引角的多功能化,以及低电压底功耗。单片机是控制系统的核心,具有本系统所需的I/O口、数据存储器、程序存储器等主要部分。
本设计是由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括A道和B道上均有车辆要求通过时,A、B道轮流放行。一道有车而另一道无车,交通灯控制系统能立即让有车道放行。系统除基本交通灯功能外,还具有时间设置、紧急情况处理、分时段调整信号灯的点亮时间以及根据具体情况手动控制等功能。
关键字:AT89C52,交通规则
1
目录
1概述 .............................................................. 3
1.1设计任务..................................................... 3 1.2设计目的和要求............................................... 3 2系统总体方案及硬件设计 ............................................ 4
2.1系统总体方案................................................. 4 2.2交通灯信号控制电路........................................... 4 2.3 单片机的选择 ................................................ 5 2.4时钟电路模块................................................. 6 2. 5复位电路模块................................................ 6
2. 6 LED动态显示器接口电路...................................... 7 2.7开关电路..................................................... 7
3系统软件设计 ...................................................... 8 3.1软件部分整体架构设计及其模块化分............................. 8 3.2程序分块设计................................................. 9 4 Proteus软件仿真 ................................................. 15
4.1南北红灯亮东西绿灯亮........................................ 15 4.2南北红灯亮东西黄灯亮........................................ 16 4.3南北绿灯亮东西红灯亮........................................ 16 4.4南北黄灯亮东西红灯亮........................................ 17 4.5全部禁行……………………………………………………………………17 4.6 南北通行,东西禁行 ………………………………………………… 18 4.7 东西通行,南北禁行 ………………………………………………… 19 5课程设计体会 ..................................................... 20 参考文献 .......................................................... 20 附1 源程序代码 .................................................. 21
2
1概述
1.1设计任务
本设计是由单片机系统、键盘、LED 显示、交通灯演示系统组成。系统包括南北主干道和东西支干道上均有车辆要求通过时,主干道和支干道轮流放行。一道有车而另一道无车,交通灯控制系统能立即让有车道放行。系统除基本交通灯功能外,还具有紧急情况处理、黄灯闪烁等功能。 1.2设计目的和要求
目的:通过单片机课程设计,熟练掌握汇编语言或者c语言的编程方法,将理论联系到实践中去,提高我们的动脑和动手的能力。通过交通信号灯控制系统的设计,掌握定时/计数器的使用方法,和简单程序的编写,最终提高我们的逻辑抽象能力。
要求: 1)南北方向(主干道)车道和东西方向(支干道)车道两条交叉道路上的车辆交替运行,主干道每次通行时间都设为35秒、支干道每次通行间为25秒,时间可设置修改。
2)在绿灯转为红灯时,要求黄灯先亮5秒钟,才能变换运行车道; 3)黄灯亮时,要求每秒闪亮一次。
4)东西方向、南北方向车道除了有红、黄、绿灯指示外,每一种灯亮的时间都用显示器进行显示(采用计时的方法)。
5)一道有车而另一道无车(实验时用开关 K0 和 K1 控制),交通灯控制系统能立即让有车道放行。
6)有紧急车辆要求通过时,系统要能禁止普通车辆通行,A、B道均为红灯,紧急车由K2 开关模拟。
3
2系统总体方案及硬件设计
2.1系统总体方案
(1)南北方向A车道红灯亮,东西方向B车道绿灯亮。表示南北方向A车道上的车辆禁止通行,东西方向B车道允许通行。绿灯亮足规定的时间隔时,转到下一工作状态。
(2)南北方向A车道红灯亮,东西方向B车道黄灯亮,并每秒闪烁一次。表示东西方向B车道上未过停车线的车辆停止通行,已过停车线的车辆继续通行,南北方向A车道禁止通行。黄灯亮足规定时间间隔时,转到下一工作状态。
(3)南北方向A车道绿灯亮,东西方向B车道红灯亮。表示南北
方向A车道允许通行,东西方向B车道上的车辆禁止通行,绿灯亮足规定的时间间隔时,转到下一工作状态。
(4)南北方向A车道黄灯亮,东西方向B车道红灯亮。表示东西方向B车道禁止通行,南北方向A车道上位过限停车线的车辆停止通行,已过停车线的车辆继续通行。黄灯亮足规定的时间间隔时,系统又转换到第(1)种工作状态。 2.2交通灯信号控制电路
用P1口作信号输出端来控制12个灯的亮灭。C取22u。要保证加在RST引脚上的高电平持续2个机器周期,才能使单片机有效地复位。南北的绿灯,黄灯,红灯(东西的绿灯,黄灯,红灯)同时亮也同时灭。 复位电路如下图所示:
其状态及对应的十六进制值如下:
方向 状态 0 110 110 00 DBH 都为红灯亮 东 西 P1.7 P1.6 P1.5 南 北 P1.4 P1.3 P1.2 无 P1.1 P1.0 十六进制值 说 明 4
1 2 3 4 011111101111110010 1 1 0 1 1 1111011001101 0 0 0 0 0 0000000 78H B8H CCH D4H F8H DCH 东西绿南北红 东西黄闪 南北红 东西红南北绿 南北黄闪 东西红 2.3单片机选择
这次设计用到了AT89C52单片机(如图3),AT89C52系列单片机是由Atmel公司生产,而这家公司得到了Intel公司MCS51系列单片机内核生产授权,所以,它与MCS51系列单片机指令兼容,同时它的内部包含有用作程序存储器的4KB的基于FLASH技术的只读存储器。采用这款芯片及克服了采用8031需要添加外部外部程序存储器导致电路复杂的缺点,又克服了采用8751导致电路制作成本高的缺点。
AT89C52单片机芯片具有以下特性:
1)指令集合芯片引脚与Intel公司的8051兼容; 2)4KB片内在系统可编程FLASH程序存储器; 3)时钟频率为0~33MHZ;
4)128字节片内随机读写存储器(RAM); 5)6个中断源,2级优先级; 6)2个16位定时/记数器; 7)全双工串行通信接口; 8)监视定时器; 9)两个数据指针;
5
3130291819XTAL1876543219EAALEPSENP1.7P1.6P1.5P1.4P1.3P1.2P1.1/T2EXP1.0/T2RSTXTAL2U2AT89C52P3.7/RDP3.6/WRP3.5/T1P3.4/T0P3.3/INT1P3.2/INT0P3.1/TXDP3.0/RXD171615141312111028272625242322213233343536373839P0.7/AD7P0.6/AD6P0.5/AD5P0.4/AD4P0.3/AD3P0.2/AD2P0.1/AD1P0.0/AD0P2.7/A15P2.6/A14P2.5/A13P2.4/A12P2.3/A11P2.2/A10P2.1/A9P2.0/A8 图3
2.4时钟电路模块
为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个22P的独石电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。具体连接图如图4所示:
C21922pU1XTAL1X1CRYSTALC322p18XTAL29RSTP0.0/ADP0.1/ADP0.2/ADP0.3/ADP0.4/ADP0.5/ADP0.6/ADP0.7/AD 图4 2.5复位电路模块 293031PSENALEEA 单片机系统的复位电路在这里采用的是上电+按钮复位电路形式,其中电P2.0/AP2.1/AP2.2/A1P2.3/A1P2.4/A1P2.5/A1P2.6/A1P2.7/A1阻R采用200Ω的阻值,电容采用电容值为示5:
6 1P1.010μ的电解电容。具体连接电路如图2P1.13P1.24P1.35P1.46P1.57P1.68P1.7AT89C51P3.0/RXP3.1/TXP3.2/INTP3.3/INTP3.4/TP3.5/TP3.6/WP3.7/R R6200R22p18XTAL2K59RSTC110u 图5 2930PSEN 2.6 LED动态显示器接口电路 由于南北的绿灯、红灯与黄灯时间不相同,可用一个两位一体的共阳极数码管显示相应的时间,同理东西的绿灯,黄灯,红灯时间一个两位一体的共阳极数码管显示,。单片机的驱动电流非常小,采用AT89C52同相三态缓冲器器作驱动电路。为了减少硬件开支采用动态显示电路。P0口输出字型码。 硬件电路如下图所示: 2.7开关电路
总共有三个开关键,利用I/O口用查询方式来判断这三个键是否按下,以此来实现设计的要求。这里用三个按键连分别接P3口的三个口即连接
e 1 f e a a g d d f b c dp dp c 2 f e 3 a g d g b b c dp 4 7
P3.4,P3.5,P3.6的按键,分别实现全部禁行,东西通行、南北禁行和南北通行、东西禁行的功能。
3系统软件设计
程序首先要完成交通灯四个状态的依次循环,并且显示每个状态的剩余时间,对时间的计算要用到定时程序即每到一秒对正在运行状态的剩余时间减一,当从新设定绿灯,黄灯,红灯的时间初始值或要处理紧急情况时要通过外部按键实现,从而要有相应的按键处理程序。本次编程采用c语言编程。可以将程序分成初始化主程序,中断初始化程序,中断处理程序,延时程序,主程序。在中断处理程序中,键扫描程序,实现数码管显示等功能。
3.1软件部分整体架构设计及其模块化分
3.1.1软件的整体架构
系统的整体功能是实现LED的定时顺序控制,同时涉及数码显示和键盘
控制.结合单片机内部资源,可使用T0作为定时用,同时利用软件实现各时间段的定时中断,并执行相应动作. 3.1.2各功能模块的划分
据系统要求,可知,需要如下几个基本模块: 主程序模块, T0中断服务模
块(即相应状态控制模块),显示程序模块,键盘扫描及相应服务程序模块. 3.1.3系统各部分资源分配
T0作定时中断控制, P0口接数码管段码口线,P2口接相应位选端线,P1
口接LED显示模块,P3口接键盘.单片机内存资源的分配详见附录程序清单部分.
交通灯的流程图如下:
YES
8
开始 计数区赋初值 南北红灯东西绿灯 亮并开始计时 南北红灯东西黄灯闪烁并开始计时 YES 判断按键再次按下 执行各个按键程序 NO NO 判断是否有键按下 YES 开中断 南北绿灯东西红灯 亮并开始计时 南北黄灯东西黄灯
3.2程序分块设计 3.2.1程序初始化
亮并开始计时 将led灯显示、片选和二极管分别进行初始化,并对片p3口,以及程序中用到的各个变量进行初始化,对延时程序、键盘扫描程序初始化。具
9
体如下:
#include uchar code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 组合,共阴极 uchar code b[4]={0xfe,0xfd,0xfb,0xf7}; //位码组合 低有效 uchar code c[6]={0x78,0xb8,0xcc,0xd4,0xf8,0xdc}; //************************************************************************************* sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P3_6=P3^6; sbit P3_7=P3^7; uchar m=25,n=20,k=0,cnt=0,y=0,j,x,y; void delay(uchar t); void scankey(void) //段码 3.2.2 定时器初始化程序 将定时器0设置为定时器工作模式1,定时时间为50ms,启动定时器,并允许中断。具体程序如下: void inrupt(void) { TMOD=0x01; TH0=0x3c; TL0=0xb0; ET0=1; TR0=1; EA=1; } 3.2.3 中断执行程序 先对定时器0初始化,定时时间1s到后,执行中断程序,并重新开始计时。 10 开始 定时器初始化 定时时间1s到 判断k的值 k=0 k=1 k=2 Nk=1O 南北红灯东西绿灯南北红灯东西黄灯南北绿灯东西红灯 亮并开始计时 闪烁并开始计时 亮并开始计时 具体程序如下: void time1(void) interrupt 1 { TH0=0x3c; TL0=0xb0; cnt++; if(cnt>=20) { m--,n--;cnt=0; if(m==0||n==0) { k++; if(k>3) k=0; switch(k) { case 0:m=25,n=20;break; case 1:n=5;break; case 2:m=30,n=35;break; case 3:m=5;break; } } } 11 k=3 南北黄灯东西黄灯亮并开始计时 3.2.4延时程序 void delay(uchar t) //延时0.1*n毫秒 0 { uchar i; do { for(i=0;i<23;i++) ;;; } while(t--); } 3.2.4键盘扫描程序 对P3口扫描,当发现键确实按下时,执行按键程序key(),其中包含了键盘消抖。 void scankey(void) { if(P3_4==0) { delay(2); if(P3_4==0) { while(P3_4==0); j++; if(j==1) { key(); } } } if(P3_6==0) { 12 delay(2); if(P3_6==0) { while(P3_6==0); m++;n++; } } if(P3_5==0) { delay(2); if(P3_5==0) { while(P3_5==0); x++; if(x==1) { key(); } } } if(P3_7==0) { delay(2); if(P3_7==0) { while(P3_7==0); y++; if(y==1) { key(); 13 } } } } 3.2.5按键执行程序 当按键按下后,执行相应的操作,比如,P3.4按下,全部禁行。当再次按下时,接着中断前的程序继续执行。 { void key() ET0=0;TR0=0;EA=0; if(j==1)P1=0xd8; else if(x==1)P1=c[0]; else if(y==1)P1=c[2]; P0=a[0]; for(;;) { P2=b[0]; delay(20); P2=b[1]; delay(20); P2=b[2]; delay(20); P2=b[3]; delay(20); scankey(); if(j==2) { ET0=1;TR0=1;EA=1;j=0; break; } else if(x==2) { ET0=1;TR0=1;EA=1;x=0; break; } else if(y==2) { 14 } ET0=1;TR0=1;EA=1;y=0; break; } } 4 Proteus软件仿真 4.1南北红灯亮东西绿灯亮 RP1RESPACK-81U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161724681d0d1d2d3d4d5d6d7Y0Y1Y2Y318161412p20p21p22p2318XTAL29RSTR1100R2100R3100293031PSENALEEAd0d1d2d3d4d5d6d7p21p20D1REDD2YELLOWD3GREENp12p13p14p15p16p1712345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51p12p13R7100D7REDp14D10REDR10100p15p1523456789U2:AA0A1A2A3OE74LS244返回R8100D8p16YELLOWp16D11YELLOWR11100R9100D9p17p17D12p12p13p14GREENR12100GREEND4REDD5YELLOWD6GREENd0d1d2d3d4d5d6d7R4100R5100R6100p23p22 15 4.2南北红灯亮东西黄灯闪烁 RP1RESPACK-81U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161724681d0d1d2d3d4d5d6d7Y0Y1Y2Y318161412p20p21p22p2318XTAL29RSTR1100R2100R3100293031PSENALEEAd0d1d2d3d4d5d6d7p21p20D1REDD2YELLOWD3GREENp12p13p14p15p16p1712345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51p12p13R7100D7REDp14D10REDR10100p15p1523456789U2:AA0A1A2A3OE74LS244返回R8100D8p16YELLOWp16D11YELLOWR11100R9100D9p17p17D12p12p13p14GREENR12100GREEND4REDD5YELLOWD6GREENd0d1d2d3d4d5d6d7R4100R5100R6100p23p22 4.3按下键K2时的状态:南北绿灯亮东西红灯亮 RP1RESPACK-81U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161724681d0d1d2d3d4d5d6d7Y0Y1Y2Y318161412p20p21p22p2318XTAL29RSTR1100R2100R3100293031PSENALEEAd0d1d2d3d4d5d6d7p21p20D1REDD2YELLOWD3GREENp12p13p14p15p16p1712345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51p12p13R7100D7REDp14D10REDR10100p15p1523456789U2:AA0A1A2A3OE74LS244返回R8100D8p16YELLOWp16D11YELLOWR11100R9100D9p17p17D12p12p13p14GREENR12100GREEND4REDD5YELLOWD6GREENd0d1d2d3d4d5d6d7R4100R5100R6100p23p22 16 4.4南北黄灯亮东西红灯亮 RP1RESPACK-81U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161724681d0d1d2d3d4d5d6d7Y0Y1Y2Y318161412p20p21p22p2318XTAL29RSTR1100R2100R3100293031PSENALEEAd0d1d2d3d4d5d6d7p21p20D1REDD2YELLOWD3GREENp12p13p14p15p16p1712345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51p12p13R7100D7REDp14D10REDR10100p15p1523456789U2:AA0A1A2A3OE74LS244返回R8100D8p16YELLOWp16D11YELLOWR11100R9100D9p17p17D12p12p13p14GREENR12100GREEND4REDD5YELLOWD6GREENd0d1d2d3d4d5d6d7R4100R5100R6100p23p22 4.5全部禁行 17 RP1RESPACK-8U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161724681d0d1d2d3d4d5d6d7Y0Y1Y2Y31816141218XTAL291RSTR1100R2100R3100293031PSENALEEAp23p22d0d1d2d3d4d5d6d7D1REDD2YELLOWD3GREENp12p13p14p15p16p1712345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51p12p13p14R7100D7REDD10REDR10100p15p15R8100D8p16YELLOWp16D11YELLOWR11100R9100D9p17p12p13D12p17p14R12100GREENGREENREDYELLOWGREENR4100R5100R6100p21p20d0d1d2d3d4d5d6d7D4D5D623456789U2:AA0A1A2A3OE74LS244 4.6南北通行,东西禁行 U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161724681d0d1d2d3d4d5d6d7Y0Y1Y2Y318161412p20p21p22p23RP1RESPACK-8118XTAL29RSTR1100R2100R3100293031PSENALEEA23456789U2:AA0A1A2A3OE74LS244d0d1d2d3d4d5d6d7p23p22D1REDD2YELLOWD3GREENp12p13p14p15p16p1712345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51设置紧急停车p12p13p14R7100D7REDD10RED+1R10100p15p15R8100D8p16YELLOWp16D11YELLOWR11100R9100D9p17p12p13D12p17p14R12100GREENGREENd0d1d2d3d4d5d6d7REDYELLOWGREENR4100R5100R6100p21p20D4D5D6 18 4.7东西通行,南北禁行 U119XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161724681d0d1d2d3d4d5d6d7Y0Y1Y2Y318161412p20p21p22p23RP1RESPACK-8118XTAL29RSTR1100R2100R3100293031PSENALEEA23456789U2:AA0A1A2A3OE74LS244d0d1d2d3d4d5d6d7p23p22D1REDD2YELLOWD3GREENp12p13p14p15p16p1712345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51设置紧急停车p12p13p14R7100D7REDD10RED+1R10100p15p15R8100D8p16YELLOWp16D11YELLOWR11100R9100D9p17p12p13D12p17p14R12100GREENGREENd0d1d2d3d4d5d6d7REDYELLOWGREENR4100R5100R6100p21p20D4D5D6 19 5课程设计体会 做了两周的课程设计,让人感受颇深,有关于单片机知识的,但更多是团队和合作。 我们小组一共2个人,分工很重要,在我们俩的讨论之下,我得到了设计硬件电路和总体调试的任务,当时让我感到很有压力。因为我们平时接触的都是纯粹理论的东西,做实验也是雾里看花,对硬件的认识是很缺乏的。 一回来我就去图书馆查阅的大量的单片机和数字芯片的资料,由于资料比较分散,所以整理有用的资料就显得很重要,有些东西实在是不懂我就把资料带回来请教同学,让我受益匪浅。然后在硬件电路的设计中,由于要涉及软件设计的具体情况,又和组员共同讨论,最终确定了一个大家都可以接受的方案。当时感觉这下任务该完成了,没有想到的是在实际的调试中更是遇到了太多的麻烦。 我们拿着设计好的电路接线图和设计的程序去实验室调试,第一次就给了我们致命的打击,设计的功能仅仅实现了一个,只有红绿灯变化正常,倒计时也显示不出来,紧急功能也不能很好的返回,夜间的黄灯也不能闪烁,当时由于没有一些元件没有发下来,当时只是对程序进行了修改,但还是没有明显的效果,就垂头丧气的回来等把元件发了再去调试。 到了正式做设计的时间,元件也发下来了,我们就怀着一丝希望去实验室进行调试,但结果同样让人感到绝望,这次红绿灯也亮不了。我们就拿着程序反复分析,反复修改但还是没有效果。就在我们想到放弃的时候,和我们方案接近的同学在修改了硬件电路之后有很大的改善,于是我就去掉了所有的驱动芯片,这回红绿灯也好了,倒计时也正常了,这真是让人兴奋了一回,随后在写软件同学的深入思索下,改了几句程序,紧急情况和夜间模式也正常了,这真是让人高兴,因为这意味着我们的设计成功了。 很感谢学校和老师给我们安排了这次课程设计,让我真正感受到的是合作的重要,许多时候都是组员的讨论,老师的指导中的一句半句启发了我,就出现的让人欣喜的结果;理论知识同样很重要,有些问题都是由于基础知识掌握不好才出现的。 20 参考文献 [1]余发山.单片机原理及应用技术.徐州:中国矿业大学出版社.2003,7-81070,218-276 [2] 张毅刚,刘杰. MCS-51系列单片机原理及应用.哈尔滨:哈尔滨工业大学出版社,2004.8-28 [3]朱善君,孙新亚,吉吟东著.单片机接口技术与应用.北京:清华大学出版社,2005,86-102 [4]沈美明,温冬婵.IBM-PC汇编语言程序设计.北京:清华大学出版社,2001. 附1 源程序代码 #include uchar code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 组合,共阴极 uchar code b[4]={0xfe,0xfd,0xfb,0xf7}; //位码组合 低有效 uchar code c[6]={0x78,0xb8,0xcc,0xd4,0xf8,0xdc}; //************************************************************************************* sbit P3_4=P3^4; sbit P3_5=P3^5; sbit P3_6=P3^6; sbit P3_7=P3^7; uchar m=25,n=20,k=0,cnt=0,y=0,j,x,y; void delay(uchar t); void scankey(void); //段码 21 //*************************中断程序 ************************************************* void inrupt(void) { } //**************************中断处理程序 *************************************************** void key() { scankey(); if(j==2) P2=0xf7; delay(20); P2=0xfb; delay(20); ET0=0;TR0=0;EA=0; if(j==1)P1=0xd8; else if(x==1)P1=c[0]; else if(y==1)P1=c[2]; P0=a[0]; for(;;) { P2=0xfe; delay(20); delay(20); TMOD=0x01; TH0=0x3c; TL0=0xb0; ET0=1; TR0=1; EA=1; P2=0xfd; 22 } { } else if(x==2) { ET0=1;TR0=1;EA=1;x=0; break; } else if(y==2) { ET0=1;TR0=1;EA=1;y=0; } break; } ET0=1;TR0=1;EA=1;j=0; break; void time1(void) interrupt 1 { TH0=0x3c; TL0=0xb0; cnt++; if(cnt>=20) { m--,n--;cnt=0; if(m==0||n==0) { k++; if(k>3) k=0; switch(k) { case 0:m=25,n=20;break; case 1:n=5;break; case 2:m=30,n=35;break; case 3:m=5;break; 23 } } } } void delay(uchar t) //延时0.1*n毫秒 0 { uchar i; do { for(i=0;i<23;i++) ;;; } while(t--); } void main(void) { P3_4=1; P3_5=1; P3_7=1; inrupt(); P1=c[k]; while(1) { if(cnt>=10) { if(k==1)P1=c[4]; else if(k==3) P1=c[5]; 24 else P1=c[k]; } else P1=c[k]; P2=0xfe,P0=a[m%10]; delay(50); P2=0xfd,P0=a[m/10]; delay(50); P2=0xfb,P0=a[n%10]; delay(50); P2=0xf7,P0=a[n/10]; delay(50); scankey(); } } void scankey(void) { if(P3_4==0) { delay(2); if(P3_4==0) { while(P3_4==0); j++; if(j==1) { key(); } } } 25 if(P3_6==0) { delay(2); if(P3_6==0) { while(P3_6==0); m++;n++; } } if(P3_5==0) { delay(2); if(P3_5==0) { while(P3_5==0); x++; if(x==1) { key(); } } } if(P3_7==0) { delay(2); if(P3_7==0) { while(P3_7==0); y++; if(y==1) { key(); } } } 26 } 27 因篇幅问题不能全部显示,请点此查看更多更全内容