?? lcd_screen_driver.c
字號(hào):
#include<w78e58b.h>
sbit employ=P2^0;
sbit read_write=P2^7;
sbit data_injunction=P2^6;
sbit piece_left=P2^5;
sbit piece_right=P2^4;
void write_byte(bit piece,unsigned char x,unsigned char y,unsigned char d[]);
/************* write left lcd screen **********************/
void write_left_injunction(unsigned char d)
{
signed char x;
piece_left=1;
read_write=1; // 1:read,0:write
data_injunction=0; // 1:data, 0:injunction
loop1:
lcd_data=0xff;
employ=1;
x=lcd_data;
employ=0;
if(x&0x80)
{ goto loop1;}
read_write=0;
lcd_data=d;
employ=1;
employ=0;
piece_left=0;
piece_right=0;
}
/************** write right lcd screen ************************/
void write_right_injunction(unsigned char d)
{
signed char x;
piece_right=1;
read_write=1; // 1:read,0:write
data_injunction=0; // 1:data, 0:injunction
loop2:
lcd_data=0xff;
employ=1;
x=lcd_data;
employ=0;
if(x&0x80)
{ goto loop2;}
read_write=0;
lcd_data=d;
employ=1;
employ=0;
piece_left=0;
piece_right=0;
}
/************** send left lcd screen dispaly data **************/
void write_left_data(unsigned char d)
{
signed char x;
piece_left=1; // employ left lcd screen
read_write=1; // write data
data_injunction=0; // send injunction
loop1:
lcd_data=0xff;
employ=1;
x=lcd_data;
employ=0;
if(x&0x80)
{goto loop1;}
data_injunction=1;
read_write=0;
lcd_data=d;
employ=1;
employ=0;
piece_left=0;
piece_right=0;
}
/************** send right lcd screen dispaly data **************/
void write_right_data(unsigned char d)
{
signed char x;
piece_right=1; // employ left lcd screen
read_write=1; // write data
data_injunction=0; // send injunction
loop1:
lcd_data=0xff;
employ=1;
x=lcd_data;
employ=0;
if(x&0x80)
{goto loop1;}
data_injunction=1;
read_write=0;
lcd_data=d;
employ=1;
employ=0;
piece_left=0;
piece_right=0;
}
/*************** delay time ***********************************/
void delay_time(unsigned int i)
{
unsigned char j;
for(;i>0;i--)
{ for(j=0;j<100;j++)
{;}
}
}
/************ clear_lcd_screen ********************************/
void clear_lcd_screen(void)
{
unsigned char lcd_page;
unsigned char i,j;
delay_time(0); //must delay time
for(i=0;i<8;i++)
{
lcd_page=i|0xb8;
write_left_injunction(lcd_page);
write_left_injunction(0x40|i);
for(j=0;j<64;j++)
{
write_left_data(0x00);
}
}
for(i=0;i<8;i++)
{
lcd_page=i|0xb8;
write_right_injunction(lcd_page);
write_right_injunction(0x40);
for(j=0;j<64;j++)
{
write_right_data(0x00);
}
}
}
/************ initialization led screen ************************/
void initialization_led_screen(void)
{
lcd_data=0x00;
employ=0;
read_write=0;
data_injunction=0;
piece_left=0;
piece_right=0;
write_left_injunction(0x3e); // off lcd left screen
write_right_injunction(0x3e); // off lcd right screen
write_left_injunction(0xc0); // left part row address select 2^6
write_right_injunction(0xc0); // right part row address select 2^6
clear_lcd_screen();
write_left_injunction(0x3f); // on lcd left screen
write_right_injunction(0x3f); // on lcd right screen
}
/******************** write a Byte ******************************************************/
void write_byte(bit piece,unsigned char x,unsigned char y,unsigned char d[]) // 0:left,1:right
{
unsigned char i,j,q; // x less than or equal to 6
unsigned char *da; // y less than or equal to 56
da=d; // x for even
x|=0xb8; // page address
y|=0x40;
if(!piece)
{ // row
for(i=0;i<2;i++)
{
q=0;
for(j=0;j<8;j++)
{
if((y+j)<128)
{
write_left_injunction(x+i);
write_left_injunction(y+j);
write_left_data(*da);}
if((y+j)>=128)
{
write_right_injunction(x+i);
write_right_injunction(q+64);
write_right_data(*da);q++;}
da++;
}
}
}
else
{
for(i=0;i<2;i++)
{
write_right_injunction(x+i);
write_right_injunction(y);
for(j=0;j<8;j++)
{
write_right_data(*da);
da++;
}
}
}
}
/************** write a word ***********************************************/
void write_word(bit piece,unsigned char x,unsigned char y,unsigned char d[])
{
unsigned char *da;
unsigned char i,j,p;
unsigned char word[2][16];
da=d;
for(i=0;i<2;i++)
{ for(j=0;j<16;j++)
{
word[i][j]=*da;
da++;
}
}
write_byte(piece,x,y,&word[0]);
p=y+8; if(p>=64)
{y=p-72;piece=1;p=0;}
write_byte(piece,x,y+8,&word[1]);
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -