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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6103|回復: 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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 夜夜爽99久久国产综合精品女不卡 | 美女视频h | 欧美日韩一区二区三区四区五区 | 福利网址 | 成人国产免费视频 | 国产精品视频久久久久 | 国产成人自拍av | 亚洲丝袜天堂 | 精品天堂| 亚洲少妇综合网 | 国产999精品久久久久久 | 国产伦精品一区二区三区高清 | sese视频在线观看 | 成人在线网 | 欧美在线一区二区三区 | 成人a视频| 亚洲欧美视频一区 | 一级黄色毛片免费 | 一级黄a视频 | 亚洲一区 | 国产精品久久国产精品 | 国产欧美一区二区精品久导航 | 神马福利 | 精品国产欧美一区二区三区成人 | 欧美男人天堂 | 精品国产乱码久久久久久88av | 欧美精品一区二区三区在线播放 | h片在线看 | 亚洲一二三区精品 | 在线观看三级av | 视频一区在线 | 国产精品久久久久久久午夜 | 久久中文视频 | 国产一区 | 日韩高清中文字幕 | 老司机67194精品线观看 | 密乳av | 国产精品久久久久无码av | 国产精品日韩一区二区 | 一区二区三区在线 | 久久久久99 |