Вот текст программки обработки механического энкодера, с последующим выводом результата на 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.