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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机综合实验报告之模拟交通灯设计.docx

1、单片机综合实验报告之模拟交通灯设计(此文档为word格式,下载后您可任意编辑修改!)单片机综合实验报告题 目: 模拟真实交通灯 班 级: 姓 名: 学 号: 指导老师: 2014 年 6 月 13 日一、实验内容:用8255芯片的PA、PB口低四位做输出口,控制十二个发光二极管燃灭,模拟十字路口交通灯管理,并利用数码显示器进行倒计时显示(采用单片机内部定时器定时)。通过外部中断能使交通灯暂停运行,并点亮4个红灯。通过16*16点阵中的图形模拟控制行人过马路的人形“走”、“停”指示灯,可参考下图所示:利用实验系统1616点阵实验单元,以两种方式控制点阵显示。要求编制程序实现汉字点阵循环显示。I/

2、O口地址分配 I/O口分别提供字形代码(列码)、扫描信号(行码),凡字形代码位为“1”、行扫描信号为“1”点亮该点,否则熄灭;通过逐行扫描循环点亮字形或曲线。二、实验电路及功能说明8255与发光二极管连线图数码LED显示器电路1616LED点阵显示电路实验原理图三、实验程序流程图:主程序:四、实验结果分析通过程序仿真,可以检测设计的电路能基本满足设计要求。交通灯亮灭过程同“8255控制交通灯实验”,倒计时显示只需两位数(099),用定时器定时进行倒计时,每秒钟减1。在16*16点阵中显示的人形“走”、“停”标志可自定义。 五、心得体会我们通过作这个单片机实验,我们总结了一下点:1、 加深了对5

3、1单片机的理解,不仅仅是以前那样只能点亮发光二极管。2、 感受到了完成一件程序的乐趣,并且知道了实践精神。3、 理解了51单片机的强大和我们知识的肤浅。4、 学到了许多原来C语言中没有的东西,如:控制按键的程序 While(P0_5=1) Time+; While(P0_5=1); 这样可以不加防按键抖动的延时程序,更精确时间。 5、进一步充分利用中断时刻都在运行,让时间在中断中显示,就不会出现进入死循环后而无法显示时间的情况,而且还可以快速的反映除时间的变化。六、程序清单#include #include #define uchar unsigned char#define uint uns

4、igned int#define ROW1 XBYTE0XFFE3#define ROW2 XBYTE0XFFE0#define COL1 XBYTE0XFFE2#define COL2 XBYTE0XFFE1#define PA XBYTE0xffd8#define PB XBYTE0xffd9#define CTL XBYTE0xffdb#define SEG XBYTE0xffdc#define BIT XBYTE0xffdd#define allredend 10#define ewredend 2*ewstarter+allredend#define snyellowend ewre

5、dend+10#define snredend snyellowend+2*snstarter#define ewyellowend snredend+10sbit KEY1=P10;sbit KEY2=P11;sbit KEY3=P12;sbit P32=P32;uchar tongBu;uchar code ewTable=0xb6,0x75,0xf3,0xf7,0xae,0x9e,0xbe;uchar code nsTable=0xd,0xd,0xc,0xd,0xb,0x7,0xf;/uchar tempa,tempb;int time=1,cnt,change,intflag,intt

6、ime=1,ewstarter=10,snstarter=15;int tempseg;uchar key1=0;uchar buffer=;uchar table=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff;/*- 行走 -*/*- 宽度x高度=16x16 -*/uchar code led1=0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x03,0xC0,0x06,0x60,0x0A,0x50,0x0A,0x50,0x0B,0xD0,0x12,0x48,0x02,0x40,0x02,0x6

7、0,0x04,0x20,0x04,0x20,0x08,0x20,0x18,0x60;/*- 停止 -*/*- 宽度x高度=16x16 -*/uchar code led2=0x01,0x80,0x02,0x40,0x02,0x40,0x01,0x80,0x07,0xE0,0x7E,0x7E,0x02,0x40,0x02,0x40,0x03,0xC0,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x01,0x80,0x03,0xC0;/*- 文字: 高 -*/*- Fixedsys12; 此字体下对应的点阵为:宽x高=16x16 -ucha

