久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6257|回復: 1
收起左側

stm32 驅動hub12接口16*64點陣屏

[復制鏈接]
ID:283304 發表于 2020-8-21 10:19 | 顯示全部樓層 |閱讀模式
利用stm32407單片機驅動兩塊16*32點陣屏,實現中英文顯示及中心對齊、向左移動。led屏為4掃,親測穩定可用。
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;
                }
}


//刷新點陣
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屏驅動顯示模塊
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;                       
                }
}

//確定文字移動速度,防止cpu空轉,采用滴答時鐘延時判斷


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();

        }
}


/***************主函數調用以下函數即可*****************/
        hub12Display(600);
        hub12DataMovePrpcess(65);



回復

使用道具 舉報

ID:914689 發表于 2023-3-13 16:08 | 顯示全部樓層
你好,12接口具體的使用不太懂,想要一份源碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 综合久久综合久久 | av大片在线观看 | 鸳鸯谱在线观看高清 | 夜色www国产精品资源站 | 91丨九色丨国产在线 | 精品国产乱码久久久久久影片 | 亚洲国产一 | 在线免费观看亚洲 | 欧美精品福利 | 一区二区三区四区在线视频 | 91在线看片 | 日韩插插| 中文字幕av亚洲精品一部二部 | 最新高清无码专区 | 一区二区在线 | 亚洲日韩中文字幕一区 | 午夜精品一区二区三区三上悠亚 | 久久久蜜臀国产一区二区 | 99久久精品一区二区成人 | 欧美一区二区三区的 | 精品久久一区 | 久久国产精品99久久久久 | 午夜影晥 | 成人午夜电影在线观看 | 国产精品一区二区无线 | 三级黄色大片网站 | 久久九九99 | 在线视频一区二区三区 | 91麻豆精品国产91久久久久久久久 | www.日本三级| 视频一区中文字幕 | 久久国产精品免费一区二区三区 | 美女天堂在线 | 午夜码电影 | 成人福利在线观看 | 一区二区视频在线观看 | 亚洲一区国产精品 | 国产成人精品一区二三区在线观看 | av日日操| 午夜三级视频 | 99精品视频在线 |