買了幾塊MAX7219點陣模塊,弄了個點陣級聯(lián),時間上翻顯示,有秒點上下閃動,里面有兩段,一段是點陣屏水平放置時數(shù)字上翻,另一段是點陣屏垂直放置時數(shù)字上翻,程序純屬業(yè)余愛好,高手勿噴,下面直接代碼,3個IO口不能有其他器件,下面是壓縮過的圖像,有點變化,其實是沒有拖影的,
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #include <max7219.h>
- #include <zimo.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar timecount,point,sec;
- void timedeal();
- void Delay_xms(uint x)
- {
- uint i,j;
- for(i=0;i<x;i++)
- for(j=0;j<112;j++);
- }
- void main(void)
- {
- uchar i,j,a,b,c,d;
- IE=0x82; //允許定時器0工作
- TR0=1; //定時器0可以工作
- TMOD=0x01; //timer0為模式1
-
- TH0 = 0x4c;
- TL0 = 0x00;
- Delay_xms(50);
-
- InitMAX7219();
-
- while (1)
- {
- a=sec%10;
- c=sec/10;
- /*******************************以下屏幕旋轉(zhuǎn)90度**************/
- if(b==a)
- {
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- Write_1(8-j,logo_1[a][j]);
- Write_2(8-j,logo_2[c][j]|logo_1[11][j]);
- }
- }
- }
- else
- {
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- Write_1(8-j,(logo_1[b][j]<<i|logo_1[b+1][j]>>8-i));
- if(d==c) Write_2(8-j,logo_2[d][j]|logo_1[12][j]);
- else Write_2(8-j,(logo_2[d][j]<<i|logo_2[d+1][j]>>8-i)|logo_1[12][j]);
- }
- Delay_xms(50);
- }
- }
- b=a;
- d=c;
-
- /*******************************以下屏幕旋轉(zhuǎn)90度**************
- if(b==a)
- {
- for(j=1;j<9;j++)
- {
- Write_1(j,logo_3[b][j-1]); //1
- Write_2(j,logo_4[d][j-1]|logo_3[11][j-1]); //2
-
- }
- }
- else
- for(i=0;i<8;i++)
- {
- for(j=1;j<9;j++)
- {
- Write_1(j,logo_3[b][(j-1+i)]); //1
- if(d==c)Write_2(j,logo_4[d][(j-1)]|logo_3[12][j-1]); //2
- else Write_2(j,logo_4[d][(j-1+i)]|logo_3[12][j-1]);//2
- }
- Delay_xms(50);
- }
- b=a;
- d=c;
- /**************************************************************************/
- }
- }
- /****************************************************/
- void time50ms(void) interrupt 1 //計時模式
- {
- TH0 = 0x4c;
- TL0 = 0x00;
- timecount++;
- if(timecount==10)
- {
- timecount=0;
- point=!point;
- if(point)
- {
- sec++;
- if(sec>=60)
- sec=0;
- }
- }
- }
- /*************************************************/
- #ifndef _MAX7219_H_
- #define _MAX7219_H_
- #include <REGX51.H>
- /*********************** 定義MAX7219 內(nèi)部寄存器 **********************/
- #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 // 最大顯示亮度
- /*********************** 定義MAX7219 端口信號 ************************/
- sbit DATA=P3^5;
- sbit LOAD=P3^4;
- sbit CLK=P3^3;
- #define DATA_high DATA=1
- #define DATA_low DATA=0
- #define LOAD_high LOAD=1
- #define LOAD_low LOAD=0
- #define CLK_high CLK=1
- #define CLK_low CLK=0
- /************************** 函數(shù)原型說明 *****************************/
- void Write_1 (unsigned char, unsigned char);
- void Write_2 (unsigned char, unsigned char);
- void SendByte (unsigned char);
- void Clear (void);
- /************************************************************************
- * 函數(shù)原型:void Init()
- * 功 能: 對MAX7219進行初始化,調(diào)用任何其他函數(shù)之前必需先調(diào)用此函數(shù)
- *************************************************************************/
- void InitMAX7219(void)
- {
- DATA_high;
- LOAD_high;
- CLK_high;
- Write_1(REG_SCAN_LIMIT, 7); // 掃描8位數(shù)字
- Write_1(REG_DECODE, 0); // 設(shè)置不譯碼方式
- Write_1(REG_SHUTDOWN,1); // 結(jié)束停機方式,正常工作
- Write_1(REG_DISPLAY_TEST, 0); // 結(jié)束顯示測試,正常工作
- Write_1(REG_INTENSITY, 0); // 設(shè)置亮度
-
- Write_2(REG_SCAN_LIMIT, 7); // 掃描8位數(shù)字
- Write_2(REG_DECODE, 0); // 設(shè)置不譯碼方式
- Write_2(REG_SHUTDOWN,1); // 結(jié)束停機方式,正常工作
- Write_2(REG_DISPLAY_TEST, 0); // 結(jié)束顯示測試,正常工作
- Write_2(REG_INTENSITY, 0); // 設(shè)置亮度
-
- Clear(); // 清零全部顯示器
- }
- /*************************************************************************
- * 函數(shù)原型:void Clear()
- * 功 能:關(guān)閉全部顯示器
- **************************************************************************/
- void Clear (void)
- {
- unsigned char i;
- for (i=1;i<=8;i++)
- Write_1(i, 0); // 關(guān)閉全部顯示器
- Write_2(i, 0);
- }
- /*************************************************************************
- * 函數(shù)原型:static void Write (unsigned char reg_add, unsigned char dat)
- * 功 能:向指定的MAX7219內(nèi)部寄存器寫入數(shù)據(jù)
- * 參 數(shù): reg_add = MAX7219內(nèi)部寄存器地址
- dat = 待寫入的數(shù)據(jù)
- **************************************************************************/
- void Write_1 (unsigned char reg_add, unsigned char dat)
- {
- LOAD_low; // 使LOAD變低,啟動串行數(shù)據(jù)發(fā)送
- SendByte(reg_add); // 發(fā)送MAX7219內(nèi)部寄存器地址
- if(reg_add>8) SendByte(dat); // 發(fā)送待寫入的數(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 Write (unsigned char reg_add, unsigned char dat)
- * 功 能:向指定的MAX7219內(nèi)部寄存器寫入數(shù)據(jù)
- * 參 數(shù): reg_add = MAX7219內(nèi)部寄存器地址
- dat = 待寫入的數(shù)據(jù)
- **************************************************************************/
- void Write_2 (unsigned char reg_add, unsigned char dat)
- {
- LOAD_low; // 使LOAD變低,啟動串行數(shù)據(jù)發(fā)送
- SendByte(reg_add); // 發(fā)送MAX7219內(nèi)部寄存器地址//寫入地址,即數(shù)碼管編號
- if(reg_add>8) SendByte(dat); // 發(fā)送待寫入的數(shù)據(jù) //寫入數(shù)據(jù),即數(shù)碼管顯示數(shù)字
- else SendByte((dat<<7)|(dat>>1)); //如發(fā)送的是顯示數(shù)據(jù),則根據(jù)硬件轉(zhuǎn)換一下數(shù)據(jù)位
- CLK_high;
- SendByte(0x00); // 第一片空
- SendByte(0x00); // 第一片空
- LOAD_high; // 使LOAD變高,串行數(shù)據(jù)結(jié)束
- }
- /*************************************************************************
- * 函數(shù)原型:static void SendByte (unsigned char dat)
- * 功 能:向MAX7219發(fā)送一個字節(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變高
- }
- }
- #endif
- /************************************************************************/
- unsigned char code logo_1[][8]=
- {
- 0x00,0x00,0x3E,0x41,0x41,0x41,0x41,0x3E,//0
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,//1
- 0x00,0x00,0x46,0x49,0x49,0x49,0x49,0x31,//2
- 0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x36,//3
- 0x00,0x00,0x70,0x08,0x08,0x08,0x08,0x7F,//4
- 0x00,0x00,0x31,0x49,0x49,0x49,0x49,0x46,//5
- 0x00,0x00,0x3E,0x49,0x49,0x49,0x49,0x46,//6
- 0x00,0x00,0x40,0x40,0x40,0x40,0x40,0x3F,//7
- 0x00,0x00,0x36,0x49,0x49,0x49,0x49,0x36,//8
- 0x00,0x00,0x31,0x49,0x49,0x49,0x49,0x3E,//9
- 0x00,0x00,0x3E,0x41,0x41,0x41,0x41,0x3E,//0
- 0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- };
- unsigned char code logo_2[][8]=
- {
- 0x00,0x00,0x3E,0x41,0x41,0x41,0x41,0x3E,//0
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,//1
- 0x00,0x00,0x46,0x49,0x49,0x49,0x49,0x31,//2
- 0x00,0x00,0x41,0x49,0x49,0x49,0x49,0x36,//3
- 0x00,0x00,0x70,0x08,0x08,0x08,0x08,0x7F,//4
- 0x00,0x00,0x31,0x49,0x49,0x49,0x49,0x46,//5
- 0x00,0x00,0x3E,0x41,0x41,0x41,0x41,0x3E,//0
- };
- unsigned char code logo_3[][8]=
- {
- 0x00,0x1E,0x21,0x21,0x21,0x21,0x21,0x1E,//0
- 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//1
- 0x00,0x3E,0x01,0x01,0x1E,0x20,0x20,0x1F,//2
- 0x00,0x3E,0x01,0x01,0x1E,0x01,0x01,0x3E,//3
- 0x00,0x21,0x21,0x21,0x1F,0x01,0x01,0x01,//4
- 0x00,0x1F,0x20,0x20,0x1E,0x01,0x01,0x3E,//5
- 0x00,0x1F,0x20,0x20,0x3E,0x21,0x21,0x1E,//6
- 0x00,0x3E,0x01,0x01,0x01,0x01,0x01,0x01,//7
- 0x00,0x1E,0x21,0x21,0x1E,0x21,0x21,0x1E,//8
- 0x00,0x1E,0x21,0x21,0x1F,0x01,0x01,0x3E,//9
- 0x00,0x1E,0x21,0x21,0x21,0x21,0x21,0x1E,//0
- 0x00,0x00,0x80,0x00,0x00,0x00,0x80,0x00,
- 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x80,
- };
- unsigned char code logo_4[][8]=
- {
- 0x00,0x1E,0x21,0x21,0x21,0x21,0x21,0x1E,//0
- 0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//1
- 0x00,0x3E,0x01,0x01,0x1E,0x20,0x20,0x1F,//2
- 0x00,0x3E,0x01,0x01,0x1E,0x01,0x01,0x3E,//3
- 0x00,0x21,0x21,0x21,0x1F,0x01,0x01,0x01,//4
- 0x00,0x1F,0x20,0x20,0x1E,0x01,0x01,0x3E,//5
- 0x00,0x1E,0x21,0x21,0x21,0x21,0x21,0x1E,//0
- };
復(fù)制代碼
圖片:鏈接:https://pan.baidu.com/s/1ae95GQXkaVLrqg8nV1oE8w
提取碼:5q6j |