ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:16.76KB ,
资源ID:11955245      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11955245.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于Proteus仿真51交通灯毕设.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于Proteus仿真51交通灯毕设.docx

1、基于Proteus仿真51交通灯毕设基于51单片机的交通灯C语言程序设计2011-05-07 07:57十字交叉路口的交通灯控制器,是很常见的课程设计题目。做而论道以前写过一个,功能十分简单。最近,综合了一些XX知道中的题目要求,写出了一个稍稍复杂一点设计方案,使用了大家比较喜欢的C语言编写程序。基本功能如下:(1)东西、南北方向各设有一个绿、黄、红指示灯,两个显示数码管。(2)两个方向交替允许通行,基本放行时间为25s,另外有黄灯闪烁5s。(3)控制人员可以暂停自动的交替,使某个方向可以无限长时间的通行。(4)暂停期间,控制人员可以调整通行的时间,程序中还设置了调整的上下限。(5)暂停之后,

2、灯光将按照设置的通行时间自动变换通行方向。(6)在正常通行期间,可以强制变换通行方向。强制变换的时候,也是要先显示闪烁的黄灯,然后切换到指定的方向。程序用PROTEUS仿真成功,并没有进行硬件实验。仿真截图画面如下。C语言的控制程序如下:/-#include #define uchar unsigned char#define uint unsigned intuchar data buf4;uchar data sec_dx=30;/东西数默认uchar data sec_nb=30;/南北默认值uchar data set_timedx=30;uchar data set_timenb=3

3、0;int n;uchar data b;/定时器中断次数sbit k1=P16;/定义5组开关sbit k2=P17;sbit k3=P27;sbit k4=P30;sbit k5=P31;sbit Yellow_nb=P25; /南北黄灯标志sbit Yellow_dx=P22; /东西黄灯标志sbit Green_nb=P24;sbit Green_dx=P21;sbit Red_nb=P26;sbit Red_dx=P23;sbit Buzz=P37;bit Buzzer_Indicate;bit time=0;/灯状态循环标志bit set=1;/调时方向切换键标志uchar cod

4、e table10= /共阴极字型码0x3f, /-00x06, /-1?0x5b, /-2?0x4f, /-30x66, /-4?0x6d, /-50x7d, /-60x07, /-7?0x7f, /-80x6f, /-9/0x00 /-NULL;/函数的声明部分void delay(int ms);/延时子程序void key();/按键扫描子程序void key_to1();/键处理子程序void key_to2();void key_to3();void display();/显示子程序void logo(); /开机LOGOvoid Buzzer();/主程序void main()

5、TMOD=0X01; TH0=0XD8; TL0=0XF0; EA=1; ET0=1; TR0=1; EX0=1; EX1=1; logo(); P2=0Xc3;/ 开始默认状态,东西绿灯,南北黄灯 sec_nb=sec_dx+5; while(1) key(); /调用按键扫描程序 display(); /调用显示程序 Buzzer(); /函数的定义部分void key() /按键扫描子程序 if(k1!=1) delay(10); if(k1!=1) while(k1!=1) key_to1(); for(n=0;n40;n+) display(); if(k2!=1) delay(10

6、); if(k2!=1) while(k2!=1) key_to2(); for(n=0;n40;n+) display(); if(k3!=1) TR0=1; /启动定时器 Buzzer_Indicate=0; sec_nb=set_timenb; /从中断回复,仍显示设置过的数值 sec_dx=set_timedx; if(time=0) P2=0X99;sec_nb=sec_dx+5; else P2=0xC3;sec_dx=sec_nb+5; if(k4!=1) delay(10); if(k4!=1) while(k4!=1); set=!set; if(k5!=1) delay(1

7、0); if(k5!=1) while(k5!=1) key_to3(); void display() /显示子程序 buf1=sec_dx/10; /第1位 东西秒十位 buf2=sec_dx%10; /第2位 东西秒个位 buf3=sec_nb/10; /第3位 南北秒十位 buf0=sec_nb%10; /第4位 南北秒个位 P1=0xff; / 初始灯为灭的 P0=0x00; P1=0xfe; /片选LCD1 P0=tablebuf1; delay(1); P1=0xff; P0=0x00; P1=0xfd; /片选LCD2 P0=tablebuf2; delay(1); P1=0x

8、ff; P0=0x00; P1=0Xfb; /片选LCD3 P0=tablebuf3; delay(1); P1=0xff; P0=0x00; P1=0Xf7; P0=tablebuf0; /片选LCD4 delay(1);void time0(void) interrupt 1 using 1 /定时中断子程序 b+; if(b=19) / 定时器中断次数 b=0; sec_dx-; sec_nb-; if(sec_nb=5&time=0) /东西黄灯闪 Green_nb=0 ;Yellow_nb=!Yellow_nb; if(sec_dx=5&time=1) /南北黄灯闪 Green_dx

9、=0 ;Yellow_dx=!Yellow_dx; if(sec_dx=0&sec_nb=5) sec_dx=5; if(sec_nb=0&sec_dx=5) sec_nb=5; if(time=0&sec_nb=0) P2=0x99;time=!time;sec_nb=set_timenb;sec_dx=set_timenb+5; if(time=1&sec_dx=0) P2=0Xc3;time=!time;sec_dx=set_timedx;sec_nb=set_timedx+5; void key_to1() /键盘处理子程序之+ TR0=0; /关定时器 if(set=0) set_t

10、imenb+; /南北加1S else set_timedx+; /东西加1S if(set_timenb=100) set_timenb=1; if( set_timedx=100) set_timedx=1; /加到100置1 sec_nb=set_timenb ; /设置的数值赋给东西南北 sec_dx=set_timedx; void key_to2() /键盘处理子程序之- TR0=0; /关定时器 if(set=0) set_timenb-; /南北减1S else set_timedx-; /东西减1S if(set_timenb=0) set_timenb=99; if( se

11、t_timedx=0 ) set_timedx=99; /减到1重置99 sec_nb=set_timenb; /设置的数值赋给东西南北 sec_dx=set_timedx; void key_to3() /键盘处理之紧急车通行 TR0=0; P2=0Xc9; sec_dx=00; sec_nb=00; Buzzer_Indicate=1;void int0(void) interrupt 0 using 1 /只允许东西通行 TR0=0; P2=0Xc3; Buzzer_Indicate=0; sec_dx=00; sec_nb=00;void int1(void) interrupt 2

12、using 1 /只允许南北通行 TR0=0; P2=0X99; Buzzer_Indicate=0; sec_nb=00; sec_dx=00;void logo()/开机的Logo - - - - for(n=0;n50;n+) P0=0x40; P1=0xfe; delay(1); P1=0xfd; delay(1); P1=0Xfb; delay(1); P1=0Xf7; delay(1); P1 = 0xff; void Buzzer() if(Buzzer_Indicate=1) Buzz=!Buzz; else Buzz=0;void delay(int ms) /延时子程序 uint j,k; for(j=0;jms;j+) for(k=0;k124;k+);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1