📄 wg128_64.c
字号:
// crystal 4MHz
#include "p18f452.h"
#include "type_define.h"
#include "picture_display.h"
#define E_EL PORTCbits.RC2 //output
#define DI LATCbits.LATC3//PORTCbits.RC3 //output
#define E LATCbits.LATC4//PORTCbits.RC4 //output
#define RW LATCbits.LATC5//PORTCbits.RC5 //output
#define DB0 PORTDbits.RD0 //input/output
#define DB1 PORTDbits.RD1 //input/output
#define DB2 PORTDbits.RD2 //input/output
#define DB3 PORTDbits.RD3 //input/output
#define DB4 PORTDbits.RD4 //input/output
#define DB5 PORTDbits.RD5 //input/output
#define DB6 PORTDbits.RD6 //input/output
#define DB7 PORTDbits.RD7 //input/output
#define CS1 LATEbits.LATE0//PORTEbits.RE0 //output
#define CS2 LATEbits.LATE1//PORTEbits.RE1 //output
#define RES PORTEbits.RE2 //output
#define LCD_DATA LATD
#define LCD_LEFT 1
#define LCD_RIGHT 2
#define LCD_ON 1
#define LCD_OFF 0
void mcu_io_init(void);
void lcd_on_off(uns8);
void send_command_to_lcd(uns8);
void check_lcd_state(void);
void display_full_screen(const rom uns8 *);
void set_lcd_line(uns8);
void set_lcd_column(uns8);
void write_byte_to_lcd(uns8);
void set_lcd_start_line(uns8);
void init_lcd(void);
void select_screen(uns8);
void clear_screen(uns8);
uns8 read_byte_from_lcd(void);
void main(void)
{
mcu_io_init();
init_lcd();
display_full_screen(set_screen);
}
void mcu_io_init(void)
{
//I/O setting
// PORTA setting
PORTA=0x00;
LATA=0x00;
TRISA=0xff;
// PORTB setting
PORTB=0x00;
LATB=0x00;
TRISB=0xff;
// PORTC setting
PORTC=0x40;
LATC=0x40;
TRISC=0b11000011;
// PORTD setting
PORTD=0x00;
LATD=0x00;
TRISD=0x00;
// PORTE setting
PORTE=0x00;
LATE=0x00;
TRISE=0b11111000;
}
void lcd_on_off(uns8 on_off)
{
on_off=0x3e | on_off; //0011 111x
send_command_to_lcd(on_off);
}
void send_command_to_lcd(uns8 command)
{
check_lcd_state();
RW=0;
LCD_DATA=command;
E=1;
E=0;
}
void check_lcd_state(void)
{
uns8 temp8;
DI=0;
RW=1;
TRISD=0xff;
do
{
E=1;
temp8=PORTD;//LCD_DATA;
E=0;
temp8=0x90 & temp8; //must BUSY->Ready RESET->Normal
}while(!(temp8==0x00));
TRISD=0x00; //output
}
void display_full_screen(const rom uns8 *p)
{
uns8 i,j,k;
for(i=0;i<8;i++)
{
for(k=0;k<2;k++)
{
if(k==0)
select_screen(LCD_LEFT);
else
select_screen(LCD_RIGHT);
set_lcd_line(i);
set_lcd_column(0);
for(j=0;j<64;j++)
{
write_byte_to_lcd(*p++);
}
}
}
}
void set_lcd_line(uns8 line)
{
line=line & 0x07; //0<=line<=7
line=line | 0xb8; //1011 1xxx
send_command_to_lcd(line);
}
void set_lcd_column(uns8 column)
{
column=column & 0x3f; //0<=column<=63
column=column | 0x40; //01xx xxxx
send_command_to_lcd(column);
}
void write_byte_to_lcd(uns8 dat)
{
check_lcd_state();
DI=1;
RW=0;
//TRISD=0x00;
LCD_DATA=dat;
E=1;
E=0;
}
void set_lcd_start_line(uns8 startline) //0-63
{
startline=startline & 0x07;
startline=startline | 0xc0; //1100 0000
send_command_to_lcd(startline);
}
void init_lcd(void)
{
RES=0;
RES=1;
select_screen(LCD_LEFT);
set_lcd_column(0);
set_lcd_line(0);
set_lcd_start_line(0);
lcd_on_off(LCD_ON);
select_screen(LCD_RIGHT);
set_lcd_column(0);
set_lcd_line(0);
set_lcd_start_line(0);
lcd_on_off(LCD_ON);
clear_screen(LCD_LEFT);
clear_screen(LCD_RIGHT);
select_screen(LCD_LEFT);
}
void select_screen(uns8 screen)
{
if(screen==LCD_LEFT)
{
CS1=1;
CS2=0;
}
else
{
CS1=0;
CS2=1;
}
}
void clear_screen(uns8 screen)
{
uns8 i,j;
select_screen(screen);
for(i=0;i<8;i++)
{
set_lcd_line(i);
for(j=0;j<64;j++)
{
write_byte_to_lcd(0x00);
}
}
}
uns8 read_byte_from_lcd(void)
{
uns8 read_dat;
check_lcd_state();
DI=1;
RW=1;
TRISD=0xff;
E=1;
read_dat=PORTD;
E=0;
TRISD=0x00; //output
return(read_dat);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -