×
单片机 > 单片机程序设计 > 详情

MAX7219多片级联驱动点阵单片机程序编写经历

发布时间:2021-09-27 发布时间:
|

main.c

#include

#include "intrins.h"

#include "Max7219.h"


uchar code laji[][8]={

{0x18,0x24,0x42,0x42,0x7E,0x42,0x42,0x42},//A

{0x7C,0x42,0x42,0x7C,0x42,0x42,0x42,0x7C},//B

{0x3C,0x42,0x40,0x40,0x40,0x40,0x42,0x7C},//C

{0x7C,0x42,0x42,0x42,0x42,0x42,0x42,0x7C},//D

};

/*n毫秒的延时程序*/

/*void Delay_xms(uint x)

{

uint i,j;

for(i=0;i

for(j=0;j<112;j++);

}*/

void main()

{

uchar i,j;

//Delay_xms(50);

MAX7219Init();

while(1)

{

for(j=0;j<8;j++)

{

for(i=0;i

{

Max7219WR(j+1,laji[i][j]);

}

CS=1; _nop_(); CS=0;

//Delay_xms(100);

}

}

}



Max7219.h

#ifndef _Max7219_H_

#define _Max7219_H_


#define uchar unsigned char

#define uint unsigned int

#define number 4 //点阵级联个数

#define lum 5 //亮度级别,0-F,共16级


//定义Max7219端口

sbit CLK = P2^2; //时钟 Max7219_pin

sbit CS = P2^1; //锁存

sbit DIN = P2^0; //数据


//向MAX7219 写入地址和数据

void Max7219WR(uchar addr,uchar dat)

{

uchar n=8;

CLK=0;

CS=0; //CS=0有效,CS=1锁存

/*发送数据 高位先发*/

while(n--)

{

DIN = addr & 0x80;

CLK=1;

addr <<= 1;

CLK=0;

}

n=8;

/*发送数据 高位先发*/

while(n--)

{

DIN = dat & 0x80;

CLK=1;

dat <<= 1;

CLK=0;

}

}

void MAX7219Init()

{

uchar i,j;

for(i=0;i<5;i++) //

{

for(j=number;j>0;j--)

switch(i)

{

case 0:Max7219WR(0x09, 0x00); break; //译码方式:BCD码 不译码

case 1:Max7219WR(0x0A, lum); break; //亮度 0-15 共16级

case 2:Max7219WR(0x0B, 0x07); break; //扫描界限;8位显示

case 3:Max7219WR(0x0C, 0x01); break; //掉电模式:0,普通模式:1

case 4:Max7219WR(0x0F, 0x00); break; //显示测试:1;测试结束,正常显示:0

}

CS=1; _nop_(); CS=0; //每写入四次给一个锁存脉冲

}

}

#endif



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向