基于单片机的旋转led(初级版)
时间:11-29
来源:互联网
点击:
旋转led,记得第一次接触的时候是在半年前的一个视频,当时什么都不知道,为何这样显示呢?就是想不通,后来买了一个套件,做出来了,也是想不通,其实那个套件不用编程序,有一个可以直接生成.HEX文件,所以对于 这种懒于编程序的人来说,是一个不错的选择,可是后来,在度娘不断的开导与帮助下,我终于能自己编一个小程序了,度娘给予了我极大的帮助,她教会了我许多,在此感谢一下我伟大的度娘,先说一下本次历时很久,颇具传奇的旋转led吧。
硬件部分:
(1)底座供电,采用通用的无线供电技术,别小瞧这个东西,虽然电路很简单,可是不是很好调啊,这个破东西浪费了我数日不吃不喝的精力,平时看网上他们调的都很好,供电也很稳定,为啥我这个就问题重重呢?真是特娘的无语,电压值先从0.8v升到1.3v,这个升压是我调了一下三极管的基极电压值,然后又从1.3v升至1.8,这是我换了一个三极管,可是这个电压还不能是单片机工作起来,怎么办,此时我的脑袋里闪现了华仔的那个半波与全波问题了,我换了一个整流桥,结果升至3.3v了,虽然这个电路产生的电流呈现三角波,按照常理,我这个用个半波就够了,但是我这个真的不可以,虽然此时的电压是3.3v但是及其的不稳定,也就是说单片机总是重启,不能连续的工作,就在此时,我把供电的电压改变成了12v,原来是5v供电,这个结果很明显,单片机工作了,记得那天的这个时候已经熄灯了,可是晚上我左思右想,想了许久,终于想出来了,把电容改变一下(记得第二天我和别人吹,我的脑袋就是一个多功能的示波器),结果成功了,现在5v供电电压值一般在3.8v以上,这时我终于可以组装测试了。
(2)最小系统,这个很简单,但是由于我对于我的每一件作品要求比较高,所以我这个东西焊的时间也比较长,还有一个就是由于无线供电的问题,上面的最小系统的某些东西选型一定要注意,尤其是发光二级管的选择,当然如果无线供电调的很好就不用考虑这些了,还有一点就是千万不能用那种三色七彩闪烁的那种,只要用一个就会出问题,但是我现在还没有找到原因,可能是我那个东西得位置放置的不合理吧,等以后慢慢研究...
软件部分:
如果只想显示几个字那很简单,要是想弄其他的,有点难度,所以对于初级版的来说,我这个就简单的让它显示点自吧,
平面字程序:
void main(void)
{
uint i=0,j=0 ;
P1=0XFF;
P2=0XFF;
P3=0XFF;
//主程序中只检测对管
while(1)
{
if(KEY==0) //红外接收管 判断起始位
{
j++;
if(j>320) //根据显示的字数定义改数值320/16=20个字 显示完20个字后 重新开始
{
j=0 ;
}
for(i=j;i<96+j;i++) //每转一圈 前进一列 这里定义一圈中同时显示96/16=6个字,
{
P1=love[i*2]; //字幕数据低位送显示
P2=love[i*2+1]; //字幕数据高位送显示
DelayUs(210);//延时让LED亮起来 每列延时的时间
P1=0XFF;
P2=0XFF;
}
}
}
}
这里还有个小插曲,就是字刚开始的大小问题,其实解决这个问题很简单,有些人用软件解决,但是我比较喜欢用硬件,因为省事,在电机的一段串几个二极管就好了。
硬件部分:
(1)底座供电,采用通用的无线供电技术,别小瞧这个东西,虽然电路很简单,可是不是很好调啊,这个破东西浪费了我数日不吃不喝的精力,平时看网上他们调的都很好,供电也很稳定,为啥我这个就问题重重呢?真是特娘的无语,电压值先从0.8v升到1.3v,这个升压是我调了一下三极管的基极电压值,然后又从1.3v升至1.8,这是我换了一个三极管,可是这个电压还不能是单片机工作起来,怎么办,此时我的脑袋里闪现了华仔的那个半波与全波问题了,我换了一个整流桥,结果升至3.3v了,虽然这个电路产生的电流呈现三角波,按照常理,我这个用个半波就够了,但是我这个真的不可以,虽然此时的电压是3.3v但是及其的不稳定,也就是说单片机总是重启,不能连续的工作,就在此时,我把供电的电压改变成了12v,原来是5v供电,这个结果很明显,单片机工作了,记得那天的这个时候已经熄灯了,可是晚上我左思右想,想了许久,终于想出来了,把电容改变一下(记得第二天我和别人吹,我的脑袋就是一个多功能的示波器),结果成功了,现在5v供电电压值一般在3.8v以上,这时我终于可以组装测试了。
(2)最小系统,这个很简单,但是由于我对于我的每一件作品要求比较高,所以我这个东西焊的时间也比较长,还有一个就是由于无线供电的问题,上面的最小系统的某些东西选型一定要注意,尤其是发光二级管的选择,当然如果无线供电调的很好就不用考虑这些了,还有一点就是千万不能用那种三色七彩闪烁的那种,只要用一个就会出问题,但是我现在还没有找到原因,可能是我那个东西得位置放置的不合理吧,等以后慢慢研究...
软件部分:
如果只想显示几个字那很简单,要是想弄其他的,有点难度,所以对于初级版的来说,我这个就简单的让它显示点自吧,
平面字程序:
void main(void)
{
uint i=0,j=0 ;
P1=0XFF;
P2=0XFF;
P3=0XFF;
//主程序中只检测对管
while(1)
{
if(KEY==0) //红外接收管 判断起始位
{
j++;
if(j>320) //根据显示的字数定义改数值320/16=20个字 显示完20个字后 重新开始
{
j=0 ;
}
for(i=j;i<96+j;i++) //每转一圈 前进一列 这里定义一圈中同时显示96/16=6个字,
{
P1=love[i*2]; //字幕数据低位送显示
P2=love[i*2+1]; //字幕数据高位送显示
DelayUs(210);//延时让LED亮起来 每列延时的时间
P1=0XFF;
P2=0XFF;
}
}
}
}
这里还有个小插曲,就是字刚开始的大小问题,其实解决这个问题很简单,有些人用软件解决,但是我比较喜欢用硬件,因为省事,在电机的一段串几个二极管就好了。
单片机旋转led初级 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)