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

 
 
> Микроси и жки: непонятный момент, не работает библиотечная функция 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



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

 


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


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