单片机控制LED流水灯从中间向两边.doc_第1页
单片机控制LED流水灯从中间向两边.doc_第2页
单片机控制LED流水灯从中间向两边.doc_第3页
单片机控制LED流水灯从中间向两边.doc_第4页
单片机控制LED流水灯从中间向两边.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机控制LED流水灯从中间向两边,从两边向中间 这个就是把 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的 应该是这样的 先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动;#include#include#define uint unsigned int#define uchar unsigned char void delay();void main() uchar temp,temp1,temp2,a,b; P3=0xff; while(1) for(b=3;b0;b-) temp=0xaa; P1=temp; delay(); temp=0x55; P1=temp; delay(); for(a=3;a0;a-) temp=0xfe; for(b=7;b0;b-) P1=temp; temp=_crol_(temp,1); delay(); P1=temp; delay(); temp1=0xfe; temp2=0x7f; for(a=8;a0;a-) temp=temp1&temp2; P1=temp; delay(); temp1=_crol_(temp1,1); temp2=_cror_(temp2,1); void delay() uint a,b; for(a=100;a0;a-) for(b=600;b0;b-); 程序实现的第2种方法:下面是单片机12群里的朋友木信大侠提出的,实现单片机led流水灯从中间向两边,从两边向中间的效果,下面的程序就是实现思路,这个是直接调用,应该明白吧,数组那其实也可以改一下,如采用一维数组,在多次调用;也可以采用二维数组。主要看个人喜好.-#include unsigned char code TABLE= 0xFF,0xE7,0xC3,0x81,0x00, /从中间向两侧点亮0xFF,0xE7,0xC3,0x81,0x00, 0xFF,0xE7,0xC3,0x81,0x00, 0xFF,0x7E,0x3C,0x18,0x00, /从两侧向中间点亮 0xFF,0x7E,0x3C,0x18,0x00, 0xFF,0x7E,0x3C,0x18,0x00; unsigned char i; DELAY() unsigned int s; for(s=0;s0;x-) for(y=110;y0;y-);/*动态数显的设计思路,首先是我们要先知道怎样才能使哪个位亮,显示的段是什么数值,接下来就是中断时间的问题了,设计步骤如下,如果要让八个数码管静态显示1到8,我们可以修改中断时间,如把50000改成100或更低*/#include #include#define uint unsigned int#define uchar unsigned charsbit duan=P26; sbit wei=P27;uchar a,numw,numd;uchar code tabled=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /*第二步骤,创建段显数值的对码表09数值.如果要显示18数值,最好多加前后两位数0跟9, 因为后面+移位时就能按我们常规顺序亮下去,至于如何显示对应数值请先看数码显示电路图*/ uchar code tablew=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f; /第二步骤,创建位显,就是显示的位置,这个码表相对简单,用二进制表示1111111001111111,是0的为八位数显管的位置void main() a=0; /定义个时间函数 numw=0; /附位显初值为0位 numd=0; /附段显初值为0位 TMOD=0X01; /第四步骤,附中断暂存器初值 TH0=(65535-50000)/256; /附中断请求时间初值,高8位 TL0=(65536-50000)%256; /附中断请求时间初值,低8位 EA=1; /开启总中断 ET0=1; /开启定时中断 TR0=1; /启动定时中断 while(1) if(a=10) /第三步骤,执行速度,如果等20差不多是1秒,则往下执行,相当于单位数值亮的时间 a=0; /重新附值初值0 numd+; /段显值+ if(numd=9) /如果段值在对码表第9位则转下执行 numd=1; /*重新附值段显值对应对码表第1位,因为+所以0位并不在数码管中显示. 如果要显示,也会因为+而在第二轮中显示出*/ duan=1; /开启段显端 P0=tablednumd;/附段显P0值对应段显值对码表 duan=0; /锁存 wei=1; /开启位显端 P0=tablewnumw;/附位显P0值对应位显值对码表 wei=0; /锁存 numw+; /相当于位显移位 if(numw=8) /如果位显值到对应位显对码表第八位则转下执行 numw=0; /重新附值位显值对应对码表第0位起/*下面是简单的单个数码管显示例证 第一骤, 修改后在第三步骤内#includereg52.h#includeintrins.hsbit duan=P26; /段显端口sbit wei=P27; /位显端口void main() /P0=0xff; 数码管不显示任何信号,默认情况下通电本身就不显示,可以不写 duan=1; /开启段显端口 P0=0x06; /附值段显数值为1,可以查阅数码管电路图相对应显示的对码表 duan=0; /锁存,保持上一步段显状态,硬件说明请查阅74HC573功能 wei=1; /开启位显端口 P0=0xfe; /附值位显位置,01111111,左边第一位,为0的显示 wei=0; /锁存,保持上一步位显状态,硬件说明请查阅74HC573功能*/ void timer0()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论