图2 引脚分布
显示内容的点阵字模以下面的方式来存放:
unsignedchardisp[38][8]=
{
{0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C},//0
{0x10,0x30,0x50,0x10,0x10,0x10,0x10,0x10},//1
{0x7E,0x02,0x02,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,0x08,0x08,0x08},//中
{0xFE,0xBA,0x92,0xBA,0x92,0x9A,0xBA,0xFE},//国
};
所配置的延时函数为:
void delay(i16 del)
{ for (u32 i = 0; i < del; ++i) { for (u32var = 0; var< 5000; ++var) { NOP(); } }}复制代码向Max7219发送字节数据的函数为:
voidWrite_Max7219_byte(unsignedchar DATA)
{ unsigned char i; GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN0); for(i=8;i>=1;i--) { GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN2); if(DATA&0x80) GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN1); else GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN1); delay(1); DATA=DATA<<1; GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN2); delay(1); }}复制代码向Max7219指定寄存器方式数据的函数为:
void Write_Max7219(char address,char dat)
{ GPIO_SET_OUTPUT_PIN_TO_0(GPIOA_BASE_ADDR,GPIO_PIN0); Write_Max7219_byte(address); Write_Max7219_byte(dat); GPIO_SET_OUTPUT_PIN_TO_1(GPIOA_BASE_ADDR,GPIO_PIN0);}复制代码MAX7219的初始化函数为:
voidInit_MAX7219(void)
{ Write_Max7219(0x0b, 0x07); Write_Max7219(0x0c, 0x01); Write_Max7219(0x0f, 0x00);}复制代码为驱动点阵模块进行显示,这里将显示程序存放到线程0中,其中包括将所用的引脚设置为输出模式及以循环的方式不断地显示字库中的内容,其程序内容如下:
void thread0_main(void)
{ //使能了GPIOA的时钟 INTDEV_SET_CLK_RST(GPIOA_BASE_ADDR,(INTDEV_RUN|INTDEV_IS_GROUP0|INTDEV_CLK_IS_CORECLK_DIV2)); //将PA0设置为输出模式 GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN0),GPIO_SET_ENABLE); GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN1),GPIO_SET_ENABLE); GPIO_SET_OUTPUT_EN_VALUE(GPIOA_BASE_ADDR,(GPIO_PIN2),GPIO_SET_ENABLE); Init_MAX7219(); delay(100); while(1) { for(u32 j=0;j<38;j++) { for(u32 i=1;i<9;i++) Write_Max7219(i,disp[j][i-1]); delay(100); } } thread_end();}复制代码经编译与下载,其播放显示效果如图3至图5所示。
图3 显示数字
图4 显示字符
图5 显示中文
在使用中较为不便的是,电源引脚引出的过少,对3.3V也缺少引脚输出,并且其电源功率好像也不大,需借助外部电源的辅助。
文章评论(0条评论)
登录后参与讨论