⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7219.c~

📁 max7219驱动数码管
💻 C~
字号:
#include<Mega8515.h>
#include<delay.h>

#define uchar unsigned char 
#define uint unsigned int 

#define NoOp   0x00         		// 空操作寄存器
#define Digit0 0x01         		// 数码管1寄存器
#define Digit1 0x02         		// 数码管2寄存器
#define Digit2 0x03         		// 数码管3寄存器
#define Digit3 0x04         		// 数码管4寄存器
#define Digit4 0x05         		// 数码管5寄存器
#define Digit5 0x06         		// 数码管6寄存器
#define Digit6 0x07         		// 数码管7寄存器
#define Digit7 0x08         		// 数码管8寄存器
#define DecodeMode 0x09     		// 译码模式寄存器
#define Intensity 0x0a  		// 亮度寄存器
#define ScanLimit 0x0b      		// 扫描位数寄存器
#define ShutDown 0x0c       		// 低功耗模式寄存器
#define DisplayTest 0x0f    		// 显示测试寄存器

#define ShutdownMode 0x00      		// 低功耗方式
#define NormalOperation 0x01   		// 正常操作方式

#define ScanDigit 0x07        		// 扫描位数设置,显示8位数码管
#define DecodeDigit 0xff       		// 译码设置,8位均为BCD码
#define IntensityGrade 0x0a		// 亮度级别设置

#define TestMode 0x01          		// 显示测试模式
#define TextEnd 0x00           		// 显示测试结束,恢复正常工作模




#define DIN PORTC.4   
#define CLK PORTC.5
#define LOAD PORTC.3


/* 延时t毫秒 */
void delay(uint t)
{
	uint i;
	while(t--)
	{
		/* 对于12M时钟,约延时1ms */
		for (i=0;i<125;i++)
		{}
	}
}


/* 延时t毫秒 */
void delay_m(uint w)
{
	uint h;
	while(w--)
	{
		for (h=0;h<50;h++)
		{}
	}
}


/* 向MAX7219写入字节(8位)*/
void SendChar (uchar ch)
{
	uchar i,temp;
    delay_m(1);
    for (i=0;i<8;i++)
    {
		temp=ch&0x80;
    	ch=ch<<1;
        if(temp)
        {
        	DIN=1;
           	CLK=0;
        	CLK=1;
        }
        else
        {
        	DIN=0;
        	CLK=0;
        	CLK=1;
        }
    }
}

/* 向MAX7219写入字(16位)*/
void WriteWord (uchar addr,uchar num)
{
    LOAD=0;
    delay_m(1);
    SendChar(addr);
    delay_m(1);
    SendChar(num);
    delay_m(1);
    LOAD=1;				// 锁存进相应寄存器
}

/* MAX7219初始化 */
void InitDisplay (void)
{
    WriteWord (ScanLimit,ScanDigit);         // 设置扫描界限
    WriteWord (DecodeMode,DecodeDigit);      // 设置译码模式
    WriteWord (Intensity,IntensityGrade);    // 设置亮度
    WriteWord (ShutDown,NormalOperation);    // 设置为正常工作模式
}


void test_7219(void)
{
 
   	WriteWord(DisplayTest,TestMode);		// 开始显示测试,点亮所有LED
  	delay(9999);       						// 延时约3s
   	WriteWord (DisplayTest,TextEnd);		// 退出显示测试模式
}  	
   	
/* 主函数 */
void main(void)
{      

 	PORTC=0xff;			
	DDRC=0xff;	//PC口设为输出高电平,灯灭           
	PORTD=0xff;			
 	DDRD=0xFF;
   	InitDisplay ();							// MAX7219初始化 
        test_7219();


   	while(1)
   	{

		/* 8个数码管以相同间隔时间2s同时变化显示0~9的数字 */      

	 WriteWord (Digit0,0);
	 WriteWord (Digit1,1);
	 WriteWord (Digit2,2);
	 WriteWord (Digit3,4);
	 WriteWord (Digit4,3);
	 WriteWord (Digit5,5);
	 WriteWord (Digit6,6);
	 WriteWord (Digit7,7);
	 
        }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -