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

📄 max7219.c

📁 基于MAX7219的串行数码管显示
💻 C
字号:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define decodemode 0x09//译码模式寄存器
#define intensity 0x0a//亮度寄存器
#define scanlimt 0x0b //扫描位数寄存器
#define shutdown 0x0c //低功耗模式寄存器
#define displaytest 0x0f //显示寄存器
sbit DIN=P1^0;
sbit LOAD=P1^1;
sbit CLOCK=P1^2;
uchar disbuf[8]={0,0,0,0,0,0,0,0};
/*******对于12MHZ时钟,延时1ms**********/
void delay(uint t)
{
	uint i;
	while(t--)
	{
		for(i=0;i<125;i++)
		{}
	}
}
/**********向MAX7219写入字节(8位)***************/
void sendchar(uchar ch)
{
	uchar i,temp;
	for(i=0;i<8;i++)
	{
		temp=ch&0x80;
		ch=ch<<1;
		if(temp)
		{
			DIN=1;
			CLOCK=0;
			CLOCK=1;
		}
		else
		{
			DIN=0;
			CLOCK=0;
			CLOCK=1;
		}
	}
}
/***********向MAX7219写入字(16位)*********/
void writeword(uchar address,uchar num)
{
	LOAD=0;
	_nop_();
	sendchar(address);
	_nop_();
	sendchar(num);
	_nop_();
	LOAD=1;
}
/***********MAX7219初始化*************/
void init()
{
	//P1=0xff;
	writeword(scanlimt,0x07);//扫描位数设置为8位数码管;
	writeword(decodemode,0xff);//译码模式设置为BCD译码;
	writeword(intensity,0x0a);//亮度级别设置;
	writeword(shutdown,0x01);//低功耗模式设置为正常模式;
}
void main()
{
	init();
	writeword(displaytest,0x01);//开始显示测试,点亮所有LED
	delay(2);
	writeword(displaytest,0x00);//关显示;
	while(1)
	{
	//	uchar i,j;
	//8个数码管间隔2s同时变化显示0-9的数字
	//	for (i=0;i<=9;i++)
	//	{
		//	delay(1000);
			init();
		//	for(j=0;j<=7;j++)
		//	disbuf[j]=i;
		//8个数码管分别显示1-8数字
			writeword(0x01,1);//第一个数码管显示1
			writeword(0x02,2);
			writeword(0x03,3);
			writeword(0x04,4);
			writeword(0x05,5);
		   	writeword(0x06,6);
			writeword(0x07,7);
			writeword(0x08,8);//第八个数码管显示8
	//	}
	}
}

⌨️ 快捷键说明

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