完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
该程序是基于使用STC89C52芯片下的51开发板
首先确认两种工作状态: ①南北方向红灯60s;东西方向绿灯57s,然后黄灯三秒。 ②南北方向绿灯57秒,然后黄灯3秒;东西方向红灯60s。 这两种工作状态交替进行。 该程序是主要使用定时器中断来完成的,学好定时器中断就能轻松写出这个程序 给程序标了一些简单注释,有看不懂的地方可以评论区留言。 #include #define uint unsigned int #define uchar unsigned char ***it du=P2^6; ***it we=P2^7; ***it NS_r=P1^0; ***it NS_y=P1^1; ***it NS_g=P1^2; ***it EW_r=P1^4; ***it EW_y=P1^5; ***it EW_g=P1^6; uint i=60,j=57; uchar k; uchar code SMGdu[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F}; uchar code SMGwe[]={0xfe,0xfd,0xef,0xdf}; void time0() //定时计数器0初始化 { EA=1; ET0=1; //配置定时器0中断 TR0=1; TMOD=0x01; TH0=0xed; //定时5ms TL0=0xff; } void display() //扫描数码管 { uint n1,n2,e1,e2;//NS,EW方向数码管 n1=i/10; n2=i%10; e1=j/10; e2=j%10; we = 1;//打开位选锁存器 P0 = SMGwe[k%4]; we = 0;//锁存位选数据 switch(k%4) { case 0:du=1;P0=SMGdu[e1];du=0;break; case 1:du=1;P0=SMGdu[e2];du=0;break; case 2:du=1;P0=SMGdu[n1];du=0;break; case 3:du=1;P0=SMGdu[n2];du=0;break; } } void main() { time0(); NS_r=0; //初始化南北方向红灯,东西方向绿灯 EW_g=0; while(1)//两个阶段 1.南北方向红60s;东西方向绿57s,黄3s { //2.东西方向红60s;南北方向绿57s,黄3s if(j==0&&i==3) { EW_g=1; EW_y=0; j=3; } if(i==0&&EW_y==0) { NS_r=1; NS_g=0; EW_y=1; EW_r=0; i=57; j=60; } if(i==0&&j==3) { NS_g=1; NS_y=0; i=3; } if(i==0&&NS_y==0) { NS_y=1; NS_r=0; EW_r=1; EW_g=0; i=60; j=57; } } { TH0=0xed; //定时5ms TL0=0xff; k++; if(k==200) { i–; j–; k=0; } display(); } |
|
|
|
只有小组成员才能发言,加入小组>>
2514 浏览 0 评论
1094浏览 2评论
705浏览 1评论
458浏览 0评论
200浏览 0评论
341浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 06:29 , Processed in 1.299519 second(s), Total 78, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号