8、r code led2=0x02,0x00,0x01,0x00,0xFF,0xFE,0x00,0x00,0x0F,0xE0,0x08,0x20,0x0F,0xE0,0x00,0x00,0x7F,0xFC,0x40,0x04,0x4F,0xE4,0x48,0x24,0x48,0x24,0x4F,0xE4,0x40,0x14,0x40,0x08;*/void delayshort() char n; for(n=50;n0;n-);uchar changeleft(uchar led) uchar temp; temp=0; temp|=(led7)&0x80; temp|=(led5)&0x40

9、; temp|=(led3)&0x20; temp|=(led1)&0x08; temp|=(led3)&0x04; temp|=(led5)&0x02; temp|=(led7)&0x01; return(temp);void led16_16display(uchar *table,uchar length) uchar i=length/2,scan1=0x1,scan2=0x1; for(i=0;i16;i+) if(i8) ROW1=0; ROW2=0; COL1=scan1; COL2=0; ROW1=changeleft(table2*i); ROW2=table2*i+1; C

10、OL1=scan1; COL2=0; delayshort(); scan1=1; else ROW1=0; ROW2=0; COL1=0; COL2=scan2; ROW1=changeleft(table2*i); ROW2=table2*i+1; COL1=0; COL2=scan2; delayshort(); scan2=1; if(temp=0) temp=0x20;void int_0()interrupt 0 delayshort(); if(P32=0) PA=0xB6; PB=0xd; PT0=1; PT1=1; intflag=1; while(inttime=20) l

11、ed16_16display(led2,32); inttime=1; intflag=0; PT0=0; PT1=0; PA=ewTabletongBu; PB=nsTabletongBu; void timer0()interrupt 1 TH0=()/256; TL0=()%256; cnt+; if(cnt=5) cnt=0; if(intflag=1) inttime+; tempseg=10-inttime/2; else time+; if(timeallredend)&(timeewredend)&(timesnyellowend)&(timesnredend)&(time=e

12、wyellowend) if(change=0) tongBu=5; PA=ewTabletongBu; PB=nsTabletongBu; change=1; else tongBu=6; PA=ewTabletongBu; PB=nsTabletongBu; change=0; tempseg=ewstarter+10+allredend/2+snstarter-(time+1)/2; else tongBu=1; time=allredend+1; PA=ewTabletongBu; PB=nsTabletongBu; tempseg=ewstarter+allredend/2-(tim

13、e+1)/2; void key() uchar keynum; keynum=(P1|0XF8); switch(keynum) case 0x1: while(KEY1=0)led16_16display(led2,32); key1+; TR0=0; if(key1=3) key1=0; TR0=1; break; case 0x2: while(KEY2=0)led16_16display(led2,32); if(key1=1) ewstarter+; if(ewstarter=100) ewstarter=0; if(key1=2) snstarter+; if(snstarter

14、=100) snstarter=0; break; case 0x4: while(KEY3=0)led16_16display(led2,32); if(key1=1) ewstarter-; if(ewstarter=-1) ewstarter=99; if(key1=2) snstarter-; if(snstarter=-1) snstarter=99; break; default:break; void main() IE=0x8b; IT0=1; TMOD=0x11; TH0=()/256; TL0=()%256; TH1=()/256; TL1=()%256; CTL=0x80; tongBu=0; TR1=1; PA=ewTabletongBu; PB=nsTabletongBu; tempseg=allredend/2-(time+1)/2; TR0=1; while(1) key(); if(intflag=0) if(key1=0) if(timeallredend×nyellowend&time=ewyellowend) led16_16display(led2,32); else led16_16display(led2,32);

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

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