|
20黑幣
本人有一個(gè)arduino控制max7219的程序
啟動(dòng)→行掃→豎掃→滾動(dòng)播放文字→全亮→循環(huán)
程序是單個(gè)7219的,想改成級(jí)聯(lián),目前已經(jīng)知道怎么更改顯示的文字,求助大佬幫忙改一下或者指導(dǎo)一下應(yīng)該改動(dòng)哪里的參數(shù),多謝,
單片機(jī)源程序如下:
- #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 端口信號(hào) ************************/
- #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 內(nèi)部寄存器 **********************/
- #define REG_DECODE 0x09 // 譯碼方式寄存器
- #define REG_INTENSITY 0x0a // 亮度寄存器
- #define REG_SCAN_LIMIT 0x0b // 掃描界限寄存器
- #define REG_SHUTDOWN 0x0c // 停機(jī)寄存器
- #define REG_DISPLAY_TEST 0x0f // 顯示測(cè)試寄存器
- #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,
- };
- /************************** 函數(shù)原型說(shuō)明 *****************************/
- void Write (unsigned char, unsigned char);
- void SendByte (unsigned char);
- void Clear (void);
- /************************************************************************
- * 函數(shù)原型:void Init()
- * 功 能: 對(duì)MAX7219進(jìn)行初始化,調(diào)用任何其他函數(shù)之前必需先調(diào)用此函數(shù)
- *************************************************************************/
- void InitMAX7219(void)
- {
- DATA_high;
- LOAD_high;
- CLK_high;
- Write(REG_SCAN_LIMIT, 7); // 掃描8位數(shù)字
- Write(REG_DECODE, 0); // 設(shè)置不譯碼方式
- Write(REG_SHUTDOWN,1); // 結(jié)束停機(jī)方式,正常工作
- Write(REG_DISPLAY_TEST, 0); // 結(jié)束顯示測(cè)試,正常工作
- Write(REG_INTENSITY, 3); // 設(shè)置亮度
- Clear(); // 清零全部顯示器
- }
- /*************************************************************************
- * 函數(shù)原型:void Clear()
- * 功 能:關(guān)閉全部顯示器
- **************************************************************************/
- void Clear (void)
- {
- unsigned char i;
- for (i=1;i<=8;i++)
- Write(i, 0); // 關(guān)閉全部顯示器
- }
- /*************************************************************************
- * 函數(shù)原型:void Write (unsigned char reg_number, unsigned char dat)
- * 功 能:向指定的MAX7219內(nèi)部寄存器寫(xiě)入數(shù)據(jù)
- * 參 數(shù): reg_add = MAX7219內(nèi)部寄存器地址
- dat = 待寫(xiě)入的數(shù)據(jù)
- **************************************************************************/
- void Write (unsigned char reg_add, unsigned char dat)
- {
- LOAD_low; // 使LOAD變低,啟動(dòng)串行數(shù)據(jù)發(fā)送
- SendByte(reg_add); // 發(fā)送MAX7219內(nèi)部寄存器地址
- if(reg_add>8)
- SendByte(dat); // 發(fā)送待寫(xiě)入的數(shù)據(jù)
- else
- SendByte((dat<<7)|(dat>>1)); //如發(fā)送的是顯示數(shù)據(jù),則根據(jù)硬件轉(zhuǎn)換一下數(shù)據(jù)位
- LOAD_high; // 使LOAD變高,串行數(shù)據(jù)結(jié)束
- }
- /*************************************************************************
- * 函數(shù)原型:static void SendByte (unsigned char dat)
- * 功 能:向MAX7219發(fā)送一個(gè)字節(jié)串行數(shù)據(jù)
- * 參 數(shù):dat = 待發(fā)送的數(shù)據(jù)
- **************************************************************************/
- void SendByte (unsigned char dat)
- {
- unsigned char i;
- for (i=0; i<8; i++)
- {
- CLK_low; // 使CLK變低
- if(dat&0x80) // 發(fā)送一位數(shù)據(jù)"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++) //逐行點(diǎn)亮
- {
- for(j=1;j<9;j++)
- {
- Write(j,1<<i);
- }
- _delay_ms(200);
- }
- for(i=1;i<9;i++) //逐列點(diǎn)亮
- {
- 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);
- }
- }
復(fù)制代碼
|
-
-
程序截圖.pdf
2020-7-14 11:03 上傳
點(diǎn)擊文件名下載附件
138.59 KB, 下載次數(shù): 4
|