------------------------------------------------------------------------
- Подпись автора
By Admin
USMI |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » USMI » MCU, SoC, CPU Микроконтроллеры » Подключение разной периферии к JL SoC. SPI/I2C/I2S/PWM/UART/GPIO...
------------------------------------------------------------------------
By Admin
было б интересно к наушникам подключить i2s микрофон, а то там обычно не микрофон, а хз что.
было б интересно к наушникам подключить i2s микрофон, а то там обычно не микрофон, а хз что.
К какому чипу?
By Admin
а там обычно ножек не хватает, да?
Ты о чем?
By Admin
на мелких корпусах порты не выведены? мне было интересно 6956a
А вот хз. Там вроде не I2S. Хз вообще, вроде как в 698 и тд используют цифровые микрофоны. C ANC. Ну типа а-ля эирподсы со всеми свистоперделками)
Я возился только с электретными микрофонами. Вроде с головой хватало. Ну конечно же без ANC, но вроде всё хорошо было. Таже тестировал через звонки. Там напряжение питания нужно брать строго с ноги DACAVDD. И чувствительность этих микрофончиков очень сильно зависит от напряжения питания. Я игрался с этим, лучше переменник резистор поставить и протестировать в реальном времени. Еже чувствительность в блютуз конфиге настраивается.
By Admin
Вопрос, а можно как то регулировать громкость PCM? ну тоесть еще со стороны декодера/проца который формирует I2S. А то обычно регулируют аналоговый сигнал уже после I2S кодека...
By Admin
Играюсь с сегментными лед дисплеями, и заодно с таймерами.
У 690 их 4
"timer0"
"timer1"
"timer2"
"timer3"
**********************************
TIMER0 завязан на кнопках, ик датчике, 7сегментном дисплее, и на куче системного... Лучше не трогать тайминги , а то будут глюки.
TIMER1 в IR если другая группа портов ну и PWM для светодиода первого канала.(RGB)
TIMER2 в IR если третья группа портов и PWM для другого канала светодиодов(RGB)
TIMER3 в PWM третьего канала светодиода... (RGB)
Есть такая штука, 7сегментник мерцает, и он привязан к таймеру0. Если сменить тайминги в таймере0 из 2мс на 1, то оно начинает работать нормально. Зато все остальное начинает чудить.
Я просто взял и немного изменил таймер2, он почти не задействован, и не влияет ни на что кроме PWM светодиода, уменьшив тайминг даже лучше, RCSP LED не будет противно мерцать...
Теперь можно играться с таймером 2 спокойно, и гадское мерцание исчезло, кстати в самом драйвере 7сегментника который ссылается на таймер0 , не катит деление результата таймера0. Проще задействовать другой таймер, не правя все тайминги по всей системе куда привязан этот сранный таймер0.
Щас делаю драйвер для стандартных 12пиновых индикаторов с общим анодом и общим катодом, с яркостью и тд))).
Фотки чуть позже скину.
By Admin
Короче, обычный 12 пин 4 бита 7 сегментов дисплейчик.
С общим анодом проблем не возникло, работает отлично.
led7_drv.c
Драйвер работает - кто хочет вставляйте и все работать будет - пока для общего анода.
#include "ui/ui_api.h" #if UI_ENABLE #include "ui/ui_common.h" #include "ui/led/led7_drv.h" #include "fm_radio.h" #include "dec/decoder_phy.h" #include "music_ui.h" #include "music.h" #include "timer.h" #include "key_drv/key.h" #include "file_operate/file_op.h" //#include "play_file.h" #include "dac/dac.h" #include "rtc_setting.h" #include "sys_detect.h" #if REC_EN #include "encode/encode.h" #endif LED7_VAR led7_var; const u8 LED_NUMBER[10] = { /*0*/ (u8)(LED_A | LED_B | LED_C | LED_D | LED_E | LED_F), /*1*/ (u8)(LED_B | LED_C), /*2*/ (u8)(LED_A | LED_B | LED_D | LED_E | LED_G), /*3*/ (u8)(LED_A | LED_B | LED_C | LED_D | LED_G), /*4*/ (u8)(LED_B | LED_C | LED_F | LED_G), /*5*/ (u8)(LED_A | LED_C | LED_D | LED_F | LED_G), /*6*/ (u8)(LED_A | LED_C | LED_D | LED_E | LED_F | LED_G), /*7*/ (u8)(LED_A | LED_B | LED_C), /*8*/ (u8)(LED_A | LED_B | LED_C | LED_D | LED_E | LED_F | LED_G), /*9*/ (u8)(LED_A | LED_B | LED_C | LED_D | LED_F | LED_G), }; const u8 LED_LARGE_LETTER[26] = { 0x77,0x40,0x39,0x3f,0x79,///<ABCDE 0x71,0x40,0x76,0x06,0x40,///<FGHIJ 0x40,0x38,0x40,0x37,0x3f,///<KLMNO 0x73,0x40,0x50,0x6d,0x78,///<PQRST 0x3e,0x3e,0x40,0x76,0x40,///<UVWXY 0x40///<Z }; const u8 LED_SMALL_LETTER[26] = { 0x77,0x7c,0x58,0x5e,0x79,///<abcde 0x71,0x40,0x40,0x40,0x40,///<fghij 0x40,0x38,0x40,0x54,0x5c,///<klmno 0x73,0x67,0x50,0x40,0x78,///<pqrst 0x3e,0x3e,0x40,0x40,0x40,///<uvwxy 0x40///<z }; #if LED_7PIN_SEL == 1 const u8 led_7[36][2] = /// FOR (LSH24D17-1B-UR) { {0,1},//1A {0,2},//1B {3,0},//1C {4,0},//1D {0,3},//1E {1,0},//1F {2,0},//1G {1,2},//2A {1,3},//2B {4,1},//2C {1,5},//2D {1,4},//2E {2,1},//2F {3,1},//2G {4,3},//3A {2,4},//3B {3,4},//3C {5,0},//3D {5,2},//3E {3,2},//3F {4,2},//3G {6,5},//4A {5,6},//4B {4,5},//4C {5,3},//4D {3,5},//4E {5,4},//4F {4,6},//4G {0,5},//LED_PLAY {2,5},//LED_PAUSE {5,1},//LED_USB {0,4},//LED_SD {2,3},//LED_2POINT {6,2},//LED_AUX {6,4},//. {2,6},//LED_MHz }; #endif // LED_7PIN_SEL #if 1 const u8 led_7[36][2] = { {4,0},//1A {5,0},//1B {6,0},//1C {7,0},//1D {8,0},//1E {9,0},//1F {10,0},//1G {4,1},//2A {5,1},//2B {6,1},//2C {7,1},//2D {8,1},//2E {9,1},//2F {10,1},//2G {4,2},//3A {5,2},//3B {6,2},//3C {7,2},//3D {8,2},//3E {9,2},//3F {10,2},//3G {4,3},//4A {5,3},//4B {6,3},//4C {7,3},//4D {8,3},//4E {9,3},//4F {10,3},//4G {0,0},//LED_PLAY {0,0},//LED_PAUSE {0,0},//LED_USB {0,0},//SD {11,1},//: {0,0},//MHz {11,2},//. {0,0},//MP3 }; #endif const u8 bit_table[8] = { 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, }; const u8 playmodestr[][5] = { " ALL", " dev", "Fold", " ONE", " rAn", }; const u8 menu_string[][5] = { " HI ", "Lod ", "bLUE", " PC ", " UP ", " dN ", " AUX", "-AL-", }; const u8 other_string[][5]= { "Eq ", "V ", "P ", " NOP", " rec", " Sd ", }; /*----------------------------------------------------------------------------*/ /**@brief Music模式 设备显示 @param void @return void @author Change.tsai @note void led7_show_dev(void) */ /*----------------------------------------------------------------------------*/ void led7_show_dev(u8 dev) { // /*Music Device type*/ /* MUSIC_DIS_VAR *music_var; */ /* music_var = (MUSIC_DIS_VAR*)UI_var.ui_buf_adr; */ /* if(music_var) */ { if((dev == SD0_DEVICE)||(dev == SD1_DEVICE)) { LED_STATUS |= LED_SD; /// led7_show_string((u8 *)other_string[]); } else if(dev == USB_DEVICE) { LED_STATUS |= LED_USB; } } } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 状态位缓存清除函数 @param void @return void @author Change.tsai @note void led7_clear_icon(void) */ /*----------------------------------------------------------------------------*/ void led7_clear_icon(void) { led7_var.bFlashChar = 0; led7_var.bFlashIcon = 0; led7_var.bShowBuff[4] = 0; } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 显示坐标设置 @param x:显示横坐标 @return void @author Change.tsai @note void led7_setX(u8 X) */ /*----------------------------------------------------------------------------*/ void led7_setX(u8 X) { led7_var.bCoordinateX = X; } /*----------------------------------------------------------------------------*/ /**@brief LED 清屏函数 @param void @return void @author Change.tsai @note void led7_show_null(void) */ /*----------------------------------------------------------------------------*/ void led7_show_null(void) { led7_clear_icon(); led7_var.bShowBuff[0] = 0; led7_var.bShowBuff[1] = 0; led7_var.bShowBuff[2] = 0; led7_var.bShowBuff[3] = 0; } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 扫描函数 @param void @return void @author Change.tsai @note void led7_init(void) */ /*----------------------------------------------------------------------------*/ void led7_init(void) { led7_clear(); s32 ret; ret = timer_reg_isr_fun(timer2_hl,0,led7_scan,NULL); if(ret != TIMER_NO_ERR) { printf("led7_scan err = %x\n",ret); } } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 单个字符显示函数 @param chardata:显示字符 @return void @author Change.tsai @note void led7_show_char(u8 chardata) */ /*----------------------------------------------------------------------------*/ void led7_show_char(u8 chardata) { //必须保证传入的参数符合范围,程序不作判断 //if ((chardata < ' ') || (chardata > '~') || (led7_var.bCoordinateX > 4)) //{ // return; //} if ((chardata >= '0') && (chardata <= '9')) { led7_var.bShowBuff[led7_var.bCoordinateX++] = LED_NUMBER[chardata - '0']; } else if ((chardata >= 'a') && (chardata <= 'z')) { led7_var.bShowBuff[led7_var.bCoordinateX++] = LED_SMALL_LETTER[chardata - 'a']; } else if ((chardata >= 'A') && (chardata <= 'Z')) { led7_var.bShowBuff[led7_var.bCoordinateX++] = LED_LARGE_LETTER[chardata - 'A']; } else if (chardata == ':') { LED_STATUS |= LED_2POINT; } else if (chardata == ' ') { led7_var.bShowBuff[led7_var.bCoordinateX++] = 0; } else //if (chardata == '-') //不可显示 { led7_var.bShowBuff[led7_var.bCoordinateX++] = BIT(6); } } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 字符串显示函数 @param *str:字符串的指针 offset:显示偏移量 @return void @author Change.tsai @note void led7_show_string(u8 *str) */ /*----------------------------------------------------------------------------*/ void led7_show_string(u8 *str) { while (0 != *str) { led7_show_char(*str++); } } /*----------------------------------------------------------------------------*/ /** @brief: @param: @return: @author: @note: */ /*----------------------------------------------------------------------------*/ void led7_show_string_menu(u8 menu) { if(menu >= (sizeof(menu_string)/5)) { printf("*strid(%d) is over!\n",menu); } else { led7_show_string((u8 *)menu_string[menu]); } } void led7_show_linin_main(u8 menu) { led7_show_string_menu(menu); #if REC_EN RECORD_OP_API * rec_var_p; REC_CTL * rec_ctl_var; rec_var_p = *(RECORD_OP_API **)UI_var.ui_buf_adr; if((UI_var.ui_buf_adr)&&(rec_var_p)) { rec_ctl_var = rec_var_p->rec_ctl; LED_STATUS &= ~(LED_PLAY | LED_PAUSE); LED_STATUS &= ~(LED_SD|LED_USB); if((menu == MENU_AUX_MAIN)||(menu == MENU_BT_MAIN)) { if((rec_ctl_var)&&(ENC_STOP !=rec_ctl_var->enable)) { if (ENC_STAR == rec_ctl_var->enable) LED_STATUS |= LED_PLAY; else if(ENC_PAUS == rec_ctl_var->enable) LED_STATUS |= LED_PAUSE; led7_show_dev(rec_ctl_var->curr_device); } } } #endif } /*----------------------------------------------------------------------------*/ /**@brief Music 播放文件号显示函数 @param void @return void @author Change.tsai @note void led7_show_filenumber(void) */ /*----------------------------------------------------------------------------*/ void led7_show_filenumber(void) { MUSIC_DIS_VAR *music_var; music_var = (MUSIC_DIS_VAR*)UI_var.ui_buf_adr; if(music_var) { /*Music File Number info*/ //printf("ui_music.ui_play_file_num = %u----\n",ui_music.ui_play_file_num); itoa4(music_var->ui_curr_file); led7_show_string((u8 *)bcd_number); } } /*----------------------------------------------------------------------------*/ /**@brief 红外输入文件号显示函数 @param void @return void @author Change.tsai @note void led7_show_IR_number(void) */ /*----------------------------------------------------------------------------*/ void led7_show_IR_number(s32 arg) { u16 ir_num; ir_num = (u16)(arg&0xffff); /*IR File Number info*/ itoa4(ir_num); led7_show_string((u8 *)bcd_number); } /*----------------------------------------------------------------------------*/ /**@brief Music模式 显示界面 @param void @return void @author Change.tsai @note void led7_show_music_main(void) */ /*----------------------------------------------------------------------------*/ void led7_show_music_main(void) { //led7_show_string((u8*)"MUSI"); u32 play_time; MUSIC_DIS_VAR *music_var; music_var = (MUSIC_DIS_VAR*)UI_var.ui_buf_adr; if(music_var) { /*Music Play time info*/ play_time = music_var->play_time; itoa2(play_time/60); led7_show_string((u8 *)bcd_number); itoa2(play_time%60); led7_show_string((u8 *)bcd_number); /* led7_show_dev(); */ led7_show_dev(music_var->ui_curr_device); LED_STATUS |= LED_2POINT; ///LED_2POINT | LED_MP3; if (*music_var->ui_curr_statu == DECODER_PLAY) { LED_STATUS |= LED_PLAY; LED_STATUS &= ~LED_PAUSE; led7_var.bFlashIcon |= LED_2POINT; } else if (*music_var->ui_curr_statu == DECODER_PAUSE) { LED_STATUS &= ~LED_PLAY; LED_STATUS |= LED_PAUSE; } // // if(mute) // { // led7_var.bFlashIcon |= LED_MP3; // led7_var.bFlashChar = 0x0f; // } // else // { // led7_var.bFlashIcon &= ~LED_MP3; // led7_var.bFlashChar = 0x00; // } } } void led7_show_bt_main(void) { static u8 cnt = 0 ; if(btstatus == 1) { led7_show_string((u8 *)" bt "); } else { switch(cnt) { case 0: led7_show_string((u8 *)" bt "); break ; case 1: led7_show_string((u8 *)" bt"); break ; case 2: led7_show_string((u8 *)" bt "); break ; case 3: led7_show_string((u8 *)"bt "); break ; } cnt ++ ; if(cnt > 3) { cnt =0 ; } } } /*----------------------------------------------------------------------------*/ /**@brief EQ显示函数 @param void @return void @author Change.tsai @note void led7_show_eq(s32 arg) */ /*----------------------------------------------------------------------------*/ void led7_show_eq(s32 arg) { u8 eq_cnt; eq_cnt = (u8)arg; led7_show_string((u8 *)other_string[0]); led7_show_char(eq_cnt%10 + '0'); } /*----------------------------------------------------------------------------*/ /**@brief 循环模式显示函数 @param void @return void @author Change.tsai @note void led7_show_playmode(s32 arg) */ /*----------------------------------------------------------------------------*/ void led7_show_playmode(s32 arg) { u8 pm_cnt; pm_cnt = (u8)arg; led7_show_string((u8 *)&playmodestr[pm_cnt-FOP_MAX-1][0]); } /*----------------------------------------------------------------------------*/ /**@brief 音量显示函数 @param void @return void @author Change.tsai @note void led7_show_volume(s32 vol) */ /*----------------------------------------------------------------------------*/ void led7_show_volume(s32 vol) { u8 tmp_vol; tmp_vol = (u8)vol; led7_show_string((u8 *)other_string[1]); itoa2(tmp_vol); led7_show_string((u8 *)bcd_number); } /*----------------------------------------------------------------------------*/ /**@brief FM 模式主界面 @param void @return void @author Change.tsai @note void led7_show_fm_main(void) */ /*----------------------------------------------------------------------------*/ void led7_show_fm_main(void) { /*FM - Frequency*/ #if 1 FM_MODE_VAR * fm_var; if(!UI_var.ui_buf_adr) return; fm_var = *(FM_MODE_VAR **)UI_var.ui_buf_adr; if(fm_var) { itoa4(fm_var->wFreq); if (fm_var->wFreq <= 999) bcd_number[0] = ' '; led7_show_string((u8 *)bcd_number); LED_STATUS |= LED_MHZ; #if REC_EN RECORD_OP_API * rec_var_p; REC_CTL * rec_ctl_var; if((fm_var->fm_rec_op)&&(*(RECORD_OP_API **)(fm_var->fm_rec_op))) { rec_var_p = *(RECORD_OP_API **)fm_var->fm_rec_op; rec_ctl_var = rec_var_p->rec_ctl; if((rec_ctl_var)&&(ENC_STOP != rec_ctl_var->enable)) { LED_STATUS &= ~(LED_PLAY | LED_PAUSE); LED_STATUS &= ~(LED_SD|LED_USB); /* led7_show_dev(); */ led7_show_dev(rec_ctl_var->curr_device); if (ENC_STAR == rec_ctl_var->enable) LED_STATUS |= LED_PLAY; else if(ENC_PAUS == rec_ctl_var->enable) LED_STATUS |= LED_PAUSE; } } #endif } #endif // 0 } /*----------------------------------------------------------------------------*/ /**@brief FM 模式主界面 @param void @return void @author Change.tsai @note void led7_show_fm_station(void) */ /*----------------------------------------------------------------------------*/ void led7_show_fm_station(void) { // /*FM - Station*/ #if 1 FM_MODE_VAR * fm_var; if(!UI_var.ui_buf_adr) return; fm_var = *(FM_MODE_VAR **)UI_var.ui_buf_adr; if(fm_var) { led7_show_string((u8 *)other_string[2]); itoa2(fm_var->wFreChannel); led7_show_string((u8 *)bcd_number); } #endif } #if 1 //RTC_CLK_EN /*----------------------------------------------------------------------------*/ /**@brief RTC 显示界面 @param void @return void @author Change.tsai @note void led7_show_RTC_main(void) */ /*----------------------------------------------------------------------------*/ void led7_show_RTC_main(void) { RTC_SETTING * rtc_var; RTC_TIME *ui_time; rtc_var = (RTC_SETTING *)UI_var.ui_buf_adr; if(rtc_var) { ui_time = rtc_var->calendar_set.curr_rtc_time; itoa2(ui_time->bHour); led7_show_string((u8 *)bcd_number); itoa2(ui_time->bMin); led7_show_string((u8 *)bcd_number); led7_var.bFlashIcon |= LED_2POINT; LED_STATUS |= LED_2POINT; if(rtc_var->rtc_set_mode == RTC_SET_MODE) { if(rtc_var->calendar_set.coordinate == COORDINATE_MIN) led7_var.bFlashChar = BIT(0)|BIT(1); else led7_var.bFlashChar = BIT(2)|BIT(3); } else led7_var.bFlashChar = 0; } } /*----------------------------------------------------------------------------*/ /**@brief Alarm 显示界面 @param void @return void @author Change.tsai @note void led7_show_alarm(void) */ /*----------------------------------------------------------------------------*/ #if 1 //RTC_ALM_EN void led7_show_alarm(void) { RTC_SETTING * rtc_var; RTC_TIME *ui_time; rtc_var = (RTC_SETTING *)UI_var.ui_buf_adr; if(rtc_var) { puts("led7_show_alarm\n"); ui_time = rtc_var->alarm_set.curr_alm_time; itoa2(ui_time->bHour); led7_show_string((u8 *)bcd_number); itoa2(ui_time->bMin); led7_show_string((u8 *)bcd_number); LED_STATUS |= LED_2POINT; if(rtc_var->rtc_set_mode == ALM_SET_MODE) { if(rtc_var->alarm_set.coordinate == COORDINATE_MIN) led7_var.bFlashChar = BIT(0)|BIT(1); else led7_var.bFlashChar = BIT(2)|BIT(3); } /*Alarm info - Switch On/Off*/ if (rtc_var->alarm_set.alarm_sw) { LED_STATUS |= LED_PLAY; } else { LED_STATUS |= LED_PAUSE; } } } #endif #endif #if REC_EN /*----------------------------------------------------------------------------*/ /**@brief REC 显示界面 @param void @return void @note void led7_show_rec_start(void) */ /*----------------------------------------------------------------------------*/ static void led7_show_rec_start(REC_CTL * rec_ctl_var) { u32 rec_time; // LED_STATUS &= ~(LED_PLAY | LED_PAUSE); // if(rec_ctl_var) { rec_time = rec_ctl_var->file_info.enc_time_cnt; itoa2(rec_time/60); led7_show_string((u8 *)bcd_number); itoa2(rec_time%60); led7_show_string((u8 *)bcd_number); /* led7_show_dev(); */ led7_show_dev(rec_ctl_var->curr_device); LED_STATUS |= LED_2POINT; //| LED_PLAY; if (ENC_STAR == rec_ctl_var->enable) LED_STATUS |= LED_PLAY; else if (ENC_PAUS == rec_ctl_var->enable) LED_STATUS |= LED_PAUSE; } } /*----------------------------------------------------------------------------*/ /**@brief REC 显示界面 @param void @return void @note void led7_show_rec_main(void) */ /*----------------------------------------------------------------------------*/ void led7_show_rec_main(void) { RECORD_OP_API * rec_var_p; REC_CTL * rec_ctl_var; LED_STATUS &= ~(LED_PLAY | LED_PAUSE); LED_STATUS &= ~LED_2POINT; //| LED_PLAY; LED_STATUS &= ~(LED_SD|LED_USB); if(UI_var.ui_buf_adr) { rec_var_p = *(RECORD_OP_API **)UI_var.ui_buf_adr; if(rec_var_p) { rec_ctl_var = rec_var_p->rec_ctl; if((rec_ctl_var)&&(ENC_STOP != rec_ctl_var->enable)) { led7_show_rec_start(rec_ctl_var); return; } } } led7_show_string((u8 *)other_string[4]); } #endif void LED_drive7(void) { u8 k,i,j,temp; k=0; led7_var.bShowBuff1[0]=0; led7_var.bShowBuff1[1]=0; led7_var.bShowBuff1[2]=0; led7_var.bShowBuff1[3]=0; led7_var.bShowBuff1[4]=0; led7_var.bShowBuff1[5]=0; led7_var.bShowBuff1[6]=0; led7_var.bShowBuff1[7]=0; led7_var.bShowBuff1[8]=0; led7_var.bShowBuff1[9]=0; led7_var.bShowBuff1[10]=0; led7_var.bShowBuff1[11]=0; for(i=0;i<5;i++) { temp = led7_var.bShowBuff[i]; if (get_sys_halfsec()) { if ((led7_var.bFlashIcon) && (i == 4)) { temp = LED_STATUS & (~led7_var.bFlashIcon); } else if (led7_var.bFlashChar & BIT(i)) { temp = 0x0; } } for(j=0;j<7;j++) { if(temp & bit_table[j]) { led7_var.bShowBuff1[led_7[k][0]] |= bit_table[led_7[k][1]]; } k++; } if(j == 7) { if(temp & bit_table[j]) led7_var.bShowBuff[led_7[35][0]] |= bit_table[led_7[35][1]]; } } } /*----------------------------------------------------------------------------*/ /**@brief LED清屏函数 @param x:显示横坐标 @return void @author Change.tsai @note void led7_clear(void) */ /*----------------------------------------------------------------------------*/ void led7_clear(void) { LEDN_PORT0_OUT &= ~(BIT(LEDN_S0_BIT)); LEDN_PORT0_DIR |= (BIT(LEDN_S0_BIT)); LEDN_PORT0_PU &= ~(BIT(LEDN_S0_BIT)); LEDN_PORT0_PD &= ~(BIT(LEDN_S0_BIT)); LEDN_PORT0_HD &= ~(BIT(LEDN_S0_BIT)); LEDN_PORT1_OUT &= ~(BIT(LEDN_S1_BIT)); LEDN_PORT1_DIR |= (BIT(LEDN_S1_BIT)); LEDN_PORT1_PU &= ~(BIT(LEDN_S1_BIT)); LEDN_PORT1_PD &= ~(BIT(LEDN_S1_BIT)); LEDN_PORT1_HD &= ~(BIT(LEDN_S1_BIT)); LEDN_PORT2_OUT &= ~(BIT(LEDN_S2_BIT)); LEDN_PORT2_DIR |= (BIT(LEDN_S2_BIT)); LEDN_PORT2_PU &= ~(BIT(LEDN_S2_BIT)); LEDN_PORT2_PD &= ~(BIT(LEDN_S2_BIT)); LEDN_PORT2_HD &= ~(BIT(LEDN_S2_BIT)); LEDN_PORT3_OUT &= ~(BIT(LEDN_S3_BIT)); LEDN_PORT3_DIR |= (BIT(LEDN_S3_BIT)); LEDN_PORT3_PU &= ~(BIT(LEDN_S3_BIT)); LEDN_PORT3_PD &= ~(BIT(LEDN_S3_BIT)); LEDN_PORT3_HD &= ~(BIT(LEDN_S3_BIT)); LEDN_PORT4_OUT &= ~(BIT(LEDN_S4_BIT)); LEDN_PORT4_DIR |= (BIT(LEDN_S4_BIT)); LEDN_PORT4_PU &= ~(BIT(LEDN_S4_BIT)); LEDN_PORT4_PD &= ~(BIT(LEDN_S4_BIT)); LEDN_PORT4_HD &= ~(BIT(LEDN_S4_BIT)); LEDN_PORT5_OUT &= ~(BIT(LEDN_S5_BIT)); LEDN_PORT5_DIR |= (BIT(LEDN_S5_BIT)); LEDN_PORT5_PU &= ~(BIT(LEDN_S5_BIT)); LEDN_PORT5_PD &= ~(BIT(LEDN_S5_BIT)); LEDN_PORT5_HD &= ~(BIT(LEDN_S5_BIT)); LEDN_PORT6_OUT &= ~(BIT(LEDN_S6_BIT)); LEDN_PORT6_DIR |= (BIT(LEDN_S6_BIT)); LEDN_PORT6_PU &= ~(BIT(LEDN_S6_BIT)); LEDN_PORT6_PD &= ~(BIT(LEDN_S6_BIT)); LEDN_PORT6_HD &= ~(BIT(LEDN_S6_BIT)); LEDN_PORT7_OUT &= ~(BIT(LEDN_S7_BIT)); LEDN_PORT7_DIR |= (BIT(LEDN_S7_BIT)); LEDN_PORT7_PU &= ~(BIT(LEDN_S7_BIT)); LEDN_PORT7_PD &= ~(BIT(LEDN_S7_BIT)); LEDN_PORT7_HD &= ~(BIT(LEDN_S7_BIT)); LEDN_PORT8_OUT &= ~(BIT(LEDN_S8_BIT)); LEDN_PORT8_DIR |= (BIT(LEDN_S8_BIT)); LEDN_PORT8_PU &= ~(BIT(LEDN_S8_BIT)); LEDN_PORT8_PD &= ~(BIT(LEDN_S8_BIT)); LEDN_PORT8_HD &= ~(BIT(LEDN_S8_BIT)); LEDN_PORT9_OUT &= ~(BIT(LEDN_S9_BIT)); LEDN_PORT9_DIR |= (BIT(LEDN_S9_BIT)); LEDN_PORT9_PU &= ~(BIT(LEDN_S9_BIT)); LEDN_PORT9_PD &= ~(BIT(LEDN_S9_BIT)); LEDN_PORT9_HD &= ~(BIT(LEDN_S9_BIT)); LEDN_PORT10_OUT &= ~(BIT(LEDN_S10_BIT)); LEDN_PORT10_DIR |= (BIT(LEDN_S10_BIT)); LEDN_PORT10_PU &= ~(BIT(LEDN_S10_BIT)); LEDN_PORT10_PD &= ~(BIT(LEDN_S10_BIT)); LEDN_PORT10_HD &= ~(BIT(LEDN_S10_BIT)); LEDN_PORT11_OUT &= ~(BIT(LEDN_S11_BIT)); LEDN_PORT11_DIR |= (BIT(LEDN_S11_BIT)); LEDN_PORT11_PU &= ~(BIT(LEDN_S11_BIT)); LEDN_PORT11_PD &= ~(BIT(LEDN_S11_BIT)); LEDN_PORT11_HD &= ~(BIT(LEDN_S11_BIT)); } /*----------------------------------------------------------------------------*/ /**@brief LED扫描函数 @param void @return void @author Change.tsai @note void led7_scan(void *param) */ /*----------------------------------------------------------------------------*/ void led7_scan(void *param) { static u8 cnt; u8 seg; LED_drive7(); seg = led7_var.bShowBuff1[cnt]; led7_clear(); switch(cnt) { case 0: LEDN_PORT0_OUT |= BIT(LEDN_S0_BIT); LEDN_PORT0_HD |= BIT(LEDN_S0_BIT); LEDN_PORT0_DIR &= ~BIT(LEDN_S0_BIT); break; case 1: LEDN_PORT1_OUT |= BIT(LEDN_S1_BIT); LEDN_PORT1_HD |= BIT(LEDN_S1_BIT); LEDN_PORT1_DIR &= ~BIT(LEDN_S1_BIT); break; case 2: LEDN_PORT2_OUT |= BIT(LEDN_S2_BIT); LEDN_PORT2_HD |= BIT(LEDN_S2_BIT); LEDN_PORT2_DIR &= ~BIT(LEDN_S2_BIT); break; case 3: LEDN_PORT3_OUT |= BIT(LEDN_S3_BIT); LEDN_PORT3_HD |= BIT(LEDN_S3_BIT); LEDN_PORT3_DIR &= ~BIT(LEDN_S3_BIT); break; case 4: LEDN_PORT4_OUT |= BIT(LEDN_S4_BIT); LEDN_PORT4_HD |= BIT(LEDN_S4_BIT); LEDN_PORT4_DIR &= ~BIT(LEDN_S4_BIT); break; case 5: LEDN_PORT5_OUT |= BIT(LEDN_S5_BIT); LEDN_PORT5_HD |= BIT(LEDN_S5_BIT); LEDN_PORT5_DIR &= ~BIT(LEDN_S5_BIT); break; case 6: LEDN_PORT6_OUT |= BIT(LEDN_S6_BIT); LEDN_PORT6_HD |= BIT(LEDN_S6_BIT); LEDN_PORT6_DIR &= ~BIT(LEDN_S6_BIT); break; case 7: LEDN_PORT7_OUT |= BIT(LEDN_S7_BIT); LEDN_PORT7_HD |= BIT(LEDN_S7_BIT); LEDN_PORT7_DIR &= ~BIT(LEDN_S7_BIT); break; case 8: LEDN_PORT8_OUT |= BIT(LEDN_S8_BIT); LEDN_PORT8_HD |= BIT(LEDN_S8_BIT); LEDN_PORT8_DIR &= ~BIT(LEDN_S8_BIT); break; case 9: LEDN_PORT9_OUT |= BIT(LEDN_S9_BIT); LEDN_PORT9_HD |= BIT(LEDN_S9_BIT); LEDN_PORT9_DIR &= ~BIT(LEDN_S9_BIT); break; case 10: LEDN_PORT10_OUT |= BIT(LEDN_S10_BIT); LEDN_PORT10_HD |= BIT(LEDN_S10_BIT); LEDN_PORT10_DIR &= ~BIT(LEDN_S10_BIT); break; case 11: LEDN_PORT11_OUT |= BIT(LEDN_S11_BIT); LEDN_PORT11_HD |= BIT(LEDN_S11_BIT); LEDN_PORT11_DIR &= ~BIT(LEDN_S11_BIT); break; default : break; } if(seg & BIT(0)) { LEDN_PORT0_OUT &= ~BIT(LEDN_S0_BIT); LEDN_PORT0_HD |= BIT(LEDN_S0_BIT); LEDN_PORT0_DIR &= ~BIT(LEDN_S0_BIT); } if(seg & BIT(1)) { LEDN_PORT1_OUT &= ~BIT(LEDN_S1_BIT); LEDN_PORT1_HD |= BIT(LEDN_S1_BIT); LEDN_PORT1_DIR &= ~BIT(LEDN_S1_BIT); } if(seg & BIT(2)) { LEDN_PORT2_OUT &= ~BIT(LEDN_S2_BIT); LEDN_PORT2_HD |= BIT(LEDN_S2_BIT); LEDN_PORT2_DIR &= ~BIT(LEDN_S2_BIT); } if(seg & BIT(3)) { LEDN_PORT3_OUT &= ~BIT(LEDN_S3_BIT); LEDN_PORT3_HD |= BIT(LEDN_S3_BIT); LEDN_PORT3_DIR &= ~BIT(LEDN_S3_BIT); } if(seg & BIT(4)) { LEDN_PORT4_OUT &= ~BIT(LEDN_S4_BIT); LEDN_PORT4_HD |= BIT(LEDN_S4_BIT); LEDN_PORT4_DIR &= ~BIT(LEDN_S4_BIT); } if(seg & BIT(5)) { LEDN_PORT5_OUT &= ~BIT(LEDN_S5_BIT); LEDN_PORT5_HD |= BIT(LEDN_S5_BIT); LEDN_PORT5_DIR &= ~BIT(LEDN_S5_BIT); } if(seg & BIT(6)) { LEDN_PORT6_OUT &= ~BIT(LEDN_S6_BIT); LEDN_PORT6_HD |= BIT(LEDN_S6_BIT); LEDN_PORT6_DIR &= ~BIT(LEDN_S6_BIT); } if(seg & BIT(7)) { LEDN_PORT7_OUT &= ~BIT(LEDN_S7_BIT); LEDN_PORT7_HD |= BIT(LEDN_S7_BIT); LEDN_PORT7_DIR &= ~BIT(LEDN_S7_BIT); } if(seg & BIT(8)) { LEDN_PORT8_OUT &= ~BIT(LEDN_S8_BIT); LEDN_PORT8_HD |= BIT(LEDN_S8_BIT); LEDN_PORT8_DIR &= ~BIT(LEDN_S8_BIT); } if(seg & BIT(9)) { LEDN_PORT9_OUT &= ~BIT(LEDN_S9_BIT); LEDN_PORT9_HD |= BIT(LEDN_S9_BIT); LEDN_PORT9_DIR &= ~BIT(LEDN_S9_BIT); } if(seg & BIT(10)) { LEDN_PORT10_OUT &= ~BIT(LEDN_S10_BIT); LEDN_PORT10_HD |= BIT(LEDN_S10_BIT); LEDN_PORT10_DIR &= ~BIT(LEDN_S10_BIT); } if(seg & BIT(11)) { LEDN_PORT11_OUT &= ~BIT(LEDN_S11_BIT); LEDN_PORT11_HD |= BIT(LEDN_S11_BIT); LEDN_PORT11_DIR &= ~BIT(LEDN_S11_BIT); } cnt = (cnt >= 12) ? 0 : cnt+1; } #endif
led7_drv.h
#ifndef _LED7_DRV_H_ #define _LED7_DRV_H_ #include "includes.h" typedef struct _led7_VAR { u8 bCoordinateX; u8 bFlashChar; u8 bFlashIcon; u8 bShowBuff[5]; u8 bBrightness; u8 bShowBuff1[9]; }LED7_VAR; //void set_LED_fade_out(void); //void set_LED_all_on(void); void led7_init(void); void led7_scan(void *param); void led7_clear_icon(void); void led7_show_char(u8 chardata); void led7_show_number(u8 number); void led7_show_Hi(void); ///void led7_show_dev(void); void led7_show_music_main(void); void led7_show_RTC_main(void); void led7_show_filenumber(void); void led7_show_volume(s32 vol); void led7_show_fm_main(void); void led7_show_IR_number(s32); void led7_show_pc_main(void); void led7_show_pc_vol_up(void); void led7_show_pc_vol_down(void); void led7_show_aux_main(void); void led7_show_eq(s32 arg); void led7_show_playmode(s32 arg); void led7_show_pause(void); void led7_show_fm_station(void); void led7_show_waiting(void); void led7_show_alarm(void); //void led7_show_nop(void); void led7_show_rec_main(void); void led7_show_linin_main(u8 menu); void led7_clear(void); void led7_show_string_menu(u8 menu); void led7_setX(u8 X); void led7_show_bt_main(void); #define LED_7PIN_SEL 0 #define LED_12PIN_SEL 1 #define LED_12PIN_CA_SEL 1 #define LED_12PIN_CC_SEL 0 #define LED_STATUS led7_var.bShowBuff[4] #define LED_A BIT(0) #define LED_B BIT(1) #define LED_C BIT(2) #define LED_D BIT(3) #define LED_E BIT(4) #define LED_F BIT(5) #define LED_G BIT(6) #define LED_H BIT(12) //for LED0 #define LED_PLAY LED_A #define LED_PAUSE LED_B #define LED_USB LED_C #define LED_SD LED_D #define LED_2POINT LED_E #define LED_MHZ LED_F #define LED_DOT LED_G #define LED_MP3 LED_H #if LED_7PIN_SEL #define LEDN_PORT0_OUT JL_PORTC->OUT #define LEDN_PORT0_HD JL_PORTC->HD #define LEDN_PORT0_DIR JL_PORTC->DIR #define LEDN_PORT0_PD JL_PORTC->PD #define LEDN_PORT0_PU JL_PORTC->PU #define LEDN_PORT1_OUT JL_PORTA->OUT #define LEDN_PORT1_HD JL_PORTA->HD #define LEDN_PORT1_DIR JL_PORTA->DIR #define LEDN_PORT1_PD JL_PORTA->PD #define LEDN_PORT1_PU JL_PORTA->PU #define LEDN_PORT2_OUT JL_PORTA->OUT #define LEDN_PORT2_HD JL_PORTA->HD #define LEDN_PORT2_DIR JL_PORTA->DIR #define LEDN_PORT2_PD JL_PORTA->PD #define LEDN_PORT2_PU JL_PORTA->PU #define LEDN_PORT3_OUT JL_PORTC->OUT #define LEDN_PORT3_HD JL_PORTC->HD #define LEDN_PORT3_DIR JL_PORTC->DIR #define LEDN_PORT3_PD JL_PORTC->PD #define LEDN_PORT3_PU JL_PORTC->PU #define LEDN_PORT4_OUT JL_PORTC->OUT #define LEDN_PORT4_HD JL_PORTC->HD #define LEDN_PORT4_DIR JL_PORTC->DIR #define LEDN_PORT4_PD JL_PORTC->PD #define LEDN_PORT4_PU JL_PORTC->PU #define LEDN_PORT5_OUT JL_PORTC->OUT #define LEDN_PORT5_HD JL_PORTC->HD #define LEDN_PORT5_DIR JL_PORTC->DIR #define LEDN_PORT5_PD JL_PORTC->PD #define LEDN_PORT5_PU JL_PORTC->PU #define LEDN_PORT6_OUT JL_PORTC->OUT #define LEDN_PORT6_HD JL_PORTC->HD #define LEDN_PORT6_DIR JL_PORTC->DIR #define LEDN_PORT6_PD JL_PORTC->PD #define LEDN_PORT6_PU JL_PORTC->PU #define LEDN_S0_BIT 0 #define LEDN_S1_BIT 14 #define LEDN_S2_BIT 15 #define LEDN_S3_BIT 1 #define LEDN_S4_BIT 2 #define LEDN_S5_BIT 3 #define LEDN_S6_BIT 4 #endif // LED_7PIN_SEL #if LED_12PIN_SEL //********** BIT0=PORT0 ***************// #define LEDN_PORT0_OUT JL_PORTC->OUT #define LEDN_PORT0_HD JL_PORTC->HD #define LEDN_PORT0_DIR JL_PORTC->DIR #define LEDN_PORT0_PD JL_PORTC->PD #define LEDN_PORT0_PU JL_PORTC->PU //*************************************// //********** BIT1=PORT1 ***************// #define LEDN_PORT1_OUT JL_PORTC->OUT #define LEDN_PORT1_HD JL_PORTC->HD #define LEDN_PORT1_DIR JL_PORTC->DIR #define LEDN_PORT1_PD JL_PORTC->PD #define LEDN_PORT1_PU JL_PORTC->PU //*************************************// //********** BIT2=PORT2 ***************// #define LEDN_PORT2_OUT JL_PORTC->OUT #define LEDN_PORT2_HD JL_PORTC->HD #define LEDN_PORT2_DIR JL_PORTC->DIR #define LEDN_PORT2_PD JL_PORTC->PD #define LEDN_PORT2_PU JL_PORTC->PU //*************************************// //********** BIT3=PORT3 ***************// #define LEDN_PORT3_OUT JL_PORTC->OUT #define LEDN_PORT3_HD JL_PORTC->HD #define LEDN_PORT3_DIR JL_PORTC->DIR #define LEDN_PORT3_PD JL_PORTC->PD #define LEDN_PORT3_PU JL_PORTC->PU //*************************************// //********** BIT4=PORT4 ***************// #define LEDN_PORT4_OUT JL_PORTC->OUT #define LEDN_PORT4_HD JL_PORTC->HD #define LEDN_PORT4_DIR JL_PORTC->DIR #define LEDN_PORT4_PD JL_PORTC->PD #define LEDN_PORT4_PU JL_PORTC->PU //*************************************// //********** BIT5=PORT5 ***************// #define LEDN_PORT5_OUT JL_PORTA->OUT #define LEDN_PORT5_HD JL_PORTA->HD #define LEDN_PORT5_DIR JL_PORTA->DIR #define LEDN_PORT5_PD JL_PORTA->PD #define LEDN_PORT5_PU JL_PORTA->PU //*************************************// //********** BIT6=PORT6 ***************// #define LEDN_PORT6_OUT JL_PORTA->OUT #define LEDN_PORT6_HD JL_PORTA->HD #define LEDN_PORT6_DIR JL_PORTA->DIR #define LEDN_PORT6_PD JL_PORTA->PD #define LEDN_PORT6_PU JL_PORTA->PU //*************************************// //********** BIT7=PORT7 ***************// #define LEDN_PORT7_OUT JL_PORTC->OUT #define LEDN_PORT7_HD JL_PORTC->HD #define LEDN_PORT7_DIR JL_PORTC->DIR #define LEDN_PORT7_PD JL_PORTC->PD #define LEDN_PORT7_PU JL_PORTC->PU //*************************************// //********** BIT8=PORT8 ***************// #define LEDN_PORT8_OUT JL_PORTA->OUT #define LEDN_PORT8_HD JL_PORTA->HD #define LEDN_PORT8_DIR JL_PORTA->DIR #define LEDN_PORT8_PD JL_PORTA->PD #define LEDN_PORT8_PU JL_PORTA->PU //*************************************// //********** BIT9=PORT9 ***************// #define LEDN_PORT9_OUT JL_PORTA->OUT #define LEDN_PORT9_HD JL_PORTA->HD #define LEDN_PORT9_DIR JL_PORTA->DIR #define LEDN_PORT9_PD JL_PORTA->PD #define LEDN_PORT9_PU JL_PORTA->PU //*************************************// //********** BIT10=PORT10 *************// #define LEDN_PORT10_OUT JL_PORTA->OUT #define LEDN_PORT10_HD JL_PORTA->HD #define LEDN_PORT10_DIR JL_PORTA->DIR #define LEDN_PORT10_PD JL_PORTA->PD #define LEDN_PORT10_PU JL_PORTA->PU //*************************************// //********** BIT11=PORT11 *************// #define LEDN_PORT11_OUT JL_PORTA->OUT #define LEDN_PORT11_HD JL_PORTA->HD #define LEDN_PORT11_DIR JL_PORTA->DIR #define LEDN_PORT11_PD JL_PORTA->PD #define LEDN_PORT11_PU JL_PORTA->PU //*************************************// //**********SET PORTS SoC**************// #define LEDN_S0_BIT 5 #define LEDN_S1_BIT 4 #define LEDN_S2_BIT 3 #define LEDN_S3_BIT 2 #define LEDN_S4_BIT 1 #define LEDN_S5_BIT 15 #define LEDN_S6_BIT 14 #define LEDN_S7_BIT 0 #define LEDN_S8_BIT 11 #define LEDN_S9_BIT 10 #define LEDN_S10_BIT 9 #define LEDN_S11_BIT 4 /*******************************************/ #endif #endif /* _LED_H_ */
А вот с общим катодом не работает.. Казалось бы что может быть не так, просто делай обратную полярность и все, распиновка та же. Я где то туплю , но где...
By Admin
Вот для ОА работает
void LED_drive7(void) { u8 k,i,j,temp; k=0; led7_var.bShowBuff1[0]=0; led7_var.bShowBuff1[1]=0; led7_var.bShowBuff1[2]=0; led7_var.bShowBuff1[3]=0; led7_var.bShowBuff1[4]=0; led7_var.bShowBuff1[5]=0; led7_var.bShowBuff1[6]=0; led7_var.bShowBuff1[7]=0; led7_var.bShowBuff1[8]=0; led7_var.bShowBuff1[9]=0; led7_var.bShowBuff1[10]=0; led7_var.bShowBuff1[11]=0; for(i=0;i<5;i++) { temp = led7_var.bShowBuff[i]; if (get_sys_halfsec()) { if ((led7_var.bFlashIcon) && (i == 4)) { temp = LED_STATUS & (~led7_var.bFlashIcon); } else if (led7_var.bFlashChar & BIT(i)) { temp = 0x0; } } for(j=0;j<7;j++) { if(temp & bit_table[j]) { led7_var.bShowBuff1[led_7[k][0]] |= bit_table[led_7[k][1]]; } k++; } if(j == 7) { if(temp & bit_table[j]) led7_var.bShowBuff[led_7[35][0]] |= bit_table[led_7[35][1]]; } } }
А для ОК по идее просто нужно 1 и 0 местами поменять, но почему то пол дисплея тогда тупо не работает, но признаки жизни есть. Ткните носом меня куда смотреть.
Кстати, вот ОА
By Admin
Вопрос, а можно как то регулировать громкость PCM? ну тоесть еще со стороны декодера/проца который формирует I2S. А то обычно регулируют аналоговый сигнал уже после I2S кодека...
Вопрос снят.
By Admin
А для ОК по идее просто нужно 1 и 0 местами поменять, но почему то пол дисплея тогда тупо не работает, но признаки жизни есть. Ткните носом меня куда смотреть.
Наверное тут кто-то забыл сменить тип массива bShowBuff1 с u8 до u16, также как и его размер с 9 до 12 элементов.
И ещё в led7_scan поменять тип переменной seg также на u16, и заменить bit_table[n] на макрос BIT(n), или его тоже подкорректировать.
Здесь сканирование реализовано так, что на определённый пин подаётся высокий уровень, а на остальные пины подаётся низкий уровень там, где надо зажечь сегмент. Короче говоря обычный чарлиплекс.
В случае с общим анодом, в каждом элементе массива используются только биты 0-3, которые соответствуют пинам с разрядами, а на сегменты используются элементы 4-11 у массива.
В случае же с общим катодом, тут уже наоборот - первые четыре элемента используются под выводы разрядов, а биты в них уже отвечают за сегменты.
Вот тут и проблема - пинов у нас 12 но бит только 8, соответственно последние четыре сегмента теряются, ибо не вмещаются (биты 4-11).
Выходит как-то так:
Код:#ifndef _LED7_DRV_H_ #define _LED7_DRV_H_ #include "includes.h" /*====================================================================*/ #define LED_7PIN_SEL 0 #define LED_12PIN_SEL 1 #define LED_12PIN_CA_SEL 1 #define LED_12PIN_CC_SEL 0 #if LED_7PIN_SEL #define LEDN_PORT0 JL_PORTC:0 #define LEDN_PORT1 JL_PORTA:14 #define LEDN_PORT2 JL_PORTA:15 #define LEDN_PORT3 JL_PORTC:1 #define LEDN_PORT4 JL_PORTC:2 #define LEDN_PORT5 JL_PORTC:3 #define LEDN_PORT6 JL_PORTC:4 #define LEDN_PORT_COUNT 7 #endif #if LED_12PIN_SEL #define LEDN_PORT0 JL_PORTC:5 #define LEDN_PORT1 JL_PORTC:4 #define LEDN_PORT2 JL_PORTC:3 #define LEDN_PORT3 JL_PORTC:2 #define LEDN_PORT4 JL_PORTC:1 #define LEDN_PORT5 JL_PORTA:15 #define LEDN_PORT6 JL_PORTA:14 #define LEDN_PORT7 JL_PORTC:0 #define LEDN_PORT8 JL_PORTA:11 #define LEDN_PORT9 JL_PORTA:10 #define LEDN_PORT10 JL_PORTA:9 #define LEDN_PORT11 JL_PORTA:4 #define LEDN_PORT_COUNT 12 #endif /*====================================================================*/ typedef struct _led7_VAR { u8 bCoordinateX; u8 bFlashChar; u8 bFlashIcon; u8 bShowBuff[5]; u8 bBrightness; u16 bShowBuff1[LEDN_PORT_COUNT]; } LED7_VAR; #define LED_STATUS led7_var.bShowBuff[4] #define LED_A BIT(0) #define LED_B BIT(1) #define LED_C BIT(2) #define LED_D BIT(3) #define LED_E BIT(4) #define LED_F BIT(5) #define LED_G BIT(6) #define LED_H BIT(12) //for LED0 #define LED_PLAY LED_A #define LED_PAUSE LED_B #define LED_USB LED_C #define LED_SD LED_D #define LED_2POINT LED_E #define LED_MHZ LED_F #define LED_DOT LED_G #define LED_MP3 LED_H /*====================================================================*/ //void set_LED_fade_out(void); //void set_LED_all_on(void); void led7_init(void); void led7_scan(void *param); void led7_clear_icon(void); void led7_show_char(char chardata); void led7_show_number(u8 number); void led7_show_Hi(void); ///void led7_show_dev(void); void led7_show_music_main(void); void led7_show_RTC_main(void); void led7_show_filenumber(void); void led7_show_volume(s32 vol); void led7_show_fm_main(void); void led7_show_IR_number(s32); void led7_show_pc_main(void); void led7_show_pc_vol_up(void); void led7_show_pc_vol_down(void); void led7_show_aux_main(void); void led7_show_eq(s32 arg); void led7_show_playmode(s32 arg); void led7_show_pause(void); void led7_show_fm_station(void); void led7_show_waiting(void); void led7_show_alarm(void); //void led7_show_nop(void); void led7_show_rec_main(void); void led7_show_linin_main(u8 menu); void led7_clear(void); void led7_show_string_menu(u8 menu); void led7_setX(u8 X); void led7_show_bt_main(void); #endif /* _LED_H_ */
Код:#include "ui/ui_api.h" #if UI_ENABLE #include "ui/ui_common.h" #include "ui/led/led7_drv.h" #include "fm_radio.h" #include "dec/decoder_phy.h" #include "music_ui.h" #include "music.h" #include "timer.h" #include "key_drv/key.h" #include "file_operate/file_op.h" //#include "play_file.h" #include "dac/dac.h" #include "rtc_setting.h" #include "sys_detect.h" #if REC_EN #include "encode/encode.h" #endif LED7_VAR led7_var; const JL_PORT_TypeDef *led7_ports[LEDN_PORT_COUNT] = { 1 ? LEDN_PORT0, 1 ? LEDN_PORT1, 1 ? LEDN_PORT2, 1 ? LEDN_PORT3, 1 ? LEDN_PORT4, 1 ? LEDN_PORT5, 1 ? LEDN_PORT6, #if LEDN_PORT_COUNT > 7 1 ? LEDN_PORT7, 1 ? LEDN_PORT8, 1 ? LEDN_PORT9, 1 ? LEDN_PORT10, 1 ? LEDN_PORT11, #endif }; const char led7_port_bits[LEDN_PORT_COUNT] = { 0 ? LEDN_PORT0, 0 ? LEDN_PORT1, 0 ? LEDN_PORT2, 0 ? LEDN_PORT3, 0 ? LEDN_PORT4, 0 ? LEDN_PORT5, 0 ? LEDN_PORT6, #if LEDN_PORT_COUNT > 7 0 ? LEDN_PORT7, 0 ? LEDN_PORT8, 0 ? LEDN_PORT9, 0 ? LEDN_PORT10, 0 ? LEDN_PORT11, #endif }; /* Numbers */ const u8 LED_NUMBER[10] = { LED_A | LED_B | LED_C | LED_D | LED_E | LED_F, /* 0 */ LED_B | LED_C, /* 1 */ LED_A | LED_B | LED_D | LED_E | LED_G, /* 2 */ LED_A | LED_B | LED_C | LED_D | LED_G, /* 3 */ LED_B | LED_C | LED_F | LED_G, /* 4 */ LED_A | LED_C | LED_D | LED_F | LED_G, /* 5 */ LED_A | LED_C | LED_D | LED_E | LED_F | LED_G, /* 6 */ LED_A | LED_B | LED_C, /* 7 */ LED_A | LED_B | LED_C | LED_D | LED_E | LED_F | LED_G, /* 8 */ LED_A | LED_B | LED_C | LED_D | LED_F | LED_G, /* 9 */ }; /* Uppercase letters */ const u8 LED_LARGE_LETTER[26] = { 0x77,0x40,0x39,0x3f,0x79,///<ABCDE 0x71,0x40,0x76,0x06,0x40,///<FGHIJ 0x40,0x38,0x40,0x37,0x3f,///<KLMNO 0x73,0x40,0x50,0x6d,0x78,///<PQRST 0x3e,0x3e,0x40,0x76,0x40,///<UVWXY 0x40///<Z }; /* Lowercase letters */ const u8 LED_SMALL_LETTER[26] = { 0x77,0x7c,0x58,0x5e,0x79,///<abcde 0x71,0x40,0x40,0x40,0x40,///<fghij 0x40,0x38,0x40,0x54,0x5c,///<klmno 0x73,0x67,0x50,0x40,0x78,///<pqrst 0x3e,0x3e,0x40,0x40,0x40,///<uvwxy 0x40///<z }; #if LED_7PIN_SEL == 1 /* LSH24D17-1B-UR charlieplexed display */ const u8 led_7[36][2] = { {0,1},//1A {0,2},//1B {3,0},//1C {4,0},//1D {0,3},//1E {1,0},//1F {2,0},//1G {1,2},//2A {1,3},//2B {4,1},//2C {1,5},//2D {1,4},//2E {2,1},//2F {3,1},//2G {4,3},//3A {2,4},//3B {3,4},//3C {5,0},//3D {5,2},//3E {3,2},//3F {4,2},//3G {6,5},//4A {5,6},//4B {4,5},//4C {5,3},//4D {3,5},//4E {5,4},//4F {4,6},//4G {0,5},//LED_PLAY {2,5},//LED_PAUSE {5,1},//LED_USB {0,4},//LED_SD {2,3},//LED_2POINT {6,2},//LED_AUX {6,4},//. {2,6},//LED_MHz }; #endif // LED_7PIN_SEL #if LED_12PIN_SEL /* Standard 12-pin 4-digit display */ const u8 led_7[36][2] = { {4,0},//1A {5,0},//1B {6,0},//1C {7,0},//1D {8,0},//1E {9,0},//1F {10,0},//1G {4,1},//2A {5,1},//2B {6,1},//2C {7,1},//2D {8,1},//2E {9,1},//2F {10,1},//2G {4,2},//3A {5,2},//3B {6,2},//3C {7,2},//3D {8,2},//3E {9,2},//3F {10,2},//3G {4,3},//4A {5,3},//4B {6,3},//4C {7,3},//4D {8,3},//4E {9,3},//4F {10,3},//4G {0,0},//LED_PLAY {0,0},//LED_PAUSE {0,0},//LED_USB {0,0},//SD {11,1},//: {0,0},//MHz {11,2},//. {0,0},//MP3 }; #endif const char playmodestr[][5] = { " ALL", " dev", "Fold", " ONE", " rAn", }; const char menu_string[][5] = { " HI ", "Lod ", "bLUE", " PC ", " UP ", " dN ", " AUX", "-AL-", }; const char other_string[][5]= { "Eq ", "V ", "P ", " NOP", " rec", " Sd ", }; /*----------------------------------------------------------------------------*/ /**@brief Music模式 设备显示 @param void @return void @author Change.tsai @note void led7_show_dev(void) */ /*----------------------------------------------------------------------------*/ void led7_show_dev(u8 dev) { // /*Music Device type*/ /* MUSIC_DIS_VAR *music_var; */ /* music_var = (MUSIC_DIS_VAR*)UI_var.ui_buf_adr; */ /* if(music_var) */ { if((dev == SD0_DEVICE)||(dev == SD1_DEVICE)) { LED_STATUS |= LED_SD; /// led7_show_string(other_string[]); } else if(dev == USB_DEVICE) { LED_STATUS |= LED_USB; } } } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 状态位缓存清除函数 @param void @return void @author Change.tsai @note void led7_clear_icon(void) */ /*----------------------------------------------------------------------------*/ void led7_clear_icon(void) { led7_var.bFlashChar = 0; led7_var.bFlashIcon = 0; led7_var.bShowBuff[4] = 0; } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 显示坐标设置 @param x:显示横坐标 @return void @author Change.tsai @note void led7_setX(u8 X) */ /*----------------------------------------------------------------------------*/ void led7_setX(u8 X) { led7_var.bCoordinateX = X; } /*----------------------------------------------------------------------------*/ /**@brief LED 清屏函数 @param void @return void @author Change.tsai @note void led7_show_null(void) */ /*----------------------------------------------------------------------------*/ void led7_show_null(void) { led7_clear_icon(); led7_var.bShowBuff[0] = 0; led7_var.bShowBuff[1] = 0; led7_var.bShowBuff[2] = 0; led7_var.bShowBuff[3] = 0; } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 扫描函数 @param void @return void @author Change.tsai @note void led7_init(void) */ /*----------------------------------------------------------------------------*/ void led7_init(void) { led7_clear(); s32 ret; ret = timer_reg_isr_fun(timer2_hl,0,led7_scan,NULL); if(ret != TIMER_NO_ERR) { printf("led7_scan err = %x\n",ret); } } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 单个字符显示函数 @param chardata:显示字符 @return void @author Change.tsai @note void led7_show_char(u8 chardata) */ /*----------------------------------------------------------------------------*/ void led7_show_char(char chardata) { //必须保证传入的参数符合范围,程序不作判断 //if ((chardata < ' ') || (chardata > '~') || (led7_var.bCoordinateX > 4)) //{ // return; //} if ((chardata >= '0') && (chardata <= '9')) { led7_var.bShowBuff[led7_var.bCoordinateX++] = LED_NUMBER[chardata - '0']; } else if ((chardata >= 'a') && (chardata <= 'z')) { led7_var.bShowBuff[led7_var.bCoordinateX++] = LED_SMALL_LETTER[chardata - 'a']; } else if ((chardata >= 'A') && (chardata <= 'Z')) { led7_var.bShowBuff[led7_var.bCoordinateX++] = LED_LARGE_LETTER[chardata - 'A']; } else if (chardata == ':') { LED_STATUS |= LED_2POINT; } else if (chardata == ' ') { led7_var.bShowBuff[led7_var.bCoordinateX++] = 0; } else //if (chardata == '-') //不可显示 { led7_var.bShowBuff[led7_var.bCoordinateX++] = BIT(6); } } /*----------------------------------------------------------------------------*/ /**@brief led7_drv 字符串显示函数 @param *str:字符串的指针 offset:显示偏移量 @return void @author Change.tsai @note void led7_show_string(u8 *str) */ /*----------------------------------------------------------------------------*/ void led7_show_string(char *str) { while (*str) led7_show_char(*str++); } /*----------------------------------------------------------------------------*/ /** @brief: @param: @return: @author: @note: */ /*----------------------------------------------------------------------------*/ void led7_show_string_menu(u8 menu) { if(menu >= (sizeof(menu_string)/5)) { printf("*strid(%d) is over!\n",menu); } else { led7_show_string(menu_string[menu]); } } void led7_show_linin_main(u8 menu) { led7_show_string_menu(menu); #if REC_EN RECORD_OP_API * rec_var_p; REC_CTL * rec_ctl_var; rec_var_p = *(RECORD_OP_API **)UI_var.ui_buf_adr; if((UI_var.ui_buf_adr)&&(rec_var_p)) { rec_ctl_var = rec_var_p->rec_ctl; LED_STATUS &= ~(LED_PLAY | LED_PAUSE); LED_STATUS &= ~(LED_SD|LED_USB); if((menu == MENU_AUX_MAIN)||(menu == MENU_BT_MAIN)) { if((rec_ctl_var)&&(ENC_STOP !=rec_ctl_var->enable)) { if (ENC_STAR == rec_ctl_var->enable) LED_STATUS |= LED_PLAY; else if(ENC_PAUS == rec_ctl_var->enable) LED_STATUS |= LED_PAUSE; led7_show_dev(rec_ctl_var->curr_device); } } } #endif } /*----------------------------------------------------------------------------*/ /**@brief Music 播放文件号显示函数 @param void @return void @author Change.tsai @note void led7_show_filenumber(void) */ /*----------------------------------------------------------------------------*/ void led7_show_filenumber(void) { MUSIC_DIS_VAR *music_var; music_var = (MUSIC_DIS_VAR*)UI_var.ui_buf_adr; if(music_var) { /*Music File Number info*/ //printf("ui_music.ui_play_file_num = %u----\n",ui_music.ui_play_file_num); itoa4(music_var->ui_curr_file); led7_show_string((char *)bcd_number); } } /*----------------------------------------------------------------------------*/ /**@brief 红外输入文件号显示函数 @param void @return void @author Change.tsai @note void led7_show_IR_number(void) */ /*----------------------------------------------------------------------------*/ void led7_show_IR_number(s32 arg) { u16 ir_num; ir_num = (u16)(arg&0xffff); /*IR File Number info*/ itoa4(ir_num); led7_show_string((char *)bcd_number); } /*----------------------------------------------------------------------------*/ /**@brief Music模式 显示界面 @param void @return void @author Change.tsai @note void led7_show_music_main(void) */ /*----------------------------------------------------------------------------*/ void led7_show_music_main(void) { //led7_show_string("MUSI"); u32 play_time; MUSIC_DIS_VAR *music_var; music_var = (MUSIC_DIS_VAR*)UI_var.ui_buf_adr; if(music_var) { /*Music Play time info*/ play_time = music_var->play_time; itoa2(play_time/60); led7_show_string((char *)bcd_number); itoa2(play_time%60); led7_show_string((char *)bcd_number); /* led7_show_dev(); */ led7_show_dev(music_var->ui_curr_device); LED_STATUS |= LED_2POINT; ///LED_2POINT | LED_MP3; if (*music_var->ui_curr_statu == DECODER_PLAY) { LED_STATUS |= LED_PLAY; LED_STATUS &= ~LED_PAUSE; led7_var.bFlashIcon |= LED_2POINT; } else if (*music_var->ui_curr_statu == DECODER_PAUSE) { LED_STATUS &= ~LED_PLAY; LED_STATUS |= LED_PAUSE; } // // if(mute) // { // led7_var.bFlashIcon |= LED_MP3; // led7_var.bFlashChar = 0x0f; // } // else // { // led7_var.bFlashIcon &= ~LED_MP3; // led7_var.bFlashChar = 0x00; // } } } void led7_show_bt_main(void) { static u8 cnt = 0; if(btstatus == 1) { led7_show_string(" bt "); } else { switch(cnt) { case 0: led7_show_string(" bt "); break ; case 1: led7_show_string(" bt"); break ; case 2: led7_show_string(" bt "); break ; case 3: led7_show_string("bt "); break ; } cnt = (cnt < 3) ? (cnt + 1) : 0; } } /*----------------------------------------------------------------------------*/ /**@brief EQ显示函数 @param void @return void @author Change.tsai @note void led7_show_eq(s32 arg) */ /*----------------------------------------------------------------------------*/ void led7_show_eq(s32 arg) { u8 eq_cnt; eq_cnt = (u8)arg; led7_show_string(other_string[0]); led7_show_char(eq_cnt%10 + '0'); } /*----------------------------------------------------------------------------*/ /**@brief 循环模式显示函数 @param void @return void @author Change.tsai @note void led7_show_playmode(s32 arg) */ /*----------------------------------------------------------------------------*/ void led7_show_playmode(s32 arg) { u8 pm_cnt; pm_cnt = (u8)arg; led7_show_string(&playmodestr[pm_cnt-FOP_MAX-1][0]); } /*----------------------------------------------------------------------------*/ /**@brief 音量显示函数 @param void @return void @author Change.tsai @note void led7_show_volume(s32 vol) */ /*----------------------------------------------------------------------------*/ void led7_show_volume(s32 vol) { u8 tmp_vol; tmp_vol = (u8)vol; led7_show_string(other_string[1]); itoa2(tmp_vol); led7_show_string((char *)bcd_number); } /*----------------------------------------------------------------------------*/ /**@brief FM 模式主界面 @param void @return void @author Change.tsai @note void led7_show_fm_main(void) */ /*----------------------------------------------------------------------------*/ void led7_show_fm_main(void) { /*FM - Frequency*/ #if 1 FM_MODE_VAR * fm_var; if(!UI_var.ui_buf_adr) return; fm_var = *(FM_MODE_VAR **)UI_var.ui_buf_adr; if(fm_var) { itoa4(fm_var->wFreq); if (fm_var->wFreq <= 999) bcd_number[0] = ' '; led7_show_string((char *)bcd_number); LED_STATUS |= LED_MHZ; #if REC_EN RECORD_OP_API * rec_var_p; REC_CTL * rec_ctl_var; if((fm_var->fm_rec_op)&&(*(RECORD_OP_API **)(fm_var->fm_rec_op))) { rec_var_p = *(RECORD_OP_API **)fm_var->fm_rec_op; rec_ctl_var = rec_var_p->rec_ctl; if((rec_ctl_var)&&(ENC_STOP != rec_ctl_var->enable)) { LED_STATUS &= ~(LED_PLAY | LED_PAUSE); LED_STATUS &= ~(LED_SD|LED_USB); /* led7_show_dev(); */ led7_show_dev(rec_ctl_var->curr_device); if (ENC_STAR == rec_ctl_var->enable) LED_STATUS |= LED_PLAY; else if(ENC_PAUS == rec_ctl_var->enable) LED_STATUS |= LED_PAUSE; } } #endif } #endif // 0 } /*----------------------------------------------------------------------------*/ /**@brief FM 模式主界面 @param void @return void @author Change.tsai @note void led7_show_fm_station(void) */ /*----------------------------------------------------------------------------*/ void led7_show_fm_station(void) { // /*FM - Station*/ #if 1 FM_MODE_VAR * fm_var; if(!UI_var.ui_buf_adr) return; fm_var = *(FM_MODE_VAR **)UI_var.ui_buf_adr; if(fm_var) { led7_show_string(other_string[2]); itoa2(fm_var->wFreChannel); led7_show_string((char *)bcd_number); } #endif } #if 1 //RTC_CLK_EN /*----------------------------------------------------------------------------*/ /**@brief RTC 显示界面 @param void @return void @author Change.tsai @note void led7_show_RTC_main(void) */ /*----------------------------------------------------------------------------*/ void led7_show_RTC_main(void) { RTC_SETTING * rtc_var; RTC_TIME *ui_time; rtc_var = (RTC_SETTING *)UI_var.ui_buf_adr; if(rtc_var) { ui_time = rtc_var->calendar_set.curr_rtc_time; itoa2(ui_time->bHour); led7_show_string((char *)bcd_number); itoa2(ui_time->bMin); led7_show_string((char *)bcd_number); led7_var.bFlashIcon |= LED_2POINT; LED_STATUS |= LED_2POINT; if(rtc_var->rtc_set_mode == RTC_SET_MODE) { if(rtc_var->calendar_set.coordinate == COORDINATE_MIN) led7_var.bFlashChar = BIT(0)|BIT(1); else led7_var.bFlashChar = BIT(2)|BIT(3); } else led7_var.bFlashChar = 0; } } /*----------------------------------------------------------------------------*/ /**@brief Alarm 显示界面 @param void @return void @author Change.tsai @note void led7_show_alarm(void) */ /*----------------------------------------------------------------------------*/ #if 1 //RTC_ALM_EN void led7_show_alarm(void) { RTC_SETTING * rtc_var; RTC_TIME *ui_time; rtc_var = (RTC_SETTING *)UI_var.ui_buf_adr; if(rtc_var) { puts("led7_show_alarm\n"); ui_time = rtc_var->alarm_set.curr_alm_time; itoa2(ui_time->bHour); led7_show_string((char *)bcd_number); itoa2(ui_time->bMin); led7_show_string((char *)bcd_number); LED_STATUS |= LED_2POINT; if(rtc_var->rtc_set_mode == ALM_SET_MODE) { if(rtc_var->alarm_set.coordinate == COORDINATE_MIN) led7_var.bFlashChar = BIT(0)|BIT(1); else led7_var.bFlashChar = BIT(2)|BIT(3); } /*Alarm info - Switch On/Off*/ if (rtc_var->alarm_set.alarm_sw) { LED_STATUS |= LED_PLAY; } else { LED_STATUS |= LED_PAUSE; } } } #endif #endif #if REC_EN /*----------------------------------------------------------------------------*/ /**@brief REC 显示界面 @param void @return void @note void led7_show_rec_start(void) */ /*----------------------------------------------------------------------------*/ static void led7_show_rec_start(REC_CTL * rec_ctl_var) { u32 rec_time; // LED_STATUS &= ~(LED_PLAY | LED_PAUSE); // if(rec_ctl_var) { rec_time = rec_ctl_var->file_info.enc_time_cnt; itoa2(rec_time/60); led7_show_string((char *)bcd_number); itoa2(rec_time%60); led7_show_string((char *)bcd_number); /* led7_show_dev(); */ led7_show_dev(rec_ctl_var->curr_device); LED_STATUS |= LED_2POINT; //| LED_PLAY; if (ENC_STAR == rec_ctl_var->enable) LED_STATUS |= LED_PLAY; else if (ENC_PAUS == rec_ctl_var->enable) LED_STATUS |= LED_PAUSE; } } /*----------------------------------------------------------------------------*/ /**@brief REC 显示界面 @param void @return void @note void led7_show_rec_main(void) */ /*----------------------------------------------------------------------------*/ void led7_show_rec_main(void) { RECORD_OP_API * rec_var_p; REC_CTL * rec_ctl_var; LED_STATUS &= ~(LED_PLAY | LED_PAUSE); LED_STATUS &= ~LED_2POINT; //| LED_PLAY; LED_STATUS &= ~(LED_SD|LED_USB); if(UI_var.ui_buf_adr) { rec_var_p = *(RECORD_OP_API **)UI_var.ui_buf_adr; if(rec_var_p) { rec_ctl_var = rec_var_p->rec_ctl; if((rec_ctl_var)&&(ENC_STOP != rec_ctl_var->enable)) { led7_show_rec_start(rec_ctl_var); return; } } } led7_show_string(other_string[4]); } #endif void LED_drive7(void) { u8 i, j, temp; u8 dispseg = 0; for (i = 0; i < LEDN_PORT_COUNT; i++) led7_var.bShowBuff1[i] = 0; for (i = 0; i < 5; i++) { temp = led7_var.bShowBuff[i]; if (get_sys_halfsec()) { if ((led7_var.bFlashIcon) && (i == 4)) { temp = LED_STATUS & (~led7_var.bFlashIcon); } else if (led7_var.bFlashChar & BIT(i)) { temp = 0x0; } } for (j = 0; j < 7; j++) { if(temp & BIT(j)) led7_var.bShowBuff1[led_7[dispseg][0]] |= BIT(led_7[dispseg][1]); dispseg++; } /* ??? */ if (j == 7) { if(temp & BIT(j)) led7_var.bShowBuff[led_7[35][0]] |= BIT(led_7[35][1]); } } } /*----------------------------------------------------------------------------*/ /**@brief LED清屏函数 @param x:显示横坐标 @return void @author Change.tsai @note void led7_clear(void) */ /*----------------------------------------------------------------------------*/ void led7_clear(void) { for (int i = 0; i < LEDN_PORT_COUNT; i++) { JL_PORT_TypeDef *port = led7_ports[i]; u16 mask = BIT(led7_port_bits[i]); port->OUT &= ~mask; /* Low level */ port->DIR |= mask; /* Input */ port->PU &= ~mask; /* Pullup disable */ port->PD &= ~mask; /* Pulldown disable */ port->HD &= ~mask; /* Highdrive disable */ } } /*----------------------------------------------------------------------------*/ /**@brief LED扫描函数 @param void @return void @author Change.tsai @note void led7_scan(void *param) */ /*----------------------------------------------------------------------------*/ void led7_scan(void *param) { static u8 cnt; JL_PORT_TypeDef *port; u16 mask, seg; LED_drive7(); seg = led7_var.bShowBuff1[cnt]; led7_clear(); /* Drive the scan pin high */ port = led7_ports[cnt]; mask = BIT(led7_port_bits[cnt]); port->OUT |= mask; /* High level */ port->HD |= mask; /* Highdrive enable */ port->DIR &= ~mask; /* Output */ /* Drive the segment pin low */ for (int i = 0; i < LEDN_PORT_COUNT; i++) { port = led7_ports[i]; mask = BIT(led7_port_bits[i]); if (seg & BIT(i)) { port->OUT &= ~mask; /* Low level */ port->HD |= mask; /* Highdrive enable */ port->DIR &= ~mask; /* Output */ } } cnt = (cnt < LEDN_PORT_COUNT) ? (cnt + 1) : 0; } #endif
水Mizu-DEC JLtech since 22.06.2019
Вот тут и проблема - пинов у нас 12 но бит только 8, соответственно последние четыре сегмента теряются, ибо не вмещаются (биты 4-11).
Попробую на стандартном коде. Думаю что так и есть. Только почему так происходит, почему биты и сегменты местами меняются?
By Admin
Только почему так происходит, почему биты и сегменты местами меняются?
Я из "А для ОК по идее просто нужно 1 и 0 местами поменять" подумал, что это происходит примерно так:
ОА: led7_var.bShowBuff1[led_7[k][0]] |= bit_table[led_7[k][1]];
ОК: led7_var.bShowBuff1[led_7[k][1]] |= bit_table[led_7[k][0]];
И это по сути должно как раз так и работать, на сегментах низкий уровень, а на разрядах - высокий.
水Mizu-DEC JLtech since 22.06.2019
ОА: led7_var.bShowBuff1[led_7[k][0]] |= bit_table[led_7[k][1]];
ОК: led7_var.bShowBuff1[led_7[k][1]] |= bit_table[led_7[k][0]];И это по сути должно как раз так и работать, на сегментах низкий уровень, а на разрядах - высокий.
Да, оно и работает для ОА, но если меняю для ОК то пол дисплея идет лесом. Причем не первые 4 бита, а последние.
Я вот этот момент не понимаю, для ОА оно как то же работает, по сути просто мы меняем "полярность" же. Щас колупаю это дело.
By Admin
Интересный момент, если добавить пинов, было 12, стало 16, и просто на последние 4 новых повесит 4 предыдущих что не работают почему то с ОК, то ОК начинает работать как нужно. ..
Почему так происходит,
В случае же с общим катодом, тут уже наоборот - первые четыре элемента используются под выводы разрядов, а биты в них уже отвечают за сегменты.
Вот тут и проблема - пинов у нас 12 но бит только 8, соответственно последние четыре сегмента теряются, ибо не вмещаются (биты 4-11).
Но я всеравно не доганяю почему разряды и сегменты меняются местами в случае с ОК. Почему работают новые пины 13-16? Но предыдущие 4 нет?
By Admin
const u16 bit_table[8] =
{
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,
};
Оно?
By Admin
Оно?
Туда ещё дописать 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000
А вообще bit_table[x] заменить на BIT(x), так как они делают по сути одно и тоже.
水Mizu-DEC JLtech since 22.06.2019
Вы здесь » USMI » MCU, SoC, CPU Микроконтроллеры » Подключение разной периферии к JL SoC. SPI/I2C/I2S/PWM/UART/GPIO...