找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6145|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

stm32 驅(qū)動(dòng)hub12接口16*64點(diǎn)陣屏

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:283304 發(fā)表于 2020-8-21 10:19 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
利用stm32407單片機(jī)驅(qū)動(dòng)兩塊16*32點(diǎn)陣屏,實(shí)現(xiàn)中英文顯示及中心對(duì)齊、向左移動(dòng)。led屏為4掃,親測(cè)穩(wěn)定可用。
void         hub12DataSerialInput(uint8_t        data){
                uint8_t         i;
                for( i = 0; i < 8; i++){
                                if(data & 0x80){
                                        HIGH_HUB12_DR;
                                        //HIGH_HUB12_DG;
                                       
                                }else{
                                        LOW_HUB12_DR;
                                        //LOW_HUB12_DG;
                                }
                                LOW_HUB12_CLK;
                                HIGH_HUB12_CLK;
                                data        = data << 1;
                }
}

void  hub12SelectRows(uint8_t rows){
                switch(rows){
                        case 0:
                                        LOW_HUB12_A;
                                        LOW_HUB12_B;
                                        break;
                        case 1:
                                        HIGH_HUB12_A;
                                        LOW_HUB12_B;
                                        break;                                               
                        case 2:
                                        LOW_HUB12_A;
                                        HIGH_HUB12_B;
                                        break;                                               
                        case 3:
                                        HIGH_HUB12_A;
                                        HIGH_HUB12_B;
                                        break;                       
                        default:
                                        break;
                }
}


//刷新點(diǎn)陣
uint8_t hub12Data[128] = {
                0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
};


extern        uint8_t hub12TempData[512];
extern        uint8_t        hub12_dynamic_flag;

//led屏移位模塊
void        hub12DataMove(void){
        uint16_t i,j;
        uint8_t flag_1,flag_2;       
        if(hub12_dynamic_flag == 1){
                        for(i = 0;i < 16; i++){
                                flag_1 = (hub12TempData[i*8] & 0x80);
                                hub12TempData[i*8 + 7 + 128] = (hub12TempData[i*8 + 7 + 128] << 1)|(flag_1 >>0x07);
                                for(j = 0; j < 8 - 1;j++){
                                        flag_2 = (hub12TempData[i*8+j + 1] & 0x80);
                                        hub12TempData[i*8+j]        = (hub12TempData[i*8+j] << 1) |(flag_2 >> 0x07);
                                }
                        }

                        for(i = 0;i < 16; i++){
                                flag_1 = (hub12TempData[i*8 + 128] & 0x80);
                                hub12TempData[i*8 + 7] = (hub12TempData[i*8 + 7] << 1)|(flag_1 >>0x07);
                                for(j = 0; j < 8 - 1;j++){
                                        flag_2 = (hub12TempData[i*8+j + 1 + 128] & 0x80);
                                        hub12TempData[i*8+j + 128]        = (hub12TempData[i*8+j + 128] << 1) |(flag_2 >> 0x07);
                                }
                        }       
        }
        else if(hub12_dynamic_flag == 2){
                for(i = 0;i < 16; i++){
                        flag_1 = (hub12TempData[i*8] & 0x80);
                        hub12TempData[i*8 + 7 + 256] = (hub12TempData[i*8 + 7 + 256] << 1)|(flag_1 >>0x07);
                        for(j = 0; j < 8 - 1;j++){
                                flag_2 = (hub12TempData[i*8+j + 1] & 0x80);
                                hub12TempData[i*8+j]        = (hub12TempData[i*8+j] << 1) |(flag_2 >> 0x07);
                        }
                }

                for(i = 0;i < 16; i++){
                        flag_1 = (hub12TempData[i*8 + 128] & 0x80);
                        hub12TempData[i*8 + 7] = (hub12TempData[i*8 + 7] << 1)|(flag_1 >>0x07);
                        for(j = 0; j < 8 - 1;j++){
                                flag_2 = (hub12TempData[i*8+j + 1 + 128] & 0x80);
                                hub12TempData[i*8+j + 128]        = (hub12TempData[i*8+j + 128] << 1) |(flag_2 >> 0x07);
                        }
                }       
               
                for(i = 0;i < 16; i++){
                        flag_1 = (hub12TempData[i*8 + 256] & 0x80);
                        hub12TempData[i*8 + 7 + 128] = (hub12TempData[i*8 + 7 + 128] << 1)|(flag_1 >>0x07);
                        for(j = 0; j < 8 - 1;j++){
                                flag_2 = (hub12TempData[i*8+j + 1 + 256] & 0x80);
                                hub12TempData[i*8+j + 256]        = (hub12TempData[i*8+j + 256] << 1) |(flag_2 >> 0x07);
                        }
                }               
        }
        else{
                for(i = 0;i < 16; i++){
                        flag_1 = (hub12TempData[i*8] & 0x80);
                        hub12TempData[i*8 + 7 + 384] = (hub12TempData[i*8 + 7 + 384] << 1)|(flag_1 >>0x07);
                        for(j = 0; j < 8 - 1;j++){
                                flag_2 = (hub12TempData[i*8+j + 1] & 0x80);
                                hub12TempData[i*8+j]        = (hub12TempData[i*8+j] << 1) |(flag_2 >> 0x07);
                        }
                }

                for(i = 0;i < 16; i++){
                        flag_1 = (hub12TempData[i*8 + 128] & 0x80);
                        hub12TempData[i*8 + 7] = (hub12TempData[i*8 + 7] << 1)|(flag_1 >>0x07);
                        for(j = 0; j < 8 - 1;j++){
                                flag_2 = (hub12TempData[i*8+j + 1 + 128] & 0x80);
                                hub12TempData[i*8+j + 128]        = (hub12TempData[i*8+j + 128] << 1) |(flag_2 >> 0x07);
                        }
                }       
               
                for(i = 0;i < 16; i++){
                        flag_1 = (hub12TempData[i*8 + 256] & 0x80);
                        hub12TempData[i*8 + 7 + 128] = (hub12TempData[i*8 + 7 + 128] << 1)|(flag_1 >>0x07);
                        for(j = 0; j < 8 - 1;j++){
                                flag_2 = (hub12TempData[i*8+j + 1 + 256] & 0x80);
                                hub12TempData[i*8+j + 256]        = (hub12TempData[i*8+j + 256] << 1) |(flag_2 >> 0x07);
                        }
                }       

                for(i = 0;i < 16; i++){
                        flag_1 = (hub12TempData[i*8 + 384] & 0x80);
                        hub12TempData[i*8 + 7 + 256] = (hub12TempData[i*8 + 7 + 256] << 1)|(flag_1 >>0x07);
                        for(j = 0; j < 8 - 1;j++){
                                flag_2 = (hub12TempData[i*8+j + 1 + 384] & 0x80);
                                hub12TempData[i*8+j + 384]        = (hub12TempData[i*8+j + 384] << 1) |(flag_2 >> 0x07);
                        }
                }       
        }       
        memcpy(hub12Data,hub12TempData,sizeof(hub12Data));
}

//led屏驅(qū)動(dòng)顯示模塊
void hub12Display(uint16_t bright){
                uint8_t i,s;
                for( s = 0; s < 4; s++){        //顯示4行
                                hub12SelectRows(s);
                                LOW_HUB12_LAT;
                                for( i = 0; i < 8; i++){
                                                hub12DataSerialInput(hub12Data[i +         32 * 3 + s * 8]);
                                                hub12DataSerialInput(hub12Data[i +         32 * 2 + s * 8]);
                                                hub12DataSerialInput(hub12Data[i +         32 * 1 + s * 8]);
                                                hub12DataSerialInput(hub12Data[i +         32 * 0 + s * 8]);
                                                if (ETH_CheckFrameReceived())
                                                {
                                                                LwIP_Pkt_Handle();
                                                }                                       
                                }       
                                HIGH_HUB12_LAT;
                                LOW_HUB12_OE;
                                Delay_nus(bright);
                                HIGH_HUB12_OE;                       
                }
}

//確定文字移動(dòng)速度,防止cpu空轉(zhuǎn),采用滴答時(shí)鐘延時(shí)判斷


void hub12DataMovePrpcess(uint16_t running_period)
{
        static uint32_t runningLEDTick        = 0;
        if (timeout( runningLEDTick, running_period))
        {
                if(hub12_dynamic_flag != 0){
                        hub12DataMove();
                }
                runningLEDTick = local_ticktime();

        }
}


/***************主函數(shù)調(diào)用以下函數(shù)即可*****************/
        hub12Display(600);
        hub12DataMovePrpcess(65);



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:914689 發(fā)表于 2023-3-13 16:08 | 只看該作者
你好,12接口具體的使用不太懂,想要一份源碼
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表