转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/37967455

一.硬件

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcnVveXVubGl1ZmVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" height="514" width="917" />

这里的LED选择直插的雾面LED,亮度可以还不失美观。

注意每行要加上限流电阻。74HC138(三八译码器)作为列选,每行都连着74HC595(移位寄存器)实现串行输入,并行输出。

       

二.软件

led.h

#ifndef __Led_H
#define __Led_H #include "STC12C5A.h" #define uint unsigned int
#define uchar unsigned char
#define light 127 sbit _SER = P0^0; // 74hc595 串行数据输入端
sbit _RCLK = P0^1; // 74hc595 数据输出时钟线
sbit _SRCLK = P0^2; // 74hc595 数据输入时钟线
sbit ACT_Key = P0^3; // 模式开关
sbit key1 = P0^6; // pwm调节+
sbit Key_2 = P3^3; // 时钟调节按键 extern void delayled(int );
extern void LineInput(uint dat);
//extern void DisplayTime(void);
//extern void TimeSetting(void);
extern void ruoyun(void); #endif

led.c

#include "Led.h"

uint   code table1[80]={
0x0C,0x01,0x10,0x11,0xFE,0x11,0x44,0x3F,
0x44,0x11,0x44,0x3D,0x7E,0x11,0x00,0x11,/*"若",0*/ 0x00,0x00,0x0C,0x01,0x34,0x11,0xC4,0x11,
0x04,0x11,0x14,0x11,0x0E,0x01,0x00,0x01,/*"云",0*/ 0x04,0x10,0xFC,0x1F,0x00,0x1F,0xFC,0x00,
0x00,0x1F,0xFC,0x1F,0x04,0x10,0x00,0x00,/*"M",0*/ 0xE0,0x03,0x18,0x0C,0x04,0x10,0x04,0x10,
0x04,0x10,0x08,0x10,0x10,0x1C,0x00,0x00,/*"C",0*/ 0x00,0x10,0xF8,0x1F,0x04,0x10,0x04,0x00,
0x04,0x00,0x04,0x10,0xF8,0x1F,0x00,0x10,/*"U",0*/ }; uchar code ColScan[16] = {0x20,0x24,0x22,0x26,0x21,0x25,0x23,0x27,
0x10,0x14,0x12,0x16,0x11,0x15,0x13,0x17}; // 74hc138 进行列扫描 void delayled(int z) // 延时函数
{
int x,y;
for(x=0;x<z;x++)
for(y=0;y<110;y++);
} void WriteByte(char dat) //写一个字节的数据
{
char i;
for(i=0;i<8;i++) //循环8次把编码传给锁存器
{
dat=dat>>1; //右移一位。取出该字节的最低位
_SER=CY; //将该字节的最低位传给R
_SRCLK=0; //将数据取出,上升沿
_SRCLK=1;
}
}
void LineInput(uint dat) // 单列数据显示
{
uchar n;
_RCLK = 0;
for(n=0;n<16;n++)
{
_SRCLK = 0;
_SER = (dat>>n)&0x01; //将数据的值串入输入SER中,然后并行输出
_SRCLK = 1;
}
_RCLK = 1;
} void ruoyun()
{
int num,k,j;//,move,speed; for(k=0;k<25;k++) //控制动画移动
{ for(j=0;j<150;j++) //延时
{
for(num=0;num<16;num++) //控制每一帧
{
WriteByte(table1[2*(num+k)]); //送出一个字节
WriteByte(table1[2*(num+k)+1]);
P2=ColScan[num]; //行选
_RCLK=1; //输出锁存器数据下降沿
_RCLK=0;
delayled(2);
}
}
}

我想最核心的东西,应该就是怎么通过三个循环实现左移的吧(尽管这样做用来三个循环。如今看来并非非常好),以下具体讲讲这段代码。

代码思路:我们都知道要想实现点阵显示仅仅要向595串行输入16个字模数据就OK了。那么怎样叫它向左面移动呢?事实上非常easy。以下我绘图说明:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcnVveXVubGl1ZmVuZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

最里面的那层for循环实现了点阵的显示,就是从左到右刷一遍。

中间那层for循环是一箭双雕,有两个作用。第一个就是为了点阵可以稳定显示,就是高速的多刷几遍(要不刷一遍谁看得清)。

第二个作用就是为了向左移动提供延时(要不瞬间不就左移到头了嘛)。

事实上规范点的写法应该是这个for提供稳定点阵显示。然后外面在加一个延时控制向左移动的速率。后来我看写的太复杂就给省略了。

最外面的那层循环控制的是左移的列数(就是向左移动多少):

		for(k=0;k<25;k++)				  //控制动画移动

K的值代表想做移动的列数。为什么是25。由于一共是5个字每一个字占8行              

初始状态:                     *若 云*MCU

终止状态:              若云*MCU*

也就是像左面移动三个字,3*8=24,所以K<25。

最后另一个LineInput()函数,干嘛用的呢?留个悬念,兴许博客解说。

LED音乐频谱之点阵的更多相关文章

  1. LED音乐频谱之概述

    点击打开链接       转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/37929733 这个LED音乐频谱是我在学51单片机的 ...

  2. LED音乐频谱之输出数据处理

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38023539 一.PWM调节 1.初始化 void DACInit() { C ...

  3. LED音乐频谱之输入数据处理

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/38023431 通过前面的介绍我们知道.声音信号要通过AD转换,变成我们可以处理 ...

  4. Three.js + HTML5 Audio API 打造3D音乐频谱,Let’s ROCK!

    继续玩味之前写的音乐频谱作品,将原来在Canvas标签上的 作图利用Three.js让它通过WebGL呈现,这样就打造出了一个全立体感的频谱效果了. 项目详情及源码 项目GitHub地址:https: ...

  5. STM32通过FSMC驱动3.2寸液晶屏实现的音乐频谱

    视频演示: http://player.youku.com/player.php/sid/XNDcyMDgwMTE2/v.swf 源码下载: lattice_ music _tft.rar(1.42 ...

  6. 单片机与控制实验(2)——LED点阵显示屏

    一.实验目的和要求 了解LED点阵显示的基本原理和实现方法.掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法. 二.实验设备 单片机测控实验系统 LED点阵显示器实验模块 Keil开发环境 STC ...

  7. android获取和展示音乐的频谱

    做了个音乐播放器 就一直想做个加一个音乐频谱的展示界面 觉的这是一个好玩的东西,可以将耳边动听的声音形象化,仿佛眼前可以看到声音一样. 但是我在文档的开发者指南里没有讲任何有关音乐频谱的东西,最后还是 ...

  8. 【玩转单片机系列001】 08接口双色LED显示屏驱动方式探索

    前些日子,从淘宝上购得一块08接口的双色LED显示屏(打算做个音乐频谱显示器),捣鼓了好几天,终于搞清楚了其控制原理,在这里做个总结,算是备忘吧. 1.LED显示屏的扫描方式 LED显示屏的扫描方式有 ...

  9. HTML5打造的炫酷本地音乐播放器-喵喵Player

    将之前捣腾的音乐频谱效果加上一个播放列表就成了现在的喵喵播放器(Meow meow Player,额知道这名字很二很装萌~),全HTML5打造的网页程序,可本地运行也可以挂服务器上用. 在线Demo及 ...

随机推荐

  1. man---中英文翻译

    一. 总览---SYNOPSIS 二.

  2. CSS3画五角星和六角星

    最终想要实现的效果 一.五角星 在画五角星之前首先分析这个五角星是如何实现,由哪几个部分构成的,示意图如下: 三个顶角向上的三角形,通过设置旋转和定位相互重叠和拼接实现最终的五角星效果. 为了语义化和 ...

  3. Vue在移动端App中使用的问题总结

    1.客户端中弹出键盘使得fixed布局错乱 Vue 在移动端中使用,当弹出键盘时,fixed 布局的元素可能会被键盘顶起. 例子图示及解决方法参考:https://blog.csdn.net/qq_3 ...

  4. Python用MyQR生成自定义个性二维码

    MyQR是一个能够生成自定义二维码的python第三方库,根据需要能够生成普通二维码.带背景图片的艺术二维码.动态二维码. 1.MyQR安装 安装非常简单,直接用pip install MyQR,需要 ...

  5. Oracle---智斗ORA01427

    下面是我在做更新的时候遇到报ORA-01427,单行子查询返回多行值,原因是红色部分返回了多行值 UPDATE IN_MO IM      SET IM.BOM_ID =             (S ...

  6. [BZOJ4552]:[Tjoi2016&Heoi2016]排序(桶排序)

    题目传送门 题目描述 在2016年,佳媛姐姐喜欢上了数字序列. 因而她经常研究关于序列的一些奇奇怪怪的问题,现在她在研究一个难题,需要你来帮助她. 这个难题是这样子的:给出一个1到n的全排列,现在对这 ...

  7. 解决 ffmpeg 在avformat_find_stream_info执行时间太长

    用ffmpeg做demux,网上很多参考文章.对于网络流,avformt_find_stream_info()函数默认需要花费较长的时间进行流格式探测,那么,如何减少探测时间内? 可以通过设置AVFo ...

  8. 洛谷P2657 windy数

    传送 裸的数位dp 看这个题面,要求相邻两个数字之差至少为2,所以我们记录当前填的数的最后一位 同时要考虑毒瘤的前导0.如果填的数前面都是0,则这一位填0是合法的. emmm具体的看代码叭 #incl ...

  9. something about motorcycle and automobile

    cycle: 循环, 周期, 自行车. 摩托车: motorcycle, motor cycle 轮胎 continent(al): 大陆的, (七)大洲的; 德国的大陆轮胎, 马牌轮胎; 如吉普的c ...

  10. Vue实现音乐播放器(六):jsonp的应用+抓取轮播图数据

    用jsonp来获取数据   通过封装方法来获取 在src文件夹下的api文件夹里面去封装一些获取相关部分组件的数据的方法 在api文件夹下的recommend.js中 配置一下公共参数 请求的真实的u ...