📄 shumaguan.c
字号:
#include<reg51.h>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit DIN=P1^0; //串行数据输入
sbit CLK=P1^1; //串行时钟
sbit LOAD=P1^2; //显示数据锁存控制
#define NoOp 0x00 //空操作寄存器
#define Digit0 0x01 //数码管1寄存器
#define DecodeMode 0x09 //译码模式寄存器
#define Intensity 0x0a //亮度寄存器
#define ScanLimit 0x0b //扫描位数寄存器
#define ShutDown 0x0c //低功耗模式寄存器
#define DisplayTest 0x0f //显示测试寄存器
#define ShutDownMode 0x00 //低功耗方式
#define NormalOperation 0x01 //正常操作方式
#define ScanDigit 0x00 //扫描位数设置,显示8位数码管
#define DecodeDigit 0xff //译码设置8位均为BCD码
#define IntensityGrade 0x01 //亮度级别设置
#define TestMode 0x01 //显示测试模式
#define TestEnd 0x00 //显示测试结束,恢复正常工作模式
uchar DisBuffer[8]={0,0,0,0,0,0,0,0}; //显示缓存区
void delay(uint t)
{
uint i;
while(t--)
{
for(i=0;i<125;i++)
{}
}
}
//向MAX7219写入字节(8位)
void SendChar (uchar ch)
{
uchar i,temp;
_nop_();
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写入字节
void WriteWord (uchar addr,uchar num)
{
LOAD=0;
_nop_();
SendChar(addr);
_nop_();
SendChar(num);
_nop_();
LOAD=1; //锁存进相应的寄存器
}
// MAX7219初始化
void InitDisplay (void)
{
WriteWord(ScanLimit,ScanDigit); //设置扫描界限
WriteWord(DecodeMode,DecodeDigit); //设置译码模式
WriteWord(Intensity,IntensityGrade); //设置亮度
WriteWord(ShutDown,NormalOperation); //设置正常工作模式
}
void main (void)
{
InitDisplay(); //初始化MAX7219
WriteWord(DisplayTest,TestMode); //开始显示测试,点亮所有LED
delay(3000); //延时约3秒
WriteWord (DisplayTest,TestEnd); //退出显示测试模式
while(1)
{
uchar i;
//8个数码管以相同时间间隔2S同时变化显示0~9的数字
for(i=0;i<=9;i++)
{
delay(2000); //间隔约两秒
InitDisplay();
DisBuffer[0]=i;
WriteWord(Digit0,DisBuffer[0]);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -