- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
LED打地鼠游戏设计.doc
LED打地鼠游戏设计
一.目的:深入了解和研究LED小灯的各种特性,并利用其特性制作简单娱乐游戏。
功能用途:展示LED小灯除作为普通光源外还可以作为一个较为灵敏的外部光强检测输入设备,并可作为简易打地鼠游戏机使用。
二.摘要:LED本身也是一个二极管,也有单向导电性,存在结电容,其内阻容易受光线影响,利用其光敏特性可制作感光开光控制打地鼠。
关键词:LED 结电容 充放电 光强
三.引言
我们大家对LED都很熟悉,但是一般都只知道LED作为光源使用,其实LED本身还有其他的性质,由于LED本身也是一个二极管,也有单向导电性,存在结电容,其内阻容易受光线影响,具有光敏特性。利用LED此项性质可以作为光线传感器,探测环境的光线强度等。
四.系统原理:
当发光二极管加反向电压时,管子中实际上有十分微弱的反向电流,反向电流的大小随光照的变化而变化,光照越强,反向电流越大;光照越弱,反向电流越小。等效电路如图1所示。这是一个电流源与一个电容器并联的结构。电流源实际上就是光电流。反向电压去掉后,由于光电流的存在,电容放电。外界光照强度变化会使放电时间改变。
图1
现在我们按照这样的方式操作:
a)对二极管加正向电压。正向发光模式。
b)对发光二极管加反向电压,相当于对二极管充电。
c)将高压输出端改为输入端。引脚即可测量二极管两端电压。通过测定放电时间,可以判断是否有物体遮挡二极管。以此执行相应的动作。
这样反复动作,就实现了LED的输出和输入。
硬件设计思想:
制作3X3 LED点阵,设置好合适间隔以排除干扰。为减少M16 IO口的使用,把九个小灯一端都接在一起连接一个单刀双掷开关,并用一IO口检测其高低电平来自动选择演示模式。另外九个端分别接九个独立IO口单独控制和检测。留出POARTB五个端口作为控制LED显示使用。
六.硬件原理图:
硬件单元使用:
随便置单刀双掷开关,系统会自动检测何种演示模式。
若进入跑马灯演示模式,根据LCD显示屏提示,反置单刀双掷开关,并按RESET键进入游戏模式。
正放方式下第一行小灯从左到右为1、2、3号灯,进入游戏界面,左右菜单分别对应1、3号灯,三种不同模式分别对应1、2、3号灯,选择时遮住对应小灯即可。
4.开始游戏时,LCD显示屏3X3 表格对应各位置小灯。
七.软件设计思想
检测部分利用单片机PORT口的输入功能读取对应LED小灯的电位,利用LED小灯在反向充电完成后,在不同光照下放电到单片机低电位时间的不同,通过软件延时一定的时间,判断小灯是否被遮住来选择运行何种程序。
游戏部分通过建立一简单随机数据库来随机显示地鼠位置,通过对应关系映射到单片机的PORT口,来检测是否是正确的LED灯(虚拟地鼠)被打中。
八.软件原理图
游戏部分流程:
软件程序功能:
1.跑马灯程序
LCD_clear();
LCD_write_chinese_string(12,0,12,5,0,0,pao);
LCD_write_chinese_string(0,2,12,7,0,0,cz1);
LCD_write_chinese_string(0,4,12,7,0,0,cz2);
DDRA=0XFF;
DDRC=0X01;
PORTC=0X01;
PORTA=0XFF;
for(j=1000;j0;j--)
{
PORTA=0XFF;
delay_nms(10);
PORTC=0X00;
delay_nms(10);
for(i=7;i=0;i--)
{SET_BIT(PORTC,0);
delay_nms(10);
CLR_BIT(PORTA,i);
delay_nms(10);
SET_BIT(PORTA,i);}
for(i=0;i8;i++)
{SET_BIT(PORTC,0);
delay_nms(10);
CLR_BIT(PORTA,i);
delay_nms(10);
SET_BIT(PORTA,i);}
PORTA=0XFF;
delay_nms(10);
PORTC=0X00;
delay_nms(10);
}
2.自动检测外部光强和选择语言部分
LCD_clear();
do{
SET_OUT(DDRA,0);
SET_BIT(PORTA,0);
SET_IN(DDRA,0);
CLR_BIT(PORTA,0);
delay_nus(100);
if(~GET_BIT(PINA,0))break; /外光强使LED放电到低电位时间
timedl++; /赋值给timedl
}while(1);
LCD_write_chinese_string(12,2,12,4,0,0,yuyan);
L
原创力文档


文档评论(0)