系统实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

系统实验1342401003李金轲13通信工程一.设计任务*时钟(计时器)1.状态1:一只数码管0-9计数,一只按键控制开始、结束;2.状态2:二只数码管0-59计数,一只按键控制开始、结束;3.状态3:三只数码管低二位0-59计数后进位给高威0-9计数,一只按键控制开始、结束;4.状态4:四只数码管低二位0-59计数后进位给高二位0-59计数(即分秒计时器),一只按键控制开始、结束;注:还可增加按键、增强功能。(如暂停/开始)*交通灯5.状态1:仅亮灯,数码管不工作;按下键,红/黄/绿三色灯交替亮:红(20秒)→黄(闪烁5秒)→绿(20秒)→黄(闪烁5秒)→红。6.状态2:灯和数码管相结合,模拟十字路口的交通灯。在以上功能的基础上数码管倒计时显示时间。二.电路器件功能说明与引脚图*功能说明(A)稳压部分将输入的交流电转换成稳定的5V直流电压;由于目前提供的已经是直流变压器,所以整流桥可以不用;(B)作为单片机的输入部分(P1.0~P1.3)起控制作用;单片机AT89S51(E)数码管4只(C)发光二极管6只(D)74ls47(F)稳压源(A)按键(B)单片机AT89S51(E)图1器件模块图(C)作为单片机的输出部分,P0.0~P0.3经由7段译码器(74LS47)控制数码管的显示结果(0~9),P0.4~P0.7数码管的选通控制口,提供数码管工作电源(公共端),P2.7控制数码管的小数点是否点亮;(D)发光二极管:输出部分,由P2.0~2.5口控制,高电平灯亮;(E)单片机AT89S51:低功耗,高性能CMOS8位单片机。片内含8KB的ISP(IN-SYSTEM-PROGRAMMABLE)的可反复擦写1000次的FLASH只读程序存储器,器件采用ATMEL公司的高密度、非易始性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。其特点概括为:40个引脚;8KBFLASH片内存储器(可反复擦写大于1000次);256BYTES的随机存储器(RAM);32个外部双向输入/输出(I/O)口;5个终端优先级,2层中断套嵌;2个全双工串行通信口;看门狗(WDT)电路;片内时钟振荡器(0~33MHz);4.5~5.5V工作电压。*引脚图图2.AT89S51引脚图图3.74LS47引脚图二.系统实验原理图图4.系统实验原理图四.软件设计流程图*分秒计时器1234ABCD4321DCBAEA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10U1AT89S51XTAL111.0592C520pC620pVCC234567891RP310K排阻234567891RP410K排阻234567891RP110K排阻VCCVCCC1222uR101KVCCVCCC7470UC90.1U123J33芯插座RSTVin1GND2Vout3U5LM7805SCKMOSIMISOACAC+-D1整流桥K1按键K2按键K3按键K4按键R11KLEDPower红灯KEYRESET按键KEYAKEYBKEYCKEYDNUMANUMBNUMCNUMDLED1LED2LED3LED4L1L2L3L4L5L6DOTKEYAKEYBKEYCKEYDR21KLED1绿Q19013VCCL1R31KLED2红灯Q29013L2R41KLED3黄Q39013L3R51KLED4绿Q49013L4R61KLED5红灯Q59013L5R71KLED6黄Q69013L6edvc1cdpedvc2cdpedvc3cdpedvc4cdpfgabfgabfgabfgabLT3BI/RBO4RBI5g14f15e9d10c11b12a13D6C2B1A7U274LS47gfedcbaNUMANUMBNUMCNUMDR20150R21150R22150R23150R24150R25150R26150Q79013VCCLED1Q89013LED2Q99013LED3Q109013LED4vc1vc2vc3vc4R27150dpDOTRXDTXD12345J25芯插座VCCGNDMOSIMISOSCK12345J15芯插座VCCGNDGNDRXDTXDabfcgdeDPYe1d2com3c4dp5b6a78g9f10DS1数码管abfcgdeDPYe1d2com3c4dp5b6a78g9f10DS2数码管abfcgdeDPYe1d2com3c4dp5b6a78g9f10DS3数码管abfcgdeDPYe1d2com3c4dp5b6a78g9f10DS4数码管开始初始化计时器计时20ms初始化中断秒加一,中断次数清零数码管DS1显示分的十位DS2显示分的个位DS3显示秒的十位DS4显示秒的个位中断=50NY秒=60分加一,秒清零分=60NNYY分清零图5.分秒计时器流程图显示部分*交通灯计时部分:Led灯部分开始初始化计时器time1=25time2=20计时20ms初始化中断秒加一,中断次数清零数码管DS1显示南北方向倒计时秒的十位DS2显示南北方向倒计时秒的个位DS3显示东西方向倒计时秒的十位DS4显示东西方向倒计时秒的个位中断=50NY开始南北红灯LED2亮东西绿灯LED4亮延时20s南北红灯LED2亮东西黄灯LED6闪烁延时5秒南北绿灯LED1亮东西红灯LED5亮延时20s南北黄灯LED3闪烁东西红灯LED5亮延时5s显示部分图6.交通灯流程图秒=20转换到1状态秒清零time1=5time2=5秒=5秒清零time1=20time2=25秒=20秒清零time1=5time2=5转换到2状态转换到3状态NNYYNY五.源程序#includereg51.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintsbitKey1=P1^0;sbitKey2=P1^1;sbitKey3=P1^2;sbitKey4=P1^3;sbitLED1=P0^4;sbitLED2=P0^5;sbitLED3=P0^6;sbitLED4=P0^7;sbitL1=P2^0;sbitL2=P2^1;sbitL3=P2^2;sbitL4=P2^3;sbitL5=P2^4;sbitL6=P2^5;//引脚绑定voiddelayMs(ucharms);//定义延时程序voiddisplay1(void);//计数器主程序voiddisplay2(void);//交通灯主程序voidinit_timer0(void);//定时器1voidinit_timer1(void);//定时器2ucharflag=0;//交通灯状态标志ucharmin=0;ucharsec=0;uchartime1=25;uchartime2=20;uintnum=0;voidmain(void){while(1){min=0;sec=0;P0=0;P2=0x80;TR0=0;TR1=0;P1=0xff;//按键查询if(Key1==0){//启动计时器delayMs(1);//按键防抖if(Key1==0){while(!Key1);min=0;sec=0;display1();}}if(Key2==0){//启动交通灯delayMs(1);if(Key2==0){while(!Key2);min=0;sec=0;display2();}}}}voiddisplay1(void){init_timer0();while(1){P0=0x1f&(0xf0|(min/10));//P0.4选通DS1分十位P0=0x2f&(0xf0|(min%10));//P0.5选通DS2分个位P0=0x4f&(0xf0|(sec/10));//P0.6选通DS3秒十位P0=0x8f&(0xf0|(sec%10));//p0.7选通DS4秒个位P1=0xff;//按键查询if(Key2==0)//按下key2,从计时器转换到交通灯{delayMs(1);if(Key2==0){min=0;sec=0;display2();}}elseif(Key3==0){//按下key3,暂停计时器delayMs(1);if(Key3==0){while(!Key3);TR0=0;while(1){P0=0x1f&(0xf0|(min/10));P0=0x2f&(0xf0|(min%10));P0=0x4f&(0xf0|(sec/10));P0=0x8f&(0xf0|(sec%10));P1=0xff;//按键查询if(Key3==0){delayMs(1);if(Key3==0){while(!Key3);//松开key3,继续计时TR0=1;break;}}}}}}}voiddisplay2(void){P2=0x8a;init_timer1();while(1){P0=0x1f&(0xf0|((time1-sec)/10));//P0.4选通DS1,输出秒十位delayMs(1);//消隐P0=0x2f&(0xf0|((time1-sec)%10));//P0.5选通DS2,输出秒个位delayMs(1);P0=0x4f&(0xf0|((time2-sec)/10));//P0.6选通DS3,输出秒十位delayMs(1);P0=0x8f&(0xf0|((time2-sec)%10));//P0.7选通DS4,输出秒个位delayMs(1);P1=0xff;//按键查询if(Key1==0)//按下key1,从交通灯转换到定时器{delayMs(1);if(Key1==0){min=0;sec=0;display1();}}elseif(Key4==0){//按下key4,暂停交通灯delayMs(1);if(Key4==0){while(!Key4);TR1=0;while(1){P0=0x1f&(0xf0|((time1-sec)/10));delayMs(1);P0=0x2f&(0xf0|((time1-sec)%10));delayMs(1);P0=0x4f&(0xf0|((time2-sec)/10));delayMs(1);P0=0x8f&(0xf0|((time2-sec)%10));delayMs(1);P1=0xff;//按键查询if(Key4==0){delayMs(1);if(Key4==0){while(!Key4);//松开key4,继续运行交通灯TR1=1;break;}}}}}}}voidinit_timer0(void)//定时器初始化{TMOD=0x01;//工作方式1TH0=(65536-20000)/256;//装载初值20ms计时TL0=(65536-20000)%256;EA=1;//开中断ET0=1;TR0=1;//启动定时器0TR1=0;num=0;}voidtimer0()interrupt1//定时器0中断入口{TH0=(65536-20000)/256;//重新装载初值,20ms计时,重新计时TL0=(65536-20000)%256;num++;if(num==50){//中断50次秒加一num=0;sec++;if(sec==60){//60秒后分钟加一sec=0;min++;if(min==60){min=0;}//60分钟后重新计时}}}voidinit_timer1(void)//定时器1初始化{TMOD=0x10;//工作方式1TH1=(65536-20000)/256;//20ms计时TL1=(65536-20000)%256;EA=1;ET1=1;TR1=1;TR0=0;num=0;}vo

1 / 12
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功