реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Микроси и жки: непонятный момент, не работает библиотечная функция LCD
monos
сообщение Jul 6 2010, 04:30
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 2-04-08
Из: Беларусь
Пользователь №: 36 425



Вот текст программки обработки механического энкодера, с последующим выводом результата на 2-строчный жки:
Код
#include "RUS_TEXT.h"

#define Tok_max     (!PORTB.B1 && PORTB.B2)
#define Tok_min     (!PORTB.B2 && PORTB.B1)
#define Big_butt    (!PORTB.B3)

// LCD module connections
sbit LCD_RS at RB7_bit;
sbit LCD_EN at RB6_bit;
sbit LCD_D4 at RC4_bit;
sbit LCD_D5 at RC5_bit;
sbit LCD_D6 at RC6_bit;
sbit LCD_D7 at RC7_bit;

sbit LCD_RS_Direction at TRISB7_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D4_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
// End LCD module connections

char *x = "0000",  *y =",";

const int Zmin = 2;       // Константа значения минимального задания тока.
const int Zmax = 40;       // Константа значения максимального задания тока.
const double k=(229/(Zmax-Zmin)); // Коэффициент для масштабирования  задания тока.

unsigned char ust;
bit flag;
////////////////////////////////////////////////////////////////////////////////
void ust_tok (){

   }
////////////////////////////////////////////////////////////////////////////////

void interrupt(){
}
////////////////////////////////////////////////////////////////////////////////
void main() {
  TRISC = 0;
  TRISB1_bit=1;
  TRISB2_bit=1;
  TRISB3_bit=1;
  
  ANSELH = 0;
  ANSEL = 0;
  C1ON_bit = 0;                      // Disable comparators
  C2ON_bit = 0;
  
  OPTION_REG = 0;
  WPUB1_bit = 1;
  WPUB2_bit = 1;
  WPUB3_bit = 1;
  
  IOCB1_bit = 1;
  IOCB2_bit = 1;
  IOCB3_bit = 1;
  
  GIE_bit = 0;
  INTE_bit = 0;
  RBIE_bit = 0;
  RBIF_bit = 0;

  Lcd_init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);
  ust = Eeprom_Read(0); // читаем уставку из EEPROM
  
  flag = 0;
  Delay_ms(1000);
  
///////////////////////////////////////////////////////////////////////////////
  while(1){
  
   Delay_us(10);
   if (Tok_max && ust < 255) ust++;
   else if (Tok_min && ust > 2) ust--;
   else if (Big_butt) Eeprom_Write(0,ust);

   x[0] = (ust/100)+48;
   x[1] = (ust/10)%10+48;
   x[2] = *y;
   x[3] = ust%10+48;

   LCD_Out_Rus(1,2,"Установка тока");
   Lcd_Out(2,7,x);
   Lcd_Out(2,5,"=");
   Lcd_Out(2,12,"A");
   }

}

Загвоздка в след.: приведенный код- работает, но, если зацикленные строки переношу в функцию void ust_tok () и вызываю ее из бесконечного цикла- не работает: жки пустой....
Попытался методом научного тыка разобраться: в итоге в функции ust_tok оставил только эти строки
Код
void ust_tok (){
while(1){

Delay_us(100);

Lcd_Out(2,7,"123");
Lcd_Out(2,5,"=");
Lcd_Out(2,12,"A");

}
}

ЖКИ пустой... В чем ошибка?
пс. мк- пик16ф886.
Go to the top of the page
 
+Quote Post
Kolia
сообщение Jul 6 2010, 06:41
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 188
Регистрация: 28-09-06
Из: Minsk
Пользователь №: 20 762



А вы функцию вызываете в main? И ввобще выдайте нерабочий код полностью а не куски...
Go to the top of the page
 
+Quote Post
monos
сообщение Jul 6 2010, 13:36
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 2-04-08
Из: Беларусь
Пользователь №: 36 425



Верхняя "простыня" это код полностью. Проблема в том, что если зацикленные, while(1), строки переношу в функцию void ust_tok () и вызываю ее (функцию) из main - не работает: жки пустой.... Пробовал и так и эдак, в итоге в ust_tok остались только строки вывода на жки: результат тот же...
Go to the top of the page
 
+Quote Post
monos
сообщение Jul 7 2010, 03:52
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 225
Регистрация: 2-04-08
Из: Беларусь
Пользователь №: 36 425



...нерабочий код полностью:
Код
// LCD module connections
sbit LCD_RS at RB7_bit;
sbit LCD_EN at RB6_bit;
sbit LCD_D4 at RC4_bit;
sbit LCD_D5 at RC5_bit;
sbit LCD_D6 at RC6_bit;
sbit LCD_D7 at RC7_bit;

sbit LCD_RS_Direction at TRISB7_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D4_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
// End LCD module connections


////////////////////////////////////////////////////////////////////////////////
void ust_tok (){

while(1){
  Delay_us(100);
  Lcd_Out(2,7,"123");
  }
}
////////////////////////////////////////////////////////////////////////////////

void interrupt(){
}
////////////////////////////////////////////////////////////////////////////////
void main() {
  TRISC = 0;
  TRISB1_bit=1;
  TRISB2_bit=1;
  TRISB3_bit=1;
  
  ANSELH = 0;
  ANSEL = 0;
  C1ON_bit = 0;                      // Disable comparators
  C2ON_bit = 0;
      
  GIE_bit = 0;
  
  Lcd_init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);
    
  Delay_ms(1000);
  
///////////////////////////////////////////////////////////////////////////////
  ust_tok ();

}
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th June 2025 - 01:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01362 секунд с 7
ELECTRONIX ©2004-2016