1. 求 单片机 摇摇棒电路图和代码
我刚好又一个,现在发你可以显示Love
2. 求单片机LED 摇摇棒代码生成器
近年来,单片机系统以其体积小、功能强、扩展灵活、使用方便等优点,逐渐渗透到各行业的工程实际应用中。而LED显示电路就像单片机系统的眼睛,实时地向人们传递着系统工作的各种状态信息和处理结果。因此,高效、方便的LED显示驱动电路是构成完善的单片机系统必不可少的元素。常用的LED显示驱动电路有并行译码方式、串行—并行转换方式、显示驱动接口芯片方式等。下面分别对这几种方式进行讨论,并给出显示驱动芯片MAX7219的应用实例。
并行译码显示方式
单片机89C2051输出显示的一个例子,4位BCD码数据从其P1.0~P1.3并行输出,经7段LED显示驱动电路CD4511译码后驱动LED显示,这样只需向P1.0~P1.3 写入欲显示数字的BCD码,即可显示出相应的数字。这种方式虽然简单,但占用单片机口线较多,资源利用率低,因此不常采用。
串行- 并行转换方式
图2所示为89C2051的串口驱动数码管的电路,其中串口工作在方式0,74LS164是8位串入并出移位寄存器,负责将RXD输出的串行数据转换成并行信号。显然,这种方式显示同样的位数使用单片机的口线大大减少,并且可以让LED显示BCD码以外的字符(如A、B、C、D 等),但是,当要显示的位数较多时,仍需占用较多的口线,并且在许多情况下需要串口工作在UART方式,以便进行串行通信,从而限制了这种方式的使用范围。
LED显示驱动芯片
随着单片机技术的发展,许多公司都推出了专用LED显示驱动芯片,如Microchip公司的A Y0438、Maxim公司的MAX7219等都是其中的典型代表。下面以MAX7219为例说明LED显示驱动芯片在单片机系统中的应用。
MAX7219简介
MAX7219是Maxim公司推出的8位LED串行显示驱动器,它采用3线串口传送数据,占用资源少且硬件简单,只需一个外部电阻即可方便地调节LED的亮度;可灵活地选择显示器的个数( 1~8个, 级联可成倍增加);可进行译码或不译码显示;内含硬件动态扫描控制,可设置低功耗停机方式。
MAX7219采用24脚双列直插式封装,其引脚如图3所示。SEGA~SEGG和DP分别为LED七段驱动器线和小数点线,供给显示器源电流;DIG0~DIG7为8位数字驱动线,输出位选信号,从每位LED共阴极吸入电流。
DIN是串行数据输入端。在CLK 的上升沿,一位数据被加载到内部16位移位寄存器中,CLK最高频率可达10MHz,在输入时钟的每个上升沿均有一位数据由DIN端移入到内部寄存器中;LOAD用来装载数据,在LOAD的上升沿,16位串行数据被锁存到数据或控制寄存器中,LOAD必须在第16个时钟上升沿的同时或之后、在下一个时钟上升沿之前变高, 否则数据将被丢失。每组数据为16 位二进制数据包,其格式如表1所示。
其中D15~D12位不用,D11~D8位为内部5个控制寄存器和8个LED显示数据寄存器的地址,D7~D0位为5个控制寄存器和8个LED数码管待显示的数据,因为控制寄存器与显示数据寄存器独立编址,所以可以通过程序对每个寄存器进行操作。一般情况下,程序先送控制命令,后向显示寄存器送数据,每16 位为一组,从高位地址字节最高位开始送,直到低位数据字节最后一位。MAX7219内部有14个可寻址的控制字寄存器,各寄存器的功能及地址如表2所示。
其中,地址×0H 为空操作寄存器,允许数据从输入到输出直接通过,可用于设备串接。地址×1H~×8H为显示RAM区,分别对应DIG0~DIG7引脚的8 位LED显示数据。地址×9H为译码模式寄存器,其8 位二进制数分别控制着8个LED显示器的译码模式,逻辑高电平时选择硬件译码(BCD - B码译码), 译码器选择数据寄存器中的低4位(D3~D0)进行BCD- B码译码, ×0H~×9H对应BCD码字符0~9,而×AH~×FH分别对应B码字符-、E、H、L、P及消隐,D4~D6无效,D7单独控制小数点;译码模式寄存器为逻辑低电平时选择软件译码,数据D6~D0分别对应LED显示器的A~G段,D7对应小数点DP。
地址×AH为显示亮度寄存器,通过对该寄存器的D0~D3位写入不同的数值可实现对LED显示亮度的控制,从00H到0FH共16级可调。地址×BH为扫描界限寄存器,其D0~D3位数值设定为00H~07H,表示显示器动态扫描个数为1~8。地址×CH为停机寄存器,当其D0位为0时,MAX7219处于停机状态,扫描振荡器停振,所有显示器消隐,寄存器数据保持不变;当D0为1时,正常工作。地址×FH为显示测试寄存器,当其D0位为0时,正常工作;当D0为1时处于测试状态,全部LED显示器的所有字段都以最大亮度接通显示。
3. 谁会做用51单片机制作的摇摇棒
http://www.elecfans.com/soft/32/2011/20110510197985.html
给你个地址,自己注册一个帐号就可以下载了哦,这个网站资料很多的
4. 摇摇棒 51单片机
LED 要学用高亮的,不然效果会很不好,最好是5mm的,电流最好要采用灌电流的方式进行显示,水银开关要选用大一点的,我以前做过这个,因为不高亮和灌电流的状态下,效果很不好。在裁剪和拼接上,单片机放在手握的地方。你看看网上摇摇棒的图片,就知道摇摇棒的外观了。
P0口是一定要加上拉电阻的,5.1K的上拉。
5. 求一个用于51单片机的时钟摇摇棒源程序
没弄过遥遥榜,不会
6. stc单片机摇摇棒c程序
http://user.qzone.qq.com/281362556/blog/1306123569?ptlang=2052&ADUIN=258223434&ADSESSION=1306544480&ADTAG=CLIENT.QQ.3439_FriendTip_QzoneFolder.0
在这个空间里搜索 “摇摇棒” 里面有两篇详细摇摇棒程序的日志
7. 如何用stm32单片机制作一个摇摇棒,网上只找到了用51的教程,能具体说一下怎么做吗,或者要注意的
摇摇棒的显示原理和点阵的显示差不多,就只不过x轴的扫描是要在摇的时候产生震动才进行x轴扫描,而且扫描的速度要比点阵慢一些,具体扫描速度是多少根据你的具体情况测试得到
8. 如何用单片机做摇摇棒单片机专家请进!
其实就是个LED动态显示电路,用水银开关测是否晃动和晃动的方向.
9. 请问,摇摇棒的设计思路,和pic单片机的c程序。谢谢!
以下是详细说明:
图形显示的原理:
利用人眼的视觉暂留效应,使手在摆动到不同位置的时候,让位于一条直线上的LED显示二维图像的不同的列,实现图形扫描显示。
物理机制:
当我们在摆动手臂的时候,短时间内摆动位置和左右幅度不会有太大变化,利用我们手臂的这个运动规律,只要能得到棒从一侧摆动到另一侧的时间,然后把这个时间分成N份,然后在每一份的时间里显示不同的花样就能实现图形的显示。当我们在摆动手臂的时候,并不能预先得知此次摆动需要的时间,怎样得到从一侧摆动到另一侧的时间呢?
再想想,短时间内我们手臂的摆动频率也不会有特别大的变化,我们只要能得到前一次摆动所用的时间,然后用这个时间近似得到下一次摆动所需要的时间,然后分N份就可以了。得到一次摆动所需的时间的任务由光遮断器完成,在棒上装一个可以摆动的用来遮挡光遮断器光线的细杆,粗细比光遮断器的狭缝稍宽,我用的是整流桥焊后剪下的一段管脚。每左右摆动一次这个杆就会通过一次光遮断器,使单片机产生一次中断,两次中断之间的时间就是想要得到的时间,实现这个功能用掉2051的一个定时器T0和外部中断INT0。然后用2051的另一个定时器T1,其定时时间是T0的N分之一,每次中断依次显示一列,就是照片上的效果。
再细想一下,手臂摆动的频率大于2Hz的时候才大概能由视觉暂留看出图形,再快也不过十几Hz,由T0为16位定时器的最长计时时间得到2051的时钟频率1MHz最合适,还有遮挡用的细杆的粗细也可以大概估算,使其不会对计时精度产生太大影响。
所用元件:
AT89C20518元
高亮LED共8个3.6元
电池盒0.5元
单面万用板8元可以裁成3块,做3个摇棒
陶瓷谐振器1元
光遮断器2元
电阻电容导线2元
外壳*0.7元可以裁成2块
可选元件:
电源开关1元
总成本不超过20元
*外壳我用在家乐福买的半透明文件夹卷成的
此电路电路非常简单,代码短,但是用到了2051的外部中断编程和T0、T1定时器编程,非常适合初学者练习。我制作这个玩具花费了两个晚上的时间。此电路和程序还有扩展改进的空间,如在长时间不摆动的情况下可以使单片机进入省电模式,显示不仅限于对称图片等,大家可以试试。
以下是源程序:
/*************************************************************************/
//---------------
//LED显示摇棒
//---------------
//作者:nim于http://www.21icbbs.com2005-1-7
//
//email:[email protected]
//
//本设计版权归作者所有,请勿擅自用于商业目的,转载请注明作者及出处
/*************************************************************************/
#include<reg51.h>
#defineSEG17//每帧图片分成17列来显示
#defineINTERVAL20//每幅图片在左右摇摆20次后换下一幅
typedefunsignedcharuchar;
typedefunsignedintuint;
codecharpattern[17][3]={//3幅图片的字模
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0x9f,0xff},
{0xff,0x6f,0xf9},
{0xff,0x77,0x65},
{0xfe,0xbb,0x1e},
{0x7e,0xdd,0xfe},
{0x00,0xee,0xfe},
{0x7e,0xdd,0xfe},
{0xfe,0xbb,0x1e},
{0xff,0x77,0x65},
{0xff,0x6f,0xf9},
{0xff,0x9f,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
{0xff,0xff,0xff},
};
ucharphase,th1,tl1,index,count;
main()
{
EA=0;
EX0=1;
ET1=1;
PX0=1;
IT0=1;
TMOD=0x11;
index=0;
EA=1;
while(1)
{
}
}
voidInt0_Handle(void)interrupt0using2
{
uintt0_time;
TR0=0;
TR1=0;
TF1=0;
t0_time=TH0<<8|TL0;
TL0=0;
TH0=0;
TR0=1;
t0_time=65535-t0_time/SEG;
th1=t0_time/256;
TH1=th1;
tl1=t0_time%256;
TL1=tl1;
if(count<3*INTERVAL){//3幅图片循环
count++;
}
else{
count=0;
}
index=count/INTERVAL;
if(th1!=0xff||tl1!=0xff){//如果摆动特别慢,定时器溢出就不显示
phase=0;
TR1=1;
}
else{
TR1=0;
}
}
voidTimer1(void)interrupt3using3
{
if(phase<SEG)//17段依次显示
{
P1=pattern[phase][index];
phase++;
TH1=th1;
TL1=tl1;
}
}