3

关于投票
51单片机红外遥控解码程序(史上最简)

        用单片机进行红外遥控解码,对大多数初学者来说是很麻烦的一个问题。从书中和网上找到的一些这方面的程序,运行往往是无法通过。即使能用的程序也是显得复杂而长。
        下面介绍本人自编的红外遥控解码的C51程序,自认为是可能是史上最简的。此程序是针对uPD6121系列的遥控器的取码程序,解码值在Im[2]中,当IrOK=1时解码有效。

 

/*   51单片机红外遥控解码程序   */
/*      适用uPD6121系列            */
/*     周正华 2008.4.11编         */
/*   
http://hi.baidu.com/52_diy   */

#include <reg52.h>

#define DIGPORT P2
#define WORDPORT P0
unsigned char code LED_num[]={0x3f,0x18,0x76,0x7c,0x59,0x6d,0x6f,0x38,0x7f,0x7d};

 

#define Imax 14000    //此处为晶振为11.0592时的取值,
#define Imin 8000    //如用其它频率的晶振时,
#define Inum 1450    //要改变相应的取值。
unsigned char Im[]={0x00,0x00,0x00,0x00};

unsigned long m,Tc;
unsigned char i,IrOK;


void DelayMy(unsigned int t){
while(--t);
}


void Display_LED(unsigned long num)
{
unsigned int ii;
unsigned int jj="0";
unsigned long aa,bb;
unsigned int xx[8]={0,0,0,0,0,0,0,0};
do {
    bb="num/10";
    aa="num-bb"*10;
    xx[jj]=aa;
    num="bb";jj++;
    }
while(num>0);
DIGPORT=0x80;
for(ii=0;ii<8;ii++) {
    WORDPORT="LED"_num[xx[ii]];
    DelayMy(60);
    DIGPORT="DIGPORT">>1;
};
WORDPORT=0;
}

//外部中断解码程序
void intersvr1(void) interrupt 2 using 1
{
Tc=TH0*256+TL0;                                               //提取中断时间间隔时长
TH0=0; TL0=0;              //定时中断重新置零
if((Tc>Imin)&&(Tcif(Tc>Inum) Im[m/8]=Im[m/8]>>1|0x80; else Im[m/8]=Im[m/8]>>1; //取码
if(m==32) if((Im[2]|0x01)==~Im[3]) IrOK="1"; else IrOK="0";    //取码完成后判断读码是否正确
m++;                //准备读下一码
}


/*演示主程序*/
void main(void)
{
m=0;
EA=1;

IT1=1;EX1=1;

TMOD=0x11;  
TH0=0;TL0=0;
TR0=1;ET0=1;

for(;;){
DelayMy(100);
if(IrOK==1) for(i=0;i<400;i++) Display_LED(Im[2]);
IrOK=0;
}
}

说明: 程序中深蓝色的部分为解码的关键代码, 另因E空间在显示程序时会出现一些问题,  需完整程序的朋友请点击下载。

rar

 

这是我的红外线遥控实验系统
点击开大图

随便找的这几个遥控器都能通过
点击开大图

 

系统分类: 单片机
用户分类: 原创
标签: c51,遥控,解码,单片机,编程
来源: 原创
发表评论 阅读全文(1227) | 回复(11)

1

关于投票
自作摇摇棒传感器

         摇摇棒也是POV显示中的一类,在网上看到有各种各样的成品,就是没有亲自拆来看一下内部结构,不知道是用什么来做运动传感器的,只知道网上有DIY的用水银开关。
        由于没有合适的传感器,摇摇棒一直没有动手做。今天突然来了灵感,随手就做了一个,还带灵敏度调整的,感觉不错,在这里介绍给POV制作爱好者。

点击看大图

方法很简单, 将上面的三个东西组装起来就OK了。

点击看大图

系统分类: 单片机
用户分类: 原创
标签: 无标签
来源: 原创
发表评论 阅读全文(531) | 回复(1)

10

关于投票
用硬盘音圈电机制作POV摇摆LED时钟

 

用硬盘音圈电机DIY摇摆显示钟

 

周正华

 

看到市场上正在流行的时尚商品——摇摆LED时钟,感觉非常新颖独特,正在玩单片机的我,激起了自己也想DIY一个的冲动。不就是一个流水灯吗?有什么难的?! 于是,一个单片机项目就这样开始了。

然而动手以后才知道问题并非想象那样简单,有许许多问题在制作中一一出现,经过十多天的制作、修改与调试,作品才告完成,基本达到预先要求。

. 设计思路

本制作是根据视觉暂留原理, 让一排8LED运动, 在空中呈现数字来表示时钟。由于其实质就是一个摆动的流水灯,特别适合初入门的单片机爱好者动手制作。

整个屏可显示七个字符,平时作时钟只用其中的五个字符。

显示分 “正常运行”、“调分”和“调时” 三种状态。正常运行时中间的“:”符每一秒闪现一次,调分和调时时,则为调整的项闪现。

设置三个调整按键,一个为“状态键”,一个为“加法键”,一个为“减法键”。

完成图(见图1、图2

   
                                                    
1  

                              

                                                   2

效果图(见图3)


                 
3

. 硬件结构

主板的结构布局见图4。

点击看大图

                                                                4

机械部分:

驱动摇棒摆动的机构采用从硬盘上拆下的音圈电机(见图5)组件构成,为制作方便,这个组件是直接安装在电路板上的。

点击看大图
                                                                           
5

为使摇棒保持平衡,需在线圈端加配重,由于配重是在磁铁的上端,最好选铜质物件。为了让摇棒摆动稳定,在摇棒摆动的摆幅两端加了限位器。并在两个限位器上分别套上一个胶圈,以减轻噪音和振动。

电子部分:

1LED的焊接,(见图6)将LED两脚跨接在电路板两端的方式进行焊接。使LED紧密排列在一起。

点击看大图
                                                                                  
6

2.摇棒上的LED与主板上的信号用排线连接,音圈电机供电占2位,LED信号传输占9位,所以至少要11位的排线。(见图7

点击看大图
                                                                                    
7

3.设置三个按键用于调整时间。(见图8

点击看大图

                          &n