я сделал следующим образом: в main продублировал выводимую строку с определенным интервалом, а в обработчике прерываний-сдвиг курсора. Работает, но двигаются обе строки, а мне нужно, чтобы двигалась только верхняя. Как это сделать??

|  | roboforum.ruТехнический форум по робототехнике. |  | 



 
   
  #include "c8051F120.h" 
sbit LCD_rs = P0^0; 
sbit LCD_rw = P0^2; 
sbit LCD_en = P0^4; 
sfr16 RCAP2=0xca; 
sfr16 TMR2=0xcc; 
sfr16 RCAP3=202; 
sfr16 TMR3=204; 
sfr16 ADC0=0xbe; 
sfr16 RCAP4=0xe4; 
sfr16 TMR4=0xcc; 
#define LCD_data P3 
#define SYSCLK 3062500 
void LCD_init(); 
void LCD_sendstring(unsigned char *var); 
void LCD_build(); 
void LCD_command(unsigned char var); 
void LCD_senddata(unsigned char var); 
void delay (unsigned int time); 
void Timer1_Init(); 
void main(void) 
{  
   WDTCN   = 0xDE; 
    WDTCN   = 0xAD; 
    SFRPAGE   = CONFIG_PAGE; 
    P0MDOUT   = 0x15; 
    P3MDOUT   = 0xFF; 
    XBR2      = 0xC0; 
    LCD_init(); 
        LCD_command(0x80);//положение курсора, откуда начинать
   LCD_sendstring("TEMPERATURE IS:");//строка
   LCD_command(0x93);
   LCD_sendstring("TEMPERATURE IS:");//строка
   EA=0; 
   Timer1_Init(); 
    EA=1; 
   while (1);{} 
} 
void LCD_init() 
{ 
   delay (45000); 
   LCD_command (0x38); 
   delay (12300); 
   LCD_command (0x38); 
   delay (3000); 
   LCD_command (0x38); 
   delay (65535); 
   LCD_command (0x38); 
   delay (65535); 
   LCD_command (0x0C); 
   delay (65535); 
   LCD_command (0x06); 
   delay (65535); 
   LCD_command (0x01); 
} 
void delay (unsigned int time)
{
   unsigned int i;
   for (i=0; i<time; i++) {};
}
void LCD_senddata(unsigned char var) 
{ 
LCD_rs = 1; //Selected data register 
LCD_rw = 0; //We are writing 
LCD_en = 1; //Enable H->L 
LCD_data = var; 
LCD_en = 0; 
delay(3000); 
} 
void LCD_command(unsigned char var) 
{ 
   LCD_rs = 0;       //Selected command register 
   LCD_rw = 0;       //We are writing in instruction register
   LCD_en = 1;       //Enable H->L 
   LCD_data = var;    //Function set: 2 Line, 8-bit, 5x7 dots 
   LCD_en = 0; 
   delay(3000);
}
void LCD_sendstring(unsigned char *var) 
{ while(*var) //till string ends 
LCD_senddata(*var++); //send characters one by one 
} 
void Timer1_Init() 
{ 
    SFRPAGE   = TIMER01_PAGE; 
    TCON      = 0x10; 
    TMOD      = 0x02; 
    CKCON     = 0x02; 
    IE        = 0x02; 
} 
void Timer0_ISR (void) interrupt 1 
{ 
delay(100000); 
LCD_command(0x1b); // команда сдвига курсора влево 
}

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0