欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
關于arduino+max7219級聯的求助
[打印本頁]
作者:
達達別
時間:
2020-7-14 11:04
標題:
關于arduino+max7219級聯的求助
本人有一個arduino控制max7219的程序
啟動→行掃→豎掃→滾動播放文字→全亮→循環
程序是單個7219的,想改成級聯,目前已經知道怎么更改顯示的文字,求助大佬幫忙改一下或者指導一下應該改動哪里的參數,多謝,
單片機源程序如下:
#include <avr/io.h>
#include <util/delay.h>
//-------------------宏定義-----------------------------------------
#define SET_BIT(PORT,BIT) PORT|=(1<<BIT)
#define CLR_BIT(PORT,BIT) PORT&=~(1<<BIT)
#define BIT_IN(DDR,BIT) DDR&=~(1<<BIT)
#define BIT_OUT(DDR,BIT) DDR|=(1<<BIT)
#define READ_BIT(PIN,BIT) (PIN&(1<<BIT))
/*********************** 定義MAX7219 端口信號 ************************/
#define DATA 4
#define LOAD 3
#define CLK 2
#define DATA_high digitalWrite(DATA,HIGH)
#define DATA_low digitalWrite(DATA,LOW)
#define LOAD_high digitalWrite(LOAD,HIGH)
#define LOAD_low digitalWrite(LOAD,LOW)
#define CLK_high digitalWrite(CLK,HIGH)
#define CLK_low digitalWrite(CLK,LOW)
/*********************** 定義MAX7219 內部寄存器 **********************/
#define REG_DECODE 0x09 // 譯碼方式寄存器
#define REG_INTENSITY 0x0a // 亮度寄存器
#define REG_SCAN_LIMIT 0x0b // 掃描界限寄存器
#define REG_SHUTDOWN 0x0c // 停機寄存器
#define REG_DISPLAY_TEST 0x0f // 顯示測試寄存器
#define INTENSITY_MIN 0x00 // 最小顯示亮度
#define INTENSITY_MAX 0x0f // 最大顯示亮度
unsigned char logo[]={
//陰碼,逐列式,逆向
0x7F,0x08,0x08,0x08,0x7F,0x00,//"h",0//
0x01,0x01,0x7F,0x01,0x01,0x00,//"t",0//
0x01,0x01,0x7F,0x01,0x01,0x00,//"t",0//
0x7F,0x09,0x09,0x09,0x06,0x00,//"P",0//
0x6C,0x6C,0x00,//":",0//
0x30,0x0C,0x63,0x18,0x06,0x00,//"//",0//
0x20,0x40,0x41,0x3F,0x01,0x00,//"j",0//
0x01,0x02,0x7C,0x02,0x01,0x00,//"y",0//
0x08,0x08,0x08,0x08,0x08,0x00,//"-",0//
0x7F,0x02,0x0C,0x02,0x7F,0x00,//"m",0//
0x3E,0x41,0x41,0x41,0x22,0x00,//"c",0//
0x3F,0x40,0x40,0x40,0x3F,0x00,//"u",0//
0x60,0x60,0x00,//".",0//
0x01,0x01,0x7F,0x01,0x01,0x00,//"t",0//
0x7E,0x09,0x09,0x09,0x7E,0x00,//"a",0//
0x3E,0x41,0x41,0x41,0x3E,0x00,//"o",0//
0x7F,0x49,0x49,0x49,0x36,0x00,//"b",0//
0x7E,0x09,0x09,0x09,0x7E,0x00,//"a",0//
0x3E,0x41,0x41,0x41,0x3E,0x00,//"o",0//
0x60,0x60,0x00,//".",0//
0x3E,0x41,0x41,0x41,0x22,0x00,//"c",0//
0x3E,0x41,0x41,0x41,0x3E,0x00,//"o",0//
0x7F,0x02,0x0C,0x02,0x7F,0x00,//"m",0//
0,0,0,0,0,0,0,0,
};
/************************** 函數原型說明 *****************************/
void Write (unsigned char, unsigned char);
void SendByte (unsigned char);
void Clear (void);
/************************************************************************
* 函數原型:void Init()
* 功 能: 對MAX7219進行初始化,調用任何其他函數之前必需先調用此函數
*************************************************************************/
void InitMAX7219(void)
{
DATA_high;
LOAD_high;
CLK_high;
Write(REG_SCAN_LIMIT, 7); // 掃描8位數字
Write(REG_DECODE, 0); // 設置不譯碼方式
Write(REG_SHUTDOWN,1); // 結束停機方式,正常工作
Write(REG_DISPLAY_TEST, 0); // 結束顯示測試,正常工作
Write(REG_INTENSITY, 3); // 設置亮度
Clear(); // 清零全部顯示器
}
/*************************************************************************
* 函數原型:void Clear()
* 功 能:關閉全部顯示器
**************************************************************************/
void Clear (void)
{
unsigned char i;
for (i=1;i<=8;i++)
Write(i, 0); // 關閉全部顯示器
}
/*************************************************************************
* 函數原型:void Write (unsigned char reg_number, unsigned char dat)
* 功 能:向指定的MAX7219內部寄存器寫入數據
* 參 數: reg_add = MAX7219內部寄存器地址
dat = 待寫入的數據
**************************************************************************/
void Write (unsigned char reg_add, unsigned char dat)
{
LOAD_low; // 使LOAD變低,啟動串行數據發送
SendByte(reg_add); // 發送MAX7219內部寄存器地址
if(reg_add>8)
SendByte(dat); // 發送待寫入的數據
else
SendByte((dat<<7)|(dat>>1)); //如發送的是顯示數據,則根據硬件轉換一下數據位
LOAD_high; // 使LOAD變高,串行數據結束
}
/*************************************************************************
* 函數原型:static void SendByte (unsigned char dat)
* 功 能:向MAX7219發送一個字節串行數據
* 參 數:dat = 待發送的數據
**************************************************************************/
void SendByte (unsigned char dat)
{
unsigned char i;
for (i=0; i<8; i++)
{
CLK_low; // 使CLK變低
if(dat&0x80) // 發送一位數據"1"或"0"
DATA_high;
else
DATA_low;
dat<<=1;
CLK_high; // 使CLK變高
}
}
void io_init(void)
{
DDRB|=(1<<DATA)|(1<<CLK)|(1<<LOAD);
PORTB|=(1<<DATA)|(1<<CLK)|(1<<LOAD);
pinMode(DATA,OUTPUT);
pinMode(CLK,OUTPUT);
pinMode(LOAD,OUTPUT);
}
void setup(void)
{
io_init();
InitMAX7219();
}
void loop(void)
{
unsigned char i,j;
while(1)
{
for(i=0;i<8;i++) //逐行點亮
{
for(j=1;j<9;j++)
{
Write(j,1<<i);
}
_delay_ms(200);
}
for(i=1;i<9;i++) //逐列點亮
{
for(j=1;j<9;j++)
if(j==i)Write(j,0xff);
else Write(j,0);
_delay_ms(200);
}
for(i=0;i<sizeof(logo)-8;i++)
{
for(j=1;j<9;j++)
{
Write(j,logo[j+i]);
}
_delay_ms(200);
}
for(i=1;i<9;i++)Write(i,0xff);
_delay_ms(10000);
}
}
復制代碼
程序截圖.pdf
2020-7-14 11:03 上傳
點擊文件名下載附件
138.59 KB, 下載次數: 4
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1