1 / 1 / 0
Регистрация: 28.01.2021
Сообщений: 85
1

Программирование дисплея мэлт 12864J на си - keil. Задача: сделать режим редактирования, установить курсор

03.09.2024, 09:30. Показов 640. Ответов 4

Author24 — интернет-сервис помощи студентам
здравствуйте. Программирую дисплей мэлт 12864J на си в среде разработки keil.
В данный момент написала программу "Просмотра" данных на дисплее. Если кратко - кнопками вверх вниз листаю информацию на дисплее. Файл main:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int main(void)
{ 
    clk_CoreConfig();
    lcd_PortInit();
    LCD_INIT();
    button_Init();
    uint8_t curr=0;
 
    tmr1_Init();
    tmr2_Init();
    while(1){   
/*режим просмотр*/
        if(DataSendFlag){
            if(read_button_state(&Button_Up)&&curr!=5){
                LCD_CLS();
                curr++;
                ViewNum(curr);
                DataSendFlag = 0;
            }
        }
        if(DataSendFlag){
            if(read_button_state(&Button_Down)&&curr!=0){
                LCD_CLS();
                curr--;
                ViewNum(curr);
                DataSendFlag = 0;
            }       
        }   
/*режим просмотр конец*/  
    } //off while
} /
Файл view.c
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <stdio.h>
#include "view.h"
#include "text.h"
#include "button.h"
View view1 ={"name1","10.2","name2","0.3","name3","1.6","name4","4.1","name5","6.6","name6","0.9"};
View view2 ={"name7","0.2","name8","0.7","name9","0.6","name10","0.1","name11","0.3","name12","0.8"};           
View view3 ={"name13","5.0","name14","50","name15","50","name16","50","name17","50","name18","50"};
View view4 ={"name19","4.1","name20","4","name21","4","name22","4","name23","4","name24","4"};          
View view5 ={"name25","3.3","name26","9","name27","9","name28","9","name29","9","name30","0.9"};
 
 
void SetView(View* view)
{
    LCD_PUTS(col_1row_1_addr_x,col_1row_1_addr_y,view->col_1row_1);
    LCD_PUTS(col_1row_2_addr_x,col_1row_2_addr_y,view->col_1row_2);
    LCD_PUTS(col_1row_3_addr_x,col_1row_3_addr_y,view->col_1row_3);
    LCD_PUTS(col_1row_4_addr_x,col_1row_4_addr_y,view->col_1row_4);
    LCD_PUTS(col_2row_1_addr_x,col_2row_1_addr_y,view->col_2row_1);
    LCD_PUTS(col_2row_2_addr_x,col_2row_2_addr_y,view->col_2row_2);
    LCD_PUTS(col_2row_3_addr_x,col_2row_3_addr_y,view->col_2row_3);
    LCD_PUTS(col_2row_4_addr_x,col_2row_4_addr_y,view->col_2row_4);
    LCD_PUTS(col_3row_1_addr_x,col_3row_1_addr_y,view->col_3row_1);
    LCD_PUTS(col_3row_2_addr_x,col_3row_2_addr_y,view->col_3row_2);
    LCD_PUTS(col_3row_3_addr_x,col_3row_3_addr_y,view->col_3row_3);
    LCD_PUTS(col_3row_4_addr_x,col_3row_4_addr_y,view->col_3row_4);     
}   
 
void ViewNum(int num)
{
    switch(num){
        case 1: 
            SetView(&view1);
            break;
        case 2: 
            SetView(&view2);
            break;
        case 3: 
            SetView(&view3);
            break;
        case 4: 
            SetView(&view4);
      break;
        case 5: 
            SetView(&view5);
            break;
    }
}
данный код работает.
поставили задачу сделать режим "Редактирование".
Мысль такая: по нажатию какой нибудь кнопки впадать в этот режим...
Там возле данных нужно установить курсор, вот как раз с ним я утонула .
void Curcor (row,col, curren_pos) или делать также через LCD_PUTS (row,col,"/")
в общем если есть какие нибудь мысли , поделитесь пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.09.2024, 09:30
Ответы с готовыми решениями:

Микроконтроллер STM32, работа с дисплеем МЭЛТ MT-12864J
Здравствуйте. Проект предполагает работу с микроконтроллером STM32F030R8T6. Требуется написать...

Ошибка использование LCD дисплея "MT-20S6-v3 фирмы МЭЛТ
Во время использование LCD дисплея &quot;MT-20S6-v3 фирмы МЭЛТ&quot; при переключении с нулевой страницы на...

мне нужно сделать режим редактирования, то есть изменение вопросов в тесте
Здравствуйте, я делаю тест на Delphi 7 Моя проблема заключается в том, что мне нужно сделать режим...

Режим Debug в Keil вылетает при работе с железом
Всем привет. Столкнулся с такой проблемой: при запуске программы на МК в режиме Debug из под Keilа...

Как изменить режим дисплея??
Народ, помогите! Как увеличить досовский экран при нажатии клавиши F6, а потом вернуть экран в...

