С Новым годом! Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 28.01.2021
Сообщений: 85
1

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

03.09.2024, 09:30. Показов 803. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
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
466 / 337 / 134
Регистрация: 18.07.2017
Сообщений: 1,478
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
466 / 337 / 134
Регистрация: 18.07.2017
Сообщений: 1,478
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
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.09.2024, 18:27
Помогаю со студенческими работами здесь

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

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
UserScript для подсветки кнопок языков программировани­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форм быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
Как создавать приложения для iOS/iPhone
InfoMaster 12.01.2025
Введение в разработку iOS-приложений Разработка приложений для iOS открывает огромные возможности в мире мобильных технологий. С каждым годом количество пользователей iPhone и iPad растет,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru