[单片机小结之各种方案点亮流水灯.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[单片机小结之各种方案点亮流水灯

单片机小结(1) ——之流水灯的各种方法点亮 我们将8个流水灯均放置在P0口,且假设已经定义好各端口,流水灯的阳极接到P0口上,利用各种方法控制流水灯。 1.1用移位和查表控制流水灯 (1):用移位控制流水灯 void main(void) { uchar i; while(1) { P0=0xfe;//先点亮P0^0; Delay(10000);//延时10毫秒 for(i=0;i7;i++) { P0=(P01)0x01 Delay(10000);//延时100毫秒 } } } 或者改为如下也可以实现左移,先给temp=0xfe; for(i=1;i8;i++) { a=tempi; b=temp(8-i); P0=a|b; Delay(); } 在仿真中或者开发板上可以看到led灯有规律的一个一个的点亮如此循环。如果在 P0=0xfe下加延时,那么第一次点亮时可以看到小灯的亮下再灭,否则第一次看不到小灯亮。 以上即一直往左移移位,我们可以修改程序让其左右循环来点亮流水灯,程序如下while(1) { for(i=0;i7;i++) { LED=_crol_(LED,1); //P2口向左移,注意左移和右移都住需要移动7次 Delay(50000); } for(i=0;i7;i++) { LED=_cror_(LED,1);//左移,头文件必须加#includeintrins.h方可使用, Delay(50000); } } (2)用查表控制流水灯 在上个程序中我们利用左移的方法点亮小灯,即移位的思想。同时我们还可以利用查表的方法点亮led灯。程序如下: uchar code Led_Data[]= { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f } ;//此处一定要记住加分号,否者编译的时候会报错。 在将上个程序中左移的语句改为如下即可实现查表,并且将P0=0xfe;去掉 for(i=0;i8;i++) { P0=Led_Data[i]; Delay(10000);//延时10毫秒 } (3)利用硬件的方法控制流水灯 除了以上移位我们还可以利用硬件来实现点亮小灯,例如利用74HC573,74HC595 1.1:74HC573为8位锁存器, 1脚OE为使能端,低电平有效。D1-D7为输入端,Q1-Q7为输出端。11脚为锁存端,高电平有效 当OE为低电平,并且LE为高电平时,芯片才正常工作,输入等于输出。 当OE为低电平,LE也为低电平时,芯片锁存。 当 OE为高电平时,输出为高阻态。 下面我们还是利用该芯片编写下控制流水灯的程序,并且是利用移位的思想。 使用之前先说明下74HC573的工作方法: 先将OE置为低电平,并且LE也置为低电平,也就是开锁。 将需要输出的数据发送到D端。 再将LE置为低电平,即锁存数据,不在随输入 /***********************源程序代码如下*************************/ #includereg51.h #define uchar unsigned char #define uint unsigned int #define LED P3 sbit LE=P2^2; //定义锁存端 void Delay(uint ms); void main(void) { uchar i,Temp; while(1) { Temp=0xfe; //先点亮P3^0口的LED灯 for(i=0;i7;i++) { LE=1; //开锁,注意OE端默认已经接到低电平 LED=Temp;//送数据到P3口,点亮小灯 LE=0;//输出锁存 Delay(5000); //延时 Temp=(Temp=1)0x01;//左移一位

文档评论(0)

lisufan + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档