4
453 / 328 / 130
Регистрация: 18.07.2017
Сообщений: 1,466
03.09.2024, 12:57 2
Цитата Сообщение от BelkaMatilda Посмотреть сообщение
C
1
2
3
4
5
View view1 ={"name1","10.2","name2","0.3","name3","1.6","name4","4.1","name5","6.6","name6","0.9"};
View view2 ={"name7","0.2","name8","0.7","name9","0.6","name10","0.1","name11","0.3","name12","0.8"};           
View view3 ={"name13","5.0","name14","50","name15","50","name16","50","name17","50","name18","50"};
View view4 ={"name19","4.1","name20","4","name21","4","name22","4","name23","4","name24","4"};          
View view5 ={"name25","3.3","name26","9","name27","9","name28","9","name29","9","name30","0.9"};
Мадам, вы массивы мимо проходили чтоли? Объединяйте однотипные данные в массив и не надо будет лишний раз switch-case писать.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
View views[5] ={
    {"name1","10.2","name2","0.3","name3","1.6","name4","4.1","name5","6.6","name6","0.9"},
    {"name7","0.2","name8","0.7","name9","0.6","name10","0.1","name11","0.3","name12","0.8"},
    {"name13","5.0","name14","50","name15","50","name16","50","name17","50","name18","50"},
    {"name19","4.1","name20","4","name21","4","name22","4","name23","4","name24","4"},     
    {"name25","3.3","name26","9","name27","9","name28","9","name29","9","name30","0.9"}
};
 
...
 
if(DataSendFlag){
    if(read_button_state(&Button_Up)&&curr!=5){
        LCD_CLS();
        curr++;
        SetView(views[curr]);
        DataSendFlag = 0;
    }
}
Цитата Сообщение от BelkaMatilda Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void SetView(View* view)
{
    LCD_PUTS(col_1row_1_addr_x,col_1row_1_addr_y,view->col_1row_1);
    LCD_PUTS(col_1row_2_addr_x,col_1row_2_addr_y,view->col_1row_2);
    LCD_PUTS(col_1row_3_addr_x,col_1row_3_addr_y,view->col_1row_3);
    LCD_PUTS(col_1row_4_addr_x,col_1row_4_addr_y,view->col_1row_4);
    LCD_PUTS(col_2row_1_addr_x,col_2row_1_addr_y,view->col_2row_1);
    LCD_PUTS(col_2row_2_addr_x,col_2row_2_addr_y,view->col_2row_2);
    LCD_PUTS(col_2row_3_addr_x,col_2row_3_addr_y,view->col_2row_3);
    LCD_PUTS(col_2row_4_addr_x,col_2row_4_addr_y,view->col_2row_4);
    LCD_PUTS(col_3row_1_addr_x,col_3row_1_addr_y,view->col_3row_1);
    LCD_PUTS(col_3row_2_addr_x,col_3row_2_addr_y,view->col_3row_2);
    LCD_PUTS(col_3row_3_addr_x,col_3row_3_addr_y,view->col_3row_3);
    LCD_PUTS(col_3row_4_addr_x,col_3row_4_addr_y,view->col_3row_4);     
}
В 2 цикла не судьба упихать?
Цитата Сообщение от BelkaMatilda Посмотреть сообщение
Там возле данных нужно установить курсор, вот как раз с ним я утонула .
void Curcor (row,col, curren_pos) или делать также через LCD_PUTS (row,col,"/")
Что-то эти функции плохо гуглятся. Укажи в каких библиотеках они реализованы чтобы можно было документацию о них почитать?
Цитата Сообщение от BelkaMatilda Посмотреть сообщение
в общем если есть какие нибудь мысли , поделитесь пожалуйста
В плане режимов, можно использовать машины состояний
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
typedef enum mode{
    INIT,
    EDIT,
    READ,
    _STATE3,
    _STATE4,
    ... 
} mode;
 
int main(){
    mode Mode = INIT;
    
    while(1){
        switch(Mode){
            case INIT:
                // Initialise display
                Mode = READ;
                break;
 
            case READ:
                // Change line number and print line
                if(/* Button 'edit' pressed */) Mode = EDIT;
                break;
                
            case EDIT:
                // Edit line
                if(/* Button 'quit' pressed */) Mode = READ;
                break;
        }
    }
}
А чтобы не запутаться - рисовать подробную диаграмму состояний.
Миниатюры
Программирование дисплея мэлт 12864J на си - keil. Задача: сделать режим редактирования, установить курсор  
0
1 / 1 / 0
Регистрация: 28.01.2021
Сообщений: 85
03.09.2024, 13:34  [ТС] 3
Прикиньте мимо, не судьба вот. Изучаю самостоятельно
0
453 / 328 / 130
Регистрация: 18.07.2017
Сообщений: 1,466
03.09.2024, 13:54 4
Цитата Сообщение от BelkaMatilda Посмотреть сообщение
Прикиньте мимо, не судьба вот. Изучаю самостоятельно
Ну что же, тогда желаю успехов в изучении.
0
1 / 1 / 0
Регистрация: 28.01.2021
Сообщений: 85
03.09.2024, 18:27  [ТС] 5
И вам не душнить
0
03.09.2024, 18:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.09.2024, 18:27
Помогаю со студенческими работами здесь

Программирование в Keil
Есть массив X, массив завершается кодом конца массива 00h. Занести в массив Y четные числа массива...

Текстовый режим для работы дисплея
Составить программу для вывода на экран окна и заполнить его текстом с помощью Readkey. Окно...

Программирование на Си в программе Keil uvision5
Есть вот такое задание: Устройство обслуживает 16 ламп, которые имитируются светодиодными...

Режим редактирования
Вот такая проблема есть сейчас. Надо сделать: 1) Убрать вход в режим редактирования документа по...

Программирование на ассемблере, отладка на Keil uVision5
Здравствуйте, помогите пожалуйста с выполнением работы, можно и не бесплатно Задание: Даны два...

Режим редактирования в шахматах
Может кто нибудь знает, как в данной программе сделать режим редактирования, т.е. нужно изменить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru