打印

求助做个简单单片机遥控摇摇棒

[复制链接]
2919|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pdc201|  楼主 | 2010-10-23 18:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 pdc201 于 2010-10-24 09:51 编辑

最近学校举行了个电子设计大赛,我们选了题目是LED摇摇棒,就是摇动的时候显示出图形和文字那种,但是因为题目是固定的,也有很多人都做过同样的作品,所以本人想在原本按键切换显示画面的基础上更改成红外遥控切换画面,但是本人是初学者,对这方面不很懂,请各位大侠帮帮忙改进改进,电路图和程序都如下,只需改进成红外遥控切换画面就行了,需要什么硬件,程序如何修改,请各位大侠此赐教赐教,小弟感激不尽~!!!!!
程序:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int //宏定义
sbit KEY=P3^0; //定义画面切换按键
uchar KY; //KY作用在后面说明
uchar pic=0,num=0; //pic 为按键次数;num 为中断次数
uchar code dianzi[64]={
0x00,0x00,0xF8,0x07,0x48,0x02,0x48,0x02,
0x48,0x02,0x48,0x02,0xFF,0x3F,0x48,0x42,
0x48,0x42,0x48,0x42,0x48,0x42,0xFC,0x47,
0x08,0x40,0x00,0x70,0x00,0x00,0x00,0x00,//电
0x80,0x00,0x80,0x00,0x82,0x00,0x82,0x00,
0x82,0x00,0x82,0x40,0x82,0x80,0xE2,0x7F,
0xA2,0x00,0x92,0x00,0x8A,0x00,0x86,0x00,
0x80,0x00,0xC0,0x00,0x80,0x00,0x00,0x00,//子   
};
uchar code zifu[224]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFC,0x03,0xFC,0x0F,0x00,0x0E,0x80,0x03,
0x00,0x0E,0xFC,0x0F,0xFC,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x08,0xFC,0x0F,0xFC,0x0F,0x44,0x08,
0xE4,0x08,0x0C,0x0C,0x1C,0x0E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x08,0xFC,0x0F,0xFC,0x0F,0x04,0x08,
0x00,0x08,0x00,0x0C,0x00,0x0E,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0x03,0xF8,0x07,0x0C,0x0C,0x04,0x08,
0x04,0x08,0x0C,0x0C,0x18,0x06,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF0,0x03,0xF8,0x07,0x0C,0x0C,0x04,0x08,
0x0C,0x0C,0xF8,0x07,0xF0,0x03,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFC,0x0F,0xFC,0x0F,0x38,0x00,0x70,0x00,
0x38,0x00,0xFC,0x0F,0xFC,0x0F,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x08,0xFC,0x0F,0xFC,0x0F,0x44,0x08,
0xE4,0x08,0x0C,0x0C,0x1C,0x0E,0x00,0x00,   
};
uchar code wuhuan[]={
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xF8,0x00,0xFC,0x01,0x06,0x03,0x03,0x06,
0x03,0x06,0x03,0x06,0x03,0x06,0x03,0x1E,
0x03,0x3F,0x86,0x61,0xFC,0xC0,0x78,0xC0,
0x60,0xC0,0x60,0xC0,0x78,0xC0,0xFC,0xC0,
0x86,0x61,0x03,0x3F,0x03,0x1E,0x03,0x0C,
0x03,0x0C,0x03,0x1E,0x03,0x3F,0x86,0x61,
0xFC,0xC0,0x78,0xC0,0x60,0xC0,0x60,0xC0,
0x78,0xC0,0xFC,0xC0,0x86,0x61,0x03,0x3F,
0x03,0x1E,0x03,0x06,0x03,0x06,0x03,0x06,
0x03,0x06,0x06,0x03,0xFC,0x01,0xF8,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,} ;
void display1(void);
void display2(void);
void display3(void);
void DelayUs(uint N)
{  uint x;
for(x=0; x<=N;x++);
}
void intersvr0(void) interrupt 0 using 1
{ KY=~KY; //每个摇动来回水银开关会在摆幅两端分别产生下降沿中断,只提取其中一次(从左向右摇才显示)
if(KY==0)
{ num++; //计算中断次数
switch(pic) //选择画面
{ case 0:{display1();}break;
case 1:{display2();}break;
case 2:{display3();}break;
default:{display1();}
}      
}        
}
void display1(void)
{  uchar i;
DelayUs(4000);
for(i=0;i<64;i++)
{ P0=~dianzi[i*2];
P2=~dianzi[i*2+1];
DelayUs(120);
}   
}
void display2(void)
{  uchar i;
DelayUs(4000);
for(i=0;i<224;i++)
{ P0=~zifu[i*2];
P2=~zifu[i*2+1];
DelayUs(120);
}     
}
void display3(void)
{  uchar i;
DelayUs(5000);
for(i=0;i<122;i++)
{ P0=~wuhuan[i*2];
P2=~wuhuan[i*2+1];
DelayUs(120);
}  
}
void main(void)
{  IT0=1;
EX0=1;
EA=1; //开中断,下降沿中断
KY=0;
while(1) //主程序中只检测按键
{ if(KEY==0) //画面切换键按下
{ DelayUs(10000); //按键去抖
if(KEY==0);
pic++;
}
if(pic>2)pic=0;
}
}

@JNCB0)%8(R`_0WZ[$BHG~C.jpg (103.66 KB )

电路图

电路图

相关帖子

沙发
shell.albert| | 2010-10-23 21:20 | 只看该作者
什么棒棒,我还以为是。。。嘿嘿。。。

使用特权

评论回复
板凳
linbei1988| | 2010-10-24 09:49 | 只看该作者
:L楼上想什么

使用特权

评论回复
地板
Galway-Zhang| | 2010-10-27 12:55 | 只看该作者
哈哈..2楼那真会想.

你的只是切换了显示的内容而已..可以把多次内容轮流显示也可以的.

使用特权

评论回复
5
ninibaba| | 2010-10-27 13:08 | 只看该作者
你得说明改成遥控的目的
其实现在的这个也不错
很有节奏感的
改成遥控的
那你什么时机控制改变?

使用特权

评论回复
6
pdc201|  楼主 | 2010-10-27 22:44 | 只看该作者
5# ninibaba
想让它改变的时候就按按遥控,炫点而已,呵呵。

使用特权

评论回复
7
huangqi412| | 2010-10-28 08:57 | 只看该作者
既然已经可以用按键实现,要改成红外而已。。。

看来LZ是COPY别人的。。。

使用特权

评论回复
8
cubasa| | 2010-10-28 09:02 | 只看该作者
硬件可以简单到只增加一个红外接收管和一个去耦电容,占用单片机一个IO脚。软件嘛,网上一大堆现成的红外解码程序。

使用特权

评论回复
9
pdc201|  楼主 | 2010-10-29 12:23 | 只看该作者
8# cubasa
能不能详细点。。。

使用特权

评论回复
10
linbei1988| | 2010-10-30 16:13 | 只看该作者
即红外遥控发射,主机上使用红外接收头,到IO口检测...单片机解码,检测到红外信号就切换画面

使用特权

评论回复
11
chenyongsheng| | 2010-10-30 16:58 | 只看该作者
做这些的太多了。。。。。

使用特权

评论回复
12
qqq44488| | 2010-10-30 21:12 | 只看该作者
这个原理图很强大,我做的时候也是参考的这个图,做完送女友了,送完就和我分手了,打击 。用个红外接收头就行,接到外部中断 ,红外程序网上很多。

红外解码程序.pdf

62.36 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

10

帖子

1

粉丝