打印
[活动专区]

【杰发科技AC7802x测评】+点阵模块显示驱动

[复制链接]
934|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2023-7-20 18:47 编辑

#申请原创#
这里用AC7802x开发板来驱动一个8*8点阵的显示模块,当然在级联的情况下它能显示更多的内容。
点阵模块与开发板的具体连接关系为:
CS ---PA1
CS ---PA1
CLK---PA2

图1 使用接口

对使用引脚的配置函数为:
void GPIO_DZMKInit(void)
{
    GPIO_SetFunc(GPIOA, GPIO_PIN0, GPIO_FUN0);
    GPIO_SetFunc(GPIOA, GPIO_PIN1, GPIO_FUN0);
    GPIO_SetFunc(GPIOA, GPIO_PIN2, GPIO_FUN0);
    GPIO_SetDir(GPIOA, GPIO_PIN0, GPIO_OUT);
    GPIO_SetDir(GPIOA, GPIO_PIN1, GPIO_OUT);
    GPIO_SetDir(GPIOA, GPIO_PIN2, GPIO_OUT);
}

为输出高低电平,所作的定义为:
#defineDIN_SetHigh()  GPIO_SetPinLevel(GPIOA,GPIO_PIN0, GPIO_LEVEL_HIGH)
#defineDIN_SetLow()   GPIO_SetPinLevel(GPIOA,GPIO_PIN0, GPIO_LEVEL_LOW)

#defineCS_SetHigh()   GPIO_SetPinLevel(GPIOA,GPIO_PIN1, GPIO_LEVEL_HIGH)
#defineCS_SetLow()    GPIO_SetPinLevel(GPIOA,GPIO_PIN1, GPIO_LEVEL_LOW)

#defineCLK_SetHigh()  GPIO_SetPinLevel(GPIOA,GPIO_PIN2, GPIO_LEVEL_HIGH)
#define CLK_SetLow()   GPIO_SetPinLevel(GPIOA,GPIO_PIN2, GPIO_LEVEL_LOW)

以GPIO口方式串行发送字节数据的函数为:
void Write_Max7219_byte(char DATA)
{
   char i;
   CS_SetLow();
   for(i=8;i>=1;i--)
   {
     CLK_SetLow();
     if(DATA&0x80)
        DIN_SetHigh();
     else
        DIN_SetLow();
     DATA=DATA<<1;
     CLK_SetHigh();
   }
}

Max7219向指定地址发送控制字的函数为:
void Write_Max7219(char address,char dat)
{
     CS_SetLow();
     Write_Max7219_byte(address);
     Write_Max7219_byte(dat);
     CS_SetHigh();
}

对Max7219进行初始化的函数为:
void Init_MAX7219(void)
{
     Write_Max7219(0x0b, 0x07);
     Write_Max7219(0x0c, 0x01);
     Write_Max7219(0x0f, 0x00);
}

为了进行显示,所配置的字库结构为:
unsigned char disp[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
{0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0},//3
...
{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},//国
};

实现点阵模块显示测试的主程序为:
int main(void)
{
     char i,j;
    InitDelay();
    InitDebug();
    TIMER_PrdInit();
    GPIO_DZMKInit();
    Init_MAX7219 ();
    while (1)
    {
        for(j=0;j<38;j++)
        {
           for(i=1;i<9;i++)
           {
                    Write_Max7219(i,disp[j][i-1]);
                    mdelay(40);
           }
           mdelay(200);
       }
    }
}

进行程序编译和下载,其显示效果如图2至图4所示。

图2 显示数字



图3 显示字符



图4 显示汉字


使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

474

主题

2819

帖子

38

粉丝