Перейти к содержанию

Desert _Eagl.5

Members
  • Постов

    422
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Desert _Eagl.5

  1. вообщем применил cjne

    LoopMain:
    m1:
    setb p1.0
    mov c, p1.0
    jc m2
    inc r4
    
    q:
    cjne r4, #1, w
    тут код какойто
    jmp start
    
    w:
    cjne r4, #2, t
    тут код какойто
    jmp start
    t:
    .
    .
    .
    
    qqq:
    cjne r4, #254, ee
    тут код какойто
    jmp start
    
    ee:
    jmp start
    m2:
    
    jmp m1
    sjmp LoopMain
    

    в итоге имеем case на 255 ячеек...

    всем спасибо за участие

  2. Здраствуйте

    Немогу понять как реализовать следующий алгоритм: есть кнопка, она замыкает пин контроллера на землю, этот же пин подтянут к + через резистор. Вообщем хочу сделать структуру CASE, которая будет управляться этой кнопкой. Так вот как можно реализовать такое?

    Опрос кнопки делаю так

    m1:
    setb p1.0
    mov c, p1.0
    jc m2
    call функция
    jmp m1
    m2:
     call функция
     jmp m1
    

    И есть вот такая реализация вышеописанного алгоритма, которая не работает из за того что некоторые функции непонимает Keil c51

     mov	 ax,I
     cmp	 ax,0		 ; проверка на 0
     jne	 not0
     call	 case0
     jmp	 endcase
    not0: cmp	 ax,1		 ; проверка на 1
     jne	 not1
     call	 case1
     jmp	 endcase
    not1: cmp	 ax,2		 ; проверка на 2
     jne	 not2
     call	 case2
    not2:
    endcase:
    

    еще более лучший вариант

     mov	 bx,I
     shl	 bx,1	
    
     jmp	 cs:jump_table[bx]	
    
    jump_table		 dw foo0,foo1,foo2 ; таблица переходов
    foo0: call	 case0
     jmp	 endcase
    foo1: call	 case1
     jmp	 endcase
    foo2: call	 case2
     jmp	 endcase
    

  3. Я ни под кого не кошу

    ммм фото в студию где вы с этим телевизором и паяльником в руках, сразу большинсво наездов отпадут....

    И нах там огород на этой бандуре лепить?

    А кто туда смотреть будет? Если нет возможности поставить иморт то уж лучше КТ чем ничего... Всего то нада проковырять 2 дырки в радиаторе и подложку вырезать...

  4. Здраствуйте. Вообщем есть код для инициализации дисплея, проблема в том что не работают

     #define

    вставки, при компиляции пишет error: lvalue required as left operand of assignment. Кароче говоря я стал заменять эти вставки в коде просто вот такими конструкциями

    GPIO_ResetBits(GPIOA,GPIO_Pin_6);

    , ошибки исправились. Но появилась следующая проблема с

    LCD_RS=RS;

    , заменил на

    GPIO_Pin_5= RS;

    и компилятор всеравно выдает эту ошибку. Как можно здесь поступить ?

    #define LCD_PORT GPIOA
    
    #define LCD_CS	 3
    #define LCD_RESET 4
    #define LCD_RS	 5
    #define LCD_CLK 6
    #define LCD_DATA 7
    //Команда/Данные
    #define CMD 0
    #define DAT 1
    char RS_old;
    void LCD_init(void)
    {
    LCD_RESET = 0;
    delay_ms(500);
    LCD_RESET = 1;
    delay_ms(500);
    Send_to_lcd(CMD, 0x01); //Программный сброс
    Send_to_lcd(CMD, 0x36); //Memory Access Control (Направление заполнения области дисплея (памяти): 0bVHRXXXXX, V - заполнение по вертикали (0 - сверху-вниз, 1 - снизу-вверх),
    					 //H - заполнение по горизонтали (0 - слева-направо, 1 - справа-налево), R - меняются местами строки и столбцы (при этом заполнение остается сверху-вниз, слева-направо))
    Send_to_lcd(DAT, 0x00);
    Send_to_lcd(CMD, 0x11); //Выход из спящего режима
    delay_ms(20);
    Send_to_lcd(CMD, 0x3a); //Установка цветовой палитры
    #ifdef _8_BIT_COLOR
    Send_to_lcd(DAT, 0x02); //Байт на пиксель 256 цветов
    #else
    Send_to_lcd(DAT, 0x05); //Два байта на пиксель 65536 цветов
    #endif
    delay_ms(20);
    Send_to_lcd(CMD, 0x29); //Включение дисплея
    }
    //===============================================================
    //Функция записи команды/данных в LCD (RS==0 - команда, RS==1 - данные)
    //===============================================================
    void Send_to_lcd (unsigned char RS, unsigned char data)
    {
    //unsigned char count;
    LCD_CLK = 0;
    LCD_DATA = 0;
    if ((RS_old != RS) || (!RS_old && !RS)) //проверяем старое значение RS (если поступают одни команды то дергаем CS)
    {
    LCD_CS=1; // Установка CS
    LCD_RS=RS;
    LCD_CS=0; // Сброс CS
    }
    ******************************************************************************
    запись байта в дисплей
    //******************************************************************************
    LCD_DATA = 0;
    if ((data & 128) == 128) LCD_DATA = 1;
    LCD_CLK=1;
    LCD_CLK=0;
    LCD_DATA = 0;
    if ((data & 64) == 64) LCD_DATA = 1;
    LCD_CLK=1;
    LCD_CLK=0;
    LCD_DATA = 0;
    if ((data & 32) == 32) LCD_DATA = 1;
    LCD_CLK=1;
    LCD_CLK=0;
    LCD_DATA = 0;
    if ((data & 16) ==16) LCD_DATA = 1;
    LCD_CLK=1;
    LCD_CLK=0;
    LCD_DATA = 0;
    if ((data & 8) == 8) LCD_DATA = 1;
    LCD_CLK=1;
    LCD_CLK=0;
    LCD_DATA = 0;
    if ((data & 4) == 4) LCD_DATA = 1;
    LCD_CLK=1;
    LCD_CLK=0;
    LCD_DATA = 0;
    if ((data & 2) == 2) LCD_DATA = 1;
    LCD_CLK=1;
    LCD_CLK=0;
    LCD_DATA = 0;
    if ((data & 1) == 1) LCD_DATA = 1;
    LCD_CLK=1;
    LCD_CLK=0;
    
    RS_old=RS; //запоминаю значение RS
    LCD_DATA = 0;
    }
    
    

    Спасибо!

  5. столкнулся с очень плохой документацией

    ищите нормальную, на офф сайте полюбому должно быть что то, а разобраться можно во всем!!

    вот например инфа есть http://www.gaw.ru/html.cgi/txt/publ/micros/stm32w.htm

    http://ziblog.ru/category/mikrokontrolleryi/stm32/stm32w

    http://skycomponents.com/news/novyie-mikrokontrolleryi-stm32w-so-vstroennyim-radiomodulem-ot-stmicroelectronics.htm

×
×
  • Создать...