YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: AllBlue
打印 上一主题 下一主题

Arduino入门教程—拓展实验篇九 驱动单色8*8点阵

  [复制链接]

签到天数: 866 天

[LV.10]以坛为家III

11#
 楼主| 发表于 2015-4-15 20:39:09 | 只看该作者
xirunamd 发表于 2015-4-13 22:35
怎么弄啊,能不能详细点

SER -- 接引脚9
RCK -- 接引脚10
SRCK  接引脚11
vcc接5V
GND 接GND
这样够详细了吗?引脚可以更改,更改后对应接线也更改就可以了!
回复 支持 反对

使用道具 举报

该用户从未签到

12#
发表于 2015-6-29 02:19:22 | 只看该作者
我也不懂这个五根针要怎么连啊?sketch貌似是用于自己连接64个led的,而不是针对这个led display的。。。能不能详细说明一下要怎么用五根针的连线做到hello的效果?
回复 支持 反对

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

13#
发表于 2015-7-22 02:23:08 | 只看该作者
我补一个驱动5针LED的例子
D:\Documents\Bluetooth Folder\IMG_20150722_021849.jpg
[C++] 纯文本查看 复制代码
#include <FrequencyTimer2.h>

#define NOP() do { __asm__ __volatile__ ("nop"); } while (0)
#define _countof(a)		(sizeof(a) / sizeof(a[0]))

class HC595LED
{
public:
	HC595LED(int ser, int rck, int srck)
	{
		_SER = ser;
		_RCK = rck;
		_SRCK = srck;
	}
	
	void begin()
	{
		pinMode(_SER, OUTPUT);
		pinMode(_RCK, OUTPUT);
		pinMode(_SRCK, OUTPUT);

		digitalWrite(_SER, LOW);
		digitalWrite(_RCK, LOW);
		digitalWrite(_SRCK, LOW);
	}

	void displayRow(uint8_t nRow, uint8_t data)
	{
		nRow = 7 - nRow;

		for(int i = 0; i < 8; i++)
			_rowEnable(i == nRow);
		for(int i = 7; i >= 0; i--) {
			_colEnable(bitRead(data, i));
		}
		flushScreen();
	}

	void clear()
	{
		for(int i = 0; i < 8; i++) 
			_rowEnable(false);
		for(int i = 0; i < 8; i++)
			_colEnable(false);
	}

	void writeItem(bool bHigh)
	{
		digitalWrite(_SER, bHigh ? HIGH : LOW);
		_flushItem();
	}

	void flushScreen()
	{
		digitalWrite(_RCK, HIGH);
		NOP();
		NOP();
		digitalWrite(_RCK, LOW);
	}
private:
	void _rowEnable(bool bEnable)
	{
		writeItem(!bEnable);
	}
	void _colEnable(bool bEnable)
	{
		writeItem(bEnable);
	}

	void _flushItem()
	{
		digitalWrite(_SRCK, HIGH);
		NOP();
		NOP();
		digitalWrite(_SRCK, LOW);
	}

private:
	int _SER;
	int _RCK;
	int _SRCK;
};

///////////////////////////////////////////////////////////////////////

//Pin connected to DS of 74HC595
const int SER_PIN = 8;
//Pin connected to ST_CP of 74HC595
const int RCK_PIN = 9;
//Pin connected to SH_CP of 74HC595
const int SRCK_PIN = 10;

HC595LED led(SER_PIN, RCK_PIN, SRCK_PIN);

PROGMEM const char SPACE[] = 
{
	0b00000000,
	0b00000000,
	0b00000000,
	0b00000000,
	0b00000000,
	0b00000000,
	0b00000000,
	0b00000000,
};
PROGMEM const char H[] = 
{
	0b01000010,
	0b01000010,
	0b01000010,
	0b01111110,
	0b01000010,
	0b01000010,
	0b01000010,
	0b01000010,
};
PROGMEM const char E[] = 
{
	0b01111110,
	0b01000000,
	0b01000000,
	0b01111110,
	0b01000000,
	0b01000000,
	0b01000000,
	0b01111110,
};
PROGMEM const char L[] = 
{
	0b01000000,
	0b01000000,
	0b01000000,
	0b01000000,
	0b01000000,
	0b01000000,
	0b01000000,
	0b01111110,
};
PROGMEM const char O[] = 
{
	0b00011000,
	0b00100100,
	0b01000010,
	0b01000010,
	0b01000010,
	0b01000010,
	0b00100100,
	0b00011000,
};

const char * const arrShowData[] = {H, E, L, L, O, SPACE};

char arrShowBuffer[] = 
{
	0, 0, 0, 0, 0, 0, 0, 0,
};
void display()
{
	static int s_nIndex = 0;

	led.displayRow(s_nIndex, arrShowBuffer[s_nIndex]);

	s_nIndex++;
	s_nIndex %= 8;
}

void setup() 
{
	led.begin();
    Serial.begin(9600);

    delay(1000);
	led.clear();

	FrequencyTimer2::disable();
	FrequencyTimer2::setPeriod(2000);
	FrequencyTimer2::setOnOverflow(display);
}

void loop() 
{
	int s_nIndex = 0;

	while(true) {
		noInterrupts();
		memcpy_PF(arrShowBuffer, (uint_farptr_t)arrShowData[s_nIndex], sizeof(arrShowBuffer));
		interrupts();

		s_nIndex++;
		s_nIndex %= _countof(arrShowData);

		delay(2000);
	}
}

回复 支持 2 反对 0

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

14#
 楼主| 发表于 2015-7-22 08:16:22 | 只看该作者
anjiao 发表于 2015-7-22 02:23
我补一个驱动5针LED的例子

[mw_shl_code=cpp,true]#include

图片没有上传,建议将包含的库文件一并上传分享!
回复 支持 反对

使用道具 举报

签到天数: 1 天

[LV.1]初来乍到

15#
发表于 2015-7-22 21:30:03 | 只看该作者

这是连线方法和动行效果

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 1 反对 0

使用道具 举报

该用户从未签到

16#
发表于 2015-12-11 09:48:47 | 只看该作者
AllBlue 发表于 2013-8-20 08:40
???哪里请指出谢谢~

全亮了,求破。。。。。
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

17#
 楼主| 发表于 2015-12-11 14:57:08 | 只看该作者
a1220529673 发表于 2015-12-11 09:48
全亮了,求破。。。。。

你检查下连接电路呢,这代码应该不会有问题的,都是试过的!
回复 支持 反对

使用道具 举报

该用户从未签到

18#
发表于 2016-6-11 23:08:48 | 只看该作者
为什么我仿真显示不出来,是缺少库文件还是没设置好[img]C:\Users\Administrator\DesktopC:\Users\Administrator\Desktop[/img]
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

20#
 楼主| 发表于 2016-6-14 09:49:47 | 只看该作者
74865132` 发表于 2016-6-11 23:08
为什么我仿真显示不出来,是缺少库文件还是没设置好[/img]

仿真软件没用玩过
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-5-2 23:57 , Processed in 0.047143 second(s), 19 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表