LED音乐频谱之点阵
轉載請注明出處:http://blog.csdn.net/ruoyunliufeng/article/details/37967455
一.硬件
這里的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 127sbit _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);#endifled.c
我想最核心的東西,應該就是怎么通過三個循環實現左移的吧(盡管這樣做用來三個循環。如今看來并非非常好),以下具體講講這段代碼。
代碼思路:我們都知道要想實現點陣顯示僅僅要向595串行輸入16個字模數據就OK了。那么怎樣叫它向左面移動呢?事實上非常easy。以下我繪圖說明:
最里面的那層for循環實現了點陣的顯示,就是從左到右刷一遍。
中間那層for循環是一箭雙雕,有兩個作用。第一個就是為了點陣可以穩定顯示,就是高速的多刷幾遍(要不刷一遍誰看得清)。
第二個作用就是為了向左移動提供延時(要不瞬間不就左移到頭了嘛)。
事實上規范點的寫法應該是這個for提供穩定點陣顯示。然后外面在加一個延時控制向左移動的速率。后來我看寫的太復雜就給省略了。
最外面的那層循環控制的是左移的列數(就是向左移動多少):
for(k=0;k<25;k++) //控制動畫移動
K的值代表想做移動的列數。為什么是25。由于一共是5個字每一個字占8行??????????????
初始狀態: ?? ???????????????? *若 云*MCU
終止狀態:????????????? 若云*MCU*
也就是像左面移動三個字,3*8=24,所以K<25。
最后另一個LineInput()函數,干嘛用的呢?留個懸念,興許博客解說。
轉載于:https://www.cnblogs.com/ldxsuanfa/p/10927853.html
總結
以上是生活随笔為你收集整理的LED音乐频谱之点阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 建设银行附属卡年费多少?免年费吗?
- 下一篇: cf777c