Ср июн 07, 2023 21:45:49
Чт июн 08, 2023 11:45:14
#define LCD_E PORTB.5 //6выв
#define LCD_RW PORTB.6 //5выв 1-read 0-write
#define LCD_A0 PORTB.7 //4выв 0-команда 1-данные(RS)
#define LCD0 PORTB.4 //11выв DB4
#define LCD1 PORTB.3 //12выв DB5
#define LCD2 PORTB.2 //13выв DB6
#define LCD3 PORTB.1 //14выв DB7
//LCD_RW=0;
//DisplayInit();
//loadfont( &Character[0][0] );
void PutNibble(unsigned char c)//,unsigned char cmdFlag)
{
char n=c;
//LCD_E=1;
LCD0=0;if(n&0x1)LCD0=1;
LCD1=0;if(n&0x2)LCD1=1;
LCD2=0;if(n&0x4)LCD2=1;
LCD3=0;if(n&0x8)LCD3=1;
//LCD_RW=0;
//LCD_A0=1;if (cmdFlag)LCD_A0=0;
LCD_E=0;
LCD_E=1;
}
void WriteCmd(char cmd) {
LCD_A0=0;//команда
PutNibble(cmd>>4);
PutNibble(cmd);
delay_us(40);
}
void Lcdchar(char ch) {
LCD_A0=1;//данные
PutNibble(ch>>4);
PutNibble(ch);
delay_us(40);//надо! не успевает LCD
}
void DisplayClear(void) {
WriteCmd(1);
delay_ms(10);
}
#define DL8 0x10 //8 разр интерфейс
#define P1 0x02 //1 page знакогенератора
#define D_ON 0x04 //display ON
#define CUR_ON 0x02 //cursor ON
#define BLINK 0x01 //blinking cursor
//#define
//static inline void DisplayInit(void) {
void DisplayInit(void) {
LCD_A0=0;
PutNibble(0x3);delay_us(100);
PutNibble(0x3);delay_us(100);
PutNibble(0x3);delay_us(100);
PutNibble(0x2);delay_us(100);
WriteCmd(0x28 );//|P1 | DL8);//4бита 1 страница зн ген
// WriteCmd(0x08);// уст парам
// WriteCmd(0x0c |0 |0); //0c включ диспл и тип курсора
//2-кур есть 1-мигает
WriteCmd(0x08 | D_ON );//| CUR_ON | BLINK ); //0c включ диспл и тип курсора
WriteCmd(0x04 |2 |0); //2 сдвиг кур вправо 1 сдв диспл
DisplayClear();
}
//char a_lcd[]={0,0x40,0x14,0x54};
char a_lcd[]={0x80,0xc0};
static void gotoXY(unsigned char x,unsigned char y) {
WriteCmd(0x80|(a_lcd[y])+(x&0x1f));
}
void at_yx(char y,char x)
{
WriteCmd(0x80|(a_lcd[y])+(x&0x1f));
//gotoXY(x,y);
}
//char string[]=("Hello мир! и вся Коммунистическая партия");
void lcd_str(flash char *p)//важно flash, иначе строки в RAM
//void puts(char *p)
{
char c;
for(;c = *p++ ;) Lcdchar(c);
//while(c = *p++ ) Putchar(c);
}
//lcd_rus("as\0\1\2f\3\4\5\6\7$");//'$'конец строки
void lcd_rus(flash char *p)//выв строки конец '$'
{
char c;
for(;(c = *p++)!='$' ;) Lcdchar(c);
}
void printYX(char y,char x,flash char *p)
{//char *p=ps;
//y=*p++;x=*p++;
at_yx(y,x);
lcd_str(p);
}
//загрузка фонта в lcd
//loadfont( &Character[0][0] );
//loadfont( &Character[8][0] );
void loadfont(flash unsigned char *p)
{
char i;
WriteCmd(0x40);//CGRAM mode
for(i=0;i<64;i++) Lcdchar(*p++);
WriteCmd(0x80);
}