欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: stm32 驅動hub12接口16*64點陣屏 [打印本頁]

作者: xiaozi1111    時間: 2020-8-21 10:19
標題: stm32 驅動hub12接口16*64點陣屏
利用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);




作者: 小白一個呀    時間: 2023-3-13 16:08
你好,12接口具體的使用不太懂,想要一份源碼




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1