大家好,欢迎来到IT知识分享网。
MAX7219是一种集成化的串行输入/输出共阴极显示驱动器,其片内配有一个B型BCD编码器、多路扫描回路,段字驱动器,而且还有一个8*8的静态RAM用来存储数据。有一个外部寄存器用来设置各个LED的段电流。同时它有限制回转电流的段驱动以减少EMI(电磁干扰)。
一个方便的四线串行接口可以联接所有通用的微处理器。每个数据可以寻址在更新时不需要改写所有的显示。MAX7219允许用户对每一个数据选择编码或者不编码。
芯片包含一个150μA的低功耗模式控制器,可进行模拟或数字式亮度控制,一个扫描限制寄存器允许用户显示1-8位数据,还有一个让所有LED发光的检测模式。
它只需3个GPIO口就可驱动8位数码管或8×8点阵模块,因此它相较于传统的并联式驱动基于硬件资源消耗少的特点。
本篇主要介绍以NuMaker–PFM–M487开发板来驱动MAX7219显示模块,并通过RT_Thread软件来实现。
1. 串行数码管显示模块
串行数码管显示模块的外观如图1所示,它具有输入端和输出端可多个模块级联起来使用,以显示更多位的数码值。
图1 串行数码管模块
串行数码管显示模块的电路原理图见图2所示,该模块采用5V电压来工作。
图2 原理图
在使用NuMaker–PFM–M487开发板驱动的情况下,其显示效果如图3所示。
图3 显示效果
该显示模块与开发板的连接关系为:
CLK– PA2
DIN– PA1
CS –PA0
MAX7219模拟串行数据发送的函数为:
复制
void Write_Max7219_byte(unsigned char DATA) { unsigned char i; rt_pin_write(CS_PIN, PIN_LOW); for(i=8;i>=1;i--) { rt_pin_write(CLK_PIN, PIN_LOW); if(DATA&0x80) rt_pin_write(DIN_PIN, PIN_HIGH); else rt_pin_write(DIN_PIN, PIN_LOW); DATA=DATA<<1; rt_pin_write(CLK_PIN, PIN_HIGH); } }
MAX7219向芯片寄存器写入数据的函数为:
复制
void Write_Max7219(char address,char dat) { rt_pin_write(CS_PIN, PIN_LOW); Write_Max7219_byte(address); Write_Max7219_byte(dat); rt_pin_write(CS_PIN, PIN_HIGH); }
MAX7219的初始化函数为:
复制
void Init_MAX7219(void) { Write_Max7219(0x09, 0xff); //译码方式:BCD码 Write_Max7219(0x0a, 0x03); //亮度 Write_Max7219(0x0b, 0x07); //扫描界限;4个数码管显示 Write_Max7219(0x0c, 0x01); //掉电模式:0,普通模式:1 Write_Max7219(0x0f, 0x01); //显示测试:1;测试结束,正常显示:0 }
实现显示功能的主程序为:
复制
void main(void) { rt_pin_mode(CLK_PIN , PIN_MODE_OUTPUT); rt_pin_mode(DIN_PIN, PIN_MODE_OUTPUT); rt_pin_mode(CS_PIN, PIN_MODE_OUTPUT); rt_thread_mdelay(50); Init_MAX7219(); rt_thread_mdelay(2000); Write_Max7219(0x0f, 0x00); Write_Max7219(1,8); Write_Max7219(2,7); Write_Max7219(3,6); Write_Max7219(4,5); Write_Max7219(5,4); Write_Max7219(6,3); Write_Max7219(7,2); Write_Max7219(8,1); while(1); }
经编译处理,其编译结果如图5所示。
由此可见,串行数码管显示模块的驱动是很容易实现的,也是十分方便。由于数码管基于亮度高的特点,故适于在工业现场来使用。
2. 串行点阵显示模块
串行点阵显示模块也是以MAX7219为控制芯片,在单级使用的情况下,一片MAX7219可控制一块8*8点阵的显示块,若采用级联的方式,则可驱动多个点阵块,以实现多个字符的同时显示,可达到点阵信息屏的显示效果。
该模块的电路原理图如图4所示,为节省空间,它是将MAX7219芯片置于点阵块的下方。
图4 模块电路图
点阵显示模块与开发板的连接关系为:
CLK– PA2
DIN– PA1
CS –PA0
在使用NuMaker–PFM–M487开发板驱动的情况下,其显示效果如图5所示。
图5 显示效果
相较于串行数码管显示模块,该显示模块所显示的信息量要更丰富,故需要为它配置一个显示字模数组,其结构及内容如下:
unsigned chardisp[38][8]={
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0
{0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1
{0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E}, //2
…
{0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22},//A
{0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0},//B
{0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x0},//C
…
{0x8,0x7F,0x49,0x49,0x7F,0x8,0x8,0x8},//中
{0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE},//国
}
对于点阵显示模块的驱动,同样需要2个辅助函数Write_Max7219_byte()和Write_Max7219()的支持,其内容同前面的函数相一致,故从略。
但在MAX7219的初始化方面,由于2种功能模块有着较大的差异,故其初始化函数是不同的,其内容为:
复制
void Init_MAX7219(void) { Write_Max7219(0x0b, 0x07); Write_Max7219(0x0c, 0x01); Write_Max7219(0x0f, 0x00); }
实现图5显示效果的主程序为:
复制
void main(void) { uint32_t i,j; rt_pin_mode(CLK_PIN , PIN_MODE_OUTPUT); rt_pin_mode(DIN_PIN, PIN_MODE_OUTPUT); rt_pin_mode(CS_PIN, PIN_MODE_OUTPUT); Init_MAX7219(); while(1) { for(j=0;j<38;j++) { for(i=1;i<9;i++) Write_Max7219(i,disp[j][i-1]); rt_thread_mdelay(1000); } } }
其中,内层的循环是为了完成单个字符的显示,而外层的循环则是负责将字符库中的内容遍寻显示一轮。
在显示过程中,每显示完一个字符。
经编译下载,其显示如图6至图8所示。
图6 显示“0”
图7显示“1”
图8显示“2”
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/109291.html