对应液晶显示器1602的c编码及电路图.docx
《对应液晶显示器1602的c编码及电路图.docx》由会员分享,可在线阅读,更多相关《对应液晶显示器1602的c编码及电路图.docx(10页珍藏版)》请在冰豆网上搜索。
对应液晶显示器1602的c编码及电路图
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
voidInitialize_LCD();
voidDisplay_String(uchar,uchar,uchar*);
sbitK1=P3^0;
sbitK2=P3^1;
sbitK3=P3^2;
ucharcode_model[]="PressK1orK2toselectmodel!
!
K3PauseOrGo!
!
!
";
ucharconstline_count=6;
ucharcodecontext[][30]=
{"Welcomeyou,07-",
"--09Automative!
",
"ElectricDesign",
"andPractice!
!
!
",
"Wegohandin",
"handitintopractice",
"andlearnitwell."
};
uchardisplay_buffer[32];
//DelayFunction
voidDelay_Ms_Fun(uintx)
{
uchari;
while(x--)
for(i=0;i<120;i++);
}
//VerticalDisplayFunction
voidVertical_Display()
{
uchari,j,k=0;
uchar*p=context[0];
uchar*q=context[line_count]+strlen(context[line_count]);
while(p{
for(i=0;i<16&&p{
if((i==0||i==15)&&*p=='')
p++;
if(*p!
='\0')
{
display_buffer[i]=*p++;
}
else
{
if(++k>line_count)
break;
p=context[k];
display_buffer[i]=*p++;
}
}
for(j=i;j<16;j++)
display_buffer[j]='';
while(F0)
Delay_Ms_Fun(5);
Display_String(0,0,"");
Delay_Ms_Fun(200);
while(F0)
Delay_Ms_Fun(5);
Display_String(0,1,display_buffer);
Delay_Ms_Fun(200);
while(F0)
Delay_Ms_Fun(5);
Display_String(0,0,display_buffer);
Display_String(0,1,"");
Delay_Ms_Fun(200);
}
Display_String(0,0,"");
Display_String(0,1,"");
}
//HorizontalDisplayFunction
voidHorizontal_Display()
{
uchari,j,k=0,h=0;
uchar*p=context[0];
uchar*q=context[line_count]+strlen(context[line_count]);
for(i=0;i<16;i++)
display_buffer[i]='';
while(p{
if((i==16||i==31)&&*p=='')
p++;
for(i=16;i<32&&p{
if(*p!
='\0')
{
display_buffer[i]=*p++;
}
else
{
if(++k>line_count)
break;
p=context[k];
display_buffer[i]=*p++;
}
}
for(j=i;j<32;j++)
display_buffer[j]='';
for(i=0;i<=16;i++)
{
while(F0)
Delay_Ms_Fun(5);
Display_String(0,h,display_buffer+i);
while(F0)
Delay_Ms_Fun(5);
Delay_Ms_Fun(20);
}
h=(h==0)?
1:
0;
Delay_Ms_Fun(200);
}
if(h==1)
Display_String(0,1,"");
}
//ExternalInterrupt
voidEX_Interrupt()interrupt0
{
F0=!
F0;
}
//MainFunction
voidmain()
{
uintcount=0;
IE=0x81;
IT0=1;
F0=0;
Initialize_LCD();
while(K1&&K2)
{
Display_String(0,0,code_model);
Display_String(0,1,code_model+16);
Delay_Ms_Fun(600);
Display_String(0,0,"");
Display_String(0,1,"");
Display_String(0,0,code_model+32);
Delay_Ms_Fun(600);
}
while
(1)
{
if(K1==0)
{
Vertical_Display();
Delay_Ms_Fun(200);
}
else
if(K2==0)
{
Horizontal_Display();
}Delay_Ms_Fun(200);
}
}
需要调用的函数如下:
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitRS=P2^0;
sbitRW=P2^1;
sbitE=P2^2;
//DelayFunction
voidDelay_Ms(uintms)
{
uchart;
while(ms--)
for(t=0;t<120;t++);
}
//BusyCheckingFunction
ucharBusy_Check()
{
ucharlcd_status;
RS=0;
RW=1;
E=1;
Delay_Ms
(1);
lcd_status=P0;
E=0;
returnlcd_status;
}
//WriteLCDCommandFunction
voidWrite_LCD_Command(ucharcmd)
{
while((Busy_Check()&0x80)==0x80);//busy!
wait!
!
!
RS=0;
RW=0;
E=0;
P0=cmd;
E=1;
Delay_Ms
(1);
E=0;
}
//WriteLCDDataFunction
voidWrite_LCD_Data(uchardat)
{
while((Busy_Check()&0x80)==0x80);//busy!
wait!
!
!
RS=1;
RW=0;
E=0;
P0=dat;
E=1;
Delay_Ms
(1);
E=0;
}
//LCDInitializeFuntion
voidInitialize_LCD()
{
Write_LCD_Command(0x38);
Delay_Ms
(1);
Write_LCD_Command(0x01);
Delay_Ms
(1);
Write_LCD_Command(0x06);
Delay_Ms
(1);
Write_LCD_Command(0x0c);
Delay_Ms
(1);
}
//DisplayStringFunction
voidDisplay_String(ucharx,uchary,uchar*str)
{
uchari=0;
//settingdisplaycharstart
if(y==0)
Write_LCD_Command(0x80|x);
if(y==1)
Write_LCD_Command(0xc0|x);
for(i=0;i<16;i++)
{
Write_LCD_Data(str[i]);
}
}
电路图: