摇摇棒设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于单片机POV的魔幻棒的设计 1 引言 此次课程设计以STC公司的8位单片机STC89C52作为控制核心,采用9V高容量电池供电,并以十六只二极管竖向排列作为显示模块。基本原理是利用了人眼睛的视觉暂留效应。LED发光管作为画面每一列的显示,起到扫描的作用。当左右摇动魔幻棒时,水银开关会随着摇摆而有规律的开通或关断,从而随之触发中断服务程序,中断服务程序会调用显示程序显示相应内容。当摇动速度与程序执行速度匹配合适时人看到的就是一幅完整的画面了。 2 界面设计 2.1电路的系统框图 图1为摇摇棒的电路框图,主要电路其实就是在单片机最小系统上增添了16只LED和一个作为传感器的水银开关。 图1 摇摇棒电路框图 另外,添加的电源电路是为了让电池电压转换成5V直流电,有了ISP下载插座可随时更新单片机内的程序,方便调试。 2.2电路原理图 (1)电源转换原理图 如图2所示,将9V直流电源通过7805芯片,转换成近5V的直流电源,7805芯片在电路中起降压的作用。 图2 电源转换原理图 (2)硬件连接图 如图3所示,摇摇棒以STC89C52单片机为控制核心,通过P0,P2口,连接16个高亮发光二极管,图3电路图主要由复位电路,晶振电路组成。 图3 摇摇棒硬件连接图 3 程序设计 3.1程序流程图 图4 程序流程图 3.2 程序 在单片机开发平台Keil软件上编写程序如下: ** 嵌入文件 ** #include reg52.h //51单片机硬件资源参数说明 //** 变量说明 ** unsigned char led1; // P0端口LED显示缓冲变量 unsigned char led2; // P2端口LED显示缓冲变量 unsigned char code LS[]= //LED显示扫描码列表 { 0x00, 0x00, //●●●●●●●● ●●●●●●●● 0xF8, 0x7F, //●●●○○○○○ ○○○○○○○● 0x08, 0x10, //●●●○●●●● ●●●●○●●● 0x08, 0x10, //●●●○●●●● ●●●●○●●● 0x08, 0x10, //●●●○●●●● ●●●●○●●● 0x08, 0x10, //●●●○●●●● ●●●●○●●● 0xF8, 0x7F, //●●●○○○○○ ○○○○○○○● 0x00, 0x00, //●●●●●●●● ●●●●●●●● 0x00, 0x20, //●●●●●●●● ●●●●●○●● 0xF0, 0x61, //●●●●○○○○ ○●●●●○○● 0x10, 0x16, //●●●●○●●● ●○○●○●●● 0x14, 0x08, //●●○●○●●● ●●●○●●●● 0x1F, 0x14, //○○○○○●●● ●●○●○●●● 0xF0, 0x23, //●●●●○○○○ ○○●●●○●● 0x10, 0x40, //●●●●○●●● ●●●●●●○● 0x10, 0x80, //●●●●○●●● ●●●●●●●○ }; //** 延时函数 ** void Delay(unsigned int msec) { unsigned int x,y; for(x=0; x=msec;x++) { for(y=0;y=50;y++); } } main(void) { unsigned char i; for(;;) { for(i=0;i16;i++) //共16组扫描码 { P0=~LS[2*i]; //P0口取扫描码 P2=~LS[2*i+1]; //P2口取扫描码 Delay(1); //延时 } } } 4 调试 首先仔细检查电路,看是

文档评论(0)

白领文档(原创) + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档