成绩评定表课程设计任务书目录1设计要求 (1)2设计方案 (1)2.1设计思路 (1)2.2设计框图 (1)3设计原理及电路图 (2)3.1 硬件原理 (2)3.1.1 ATC89C52介绍 (2)3.1.2 单片机最小系统 (2)3.1.3 发射/接收芯片 (3)3.2电路图 (4)3.2.1 控制电路 (4)3.2.2 被控制电路图 (4)3.2.3 无线交通灯整体电路图 (6)4设计程序 (6)4.1 Keil C51软件介绍 (6)4.2 设计流程图 (7)4.3 设计程序代码 (8)5 Proteus仿真 (13)5.1 Proteus软件介绍 (13)5.2 仿真结果 (13)总结 (15)参考文献 (16)1设计要求(1)采用单片机AT89C52实现红绿灯的自动工作,红灯、绿灯默认情况下点亮时间为60秒,并且可以接受远端发来的时间延迟命令。
(2)采用单片机AT89C52实现对远端交通灯时间延迟的控制2设计方案2.1设计思路交通灯上电以后,在没有远端控制命令的情况下,按照原先默认的工作方式工作,在接收到远端延时控制命令后,随之改变其工作方以满足控制命令的要求;信号发射设备端可产生时间延迟控制命令。
两者有相应的显示设备,使交通灯系统更合理化,人性化。
2.2设计框图图2-1 控制模块框图图2-2 被控制模块框图3设计原理及电路图3.1 硬件原理3.1.1 ATC89C52介绍AT89C52提供以下标准功能:4k字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内震荡器及时钟电路。
同时,AT89C52可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。
掉电方式保存RAM中的内容,但震荡器停止工作并禁止其他所有部件工作直到下一个硬件复位。
图3-1 AT89C523.1.2 单片机最小系统①复位电路:由电容串联电阻构成,由图并结合"电容电压不能突变"的性质,可以知道,当系统一上电,RST脚将会出现高电平,并且,这个高电平持续的时间由电路的RC值来决定.典型的51单片机当RST脚的高电平持续两个机器周期以上就将复位,所以,适当组合RC的取值就可以保证可靠的复位.一般教科书推荐C 取10u,R取8.2K.当然也有其他取法的,原则就要让RC图3-2 复位晶振电路组合可以在RST脚上产生不少于2个机周期的高电平;②复位输入高电平有效,当振荡器工作是,RST引脚出现两个机器周期以上的高电平,使单片机复位。
此电路除具有上电复位功能外,若要复位只需按“RST”键,此电源Vcc经电阻分压,在RST端产生一个复位高电平;③晶振电路:典型的晶振取11.0592MHz(因为可以准确地得到9600波特率和19200波特率,用于有串口通讯的场合)/12MHz(产生精确的方波便于12分频,方便定时操作);④单片机:一片AT89S51/52或其他51系列兼容单片机;注意:对于31脚(EA/Vpp),当接高电平时,单片机在复位后从内部ROM的0000H开始执行;当接低电平时,复位后直接从外部ROM的0000H开始执行;⑤电源部分:接+5伏特的电压。
3.1.3 发射/接收芯片nRF2401是单片射频收发芯片,工作于2.4~2.5GHz ISM频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。
芯片能耗非常低,以-5dBm的功率发射时,工作电流只有10.5mA,接收时工作电流只有18mA,多种低功率工作模式,节能设计更方便。
其DuoCeiverTM技术使nRF2401可以使用同一天线,同时接收两个不同频道的数据。
nRF2401适用于多种无线通信的场合,如无线数据传输系统、无线鼠标、遥控开锁、遥控玩具等。
图3-3 nRF401无线传输模块3.2电路图3.2.1 控制电路控制电路图如图3-4所示,其中,开关控时间延长的开与关;LED数码管分显示红灯和绿灯分别延长的时间,最长延长时间为60秒,当超过60秒后,红灯、绿灯恢复为默认值。
图3-4 控制电路图3.2.2 被控制电路图被控制电路图如图3-5所示,其中,数码管分别在红灯、绿灯最后9秒亮起并自动倒数,具有提示作用。
图3-5 被控制电路3.2.3 无线交通灯整体电路图图3-6 无线交通灯电路图4设计程序4.1 Keil C51软件介绍Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势。
因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境uVision将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
4.2 设计流程图(1)控制模块流程图如图4-1所示。
图4-1 控制模块流程图(2)红灯、绿灯、黄灯工作流程图如图4-2所示图4-2 红绿黄灯三灯工作流程图(3)中断处理模块流程图如图4-3所示图4-3 中断处理模块流程图4.3 设计程序代码根据流程图,编写程序代码。
(1)发送模块#include<REG52.h>#include<stdio.h>#define uchar unsigned charsbit key0=P1^0;sbit key1=P1^1;uchar data_0;uchar counter0;uchar counter1;void initUart(void);void senddata(uchar dat);void delay(int m);void main(void){counter0=0;counter1=0;key0=0;key1=0;P2=0;initUart();while(1)while(key0!=key1)//按键扫描if(key0==1)//按键0{delay(20);//去抖动if(key0==1){data_0=0x55;senddata(data_0);//发送绿灯延时命令if(counter0==0x0c)//判断延时总长度是否满足60s{counter0=0x00;P2=counter0|counter1;}else{counter0=counter0+1;P2=counter0|counter1;}}}else if(key1==1)//按键1{delay(20);//去拌动if(key1==1){data_0=0xcc;senddata(data_0);//发送红灯延时命令if(counter1==0xc0)//判断延时总长度是否满足60s{counter1=0x00;P2=counter1|counter0;}else{counter1=counter1+16;P2=counter1|counter0;}}}}void initUart(void)//串口初始化,波特率为9600{PCON=0x00;SCON=0x40;TMOD=TMOD|0x20;TH1=0xfd;TL1=0xfd;ES=0;EA=0;TR1=1;}void senddata(uchar dat)//命令发送函数{SBUF=dat;while(TI!=1);TI=0;delay(1000);}void delay(m)//延时,单位ms{uchar ucCounter;while(m){for(ucCounter=0;ucCounter<239;ucCounter++){}m--;}}(2)接收模块#include<reg52.h>#include<stdio.h>#define uchar unsigned charsbit led_red=P1^0;//红灯sbit led_yellow=P1^1;//黄灯sbit led_green=P1^2;//绿灯sbit select=P1^3;//倒计时颜色选择uchar dat=0x00;uchar tab0[10]={0x00,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b};//数字表uchar m,n;unsigned int i,temp,count;void initUart(void);void time_delay(unsigned int t);void main(){m=10;n=10;P0=0;P2=0;initUart();while(1){led_green=1;led_red=0;led_yellow=0;time_delay(m);led_green=0;led_yellow=1;time_delay(3);led_yellow=0;led_red=1;time_delay(n);}}void initUart(void)//串口初始化,波特率为9600{PCON=0x00;//波特率不加倍SCON=0x50;//串口工作在方式1,允许接收TMOD=TMOD|0x20;//定时器1工作在方式2TH1=0xfd;TL1=0xfd;ES=1;//开串口中断EA=1;//开总中断TR1=1;}void time_delay(unsigned int t)//延时,单位s {TMOD=TMOD|0x01;//定时器0工作方式1TH0=(65536-19556)>>8;TL0=(65536-19556)%256;ET0=0;TR0=1;count=t;temp=40*t;for(i=0;i<temp;i++){while(1)if(TF0){TH0=(65536-19556)>>8;TL0=(65536-19556)%256;TF0=0;TR0=1;break;}if(led_green|led_red){if((i+1)%40==0)count--;//倒数至9秒if(count<=9)if(led_green)P2=tab0[count];else if(led_red)P0=tab0[count];}}}void serial_int(void) interrupt 4//串口中断处理程序{EA=0;dat=SBUF;switch(dat){case 0x55:{if(m==120)m=10;elsem=m+5;break;}case 0xcc:{if(n==120)n=10;elsen=n+5;break;}}RI=0;EA=1;}5 Proteus仿真5.1 Proteus软件介绍Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。