#include
#include"mode.h"
sbitRs_Lcd=P3^5;
sbitRw_Lcd=P3^6;
sbitEn_Lcd=P3^7;
sbitCs1_Lcd=P1^0;
sbitCs2_Lcd=P1^1;
sfrDataBuss=0xa0;//P0作为Lcd的数据线
//////////////////////////////////////////////////////
voiddelay_us(unsignedinta)
{
while(a>0)a--;
}
voiddelay_ms(unsignedinta)
{
while(a>0)
{a--;delay_us(1000);}
}
//////////////////////////////////////////////////////////////////////////////
charRdStateLcd()
{
unsignedcharstate;
Rs_Lcd=0;
Rw_Lcd=1;
En_Lcd=1;
state=DataBuss;
En_Lcd=0;
return(state);
}
charWrCommandIc(unsignedcharCommand)
{
unsignedcharstate,tmp;
state=0;
for(tmp=0xFF;(RdStateLcd()&0x80)&&(tmp>0x00);tmp--)
{;}
if(tmp==0)
{state=0xFF;}
el
{
Rs_Lcd=0;
Rw_Lcd=0;
DataBuss=Command;
En_Lcd=1;
En_Lcd=0;
}
return(state);
}
charWrCommandLcd(unsignedcharCommand)
{
unsignedcharstate;
Cs1_Lcd=1;
Cs2_Lcd=0;
state=WrCommandIc(Command);
if(state==0)
{
Cs1_Lcd=0;
Cs2_Lcd=1;
state=WrCommandIc(Command);
}
return(state);
}
charWrDataLcd(unsignedchardat)
{
unsignedcharstate,tmp;
state=0;
for(tmp=0xFF;(RdStateLcd()&0x80)&&(tmp>0x00);tmp--)//banmang?
{;}
if(tmp==0)
{state=0xFF;}
el
{
Rw_Lcd=0;
Rs_Lcd=1;
DataBuss=dat;
En_Lcd=1;
En_Lcd=0;
}
return(state);
}
unsignedcharRdDataLcd()
{
unsignedcharstate,tmp;
unsignedchardat;
state=0;
for(tmp=0xFF;(RdStateLcd()&0x80)&&(tmp>0x00);tmp--)//banmang?
{;}
Rw_Lcd=0;
Rs_Lcd=1;
delay_us(10);
if(tmp==0)
{state=0xFF;}
el
{
Rw_Lcd=1;
Rs_Lcd=1;
dat=DataBuss;
En_Lcd=1;
En_Lcd=0;
}
return(dat);
}
//***********************************************
//*Name:SetStarLine
//*Function:设置显示开始行
//*Description:
//*Calls:
//*Input:line=开始显示的行数?
//*Outputs:返回操作状态
//*RegisterUsage:
//*********************************/
charSetStarLine(charline)
{
charstate;
line=(line&0x3F)|0xC0;
state=WrCommandLcd(line);
return(state);
}
voidInitDis(void)
{
SetStarLine(0x00);
WrCommandLcd(0x3F);//kaixianshi
}
charSysInit(void)
{
unsignedchari,state;
//Rst_Lcd=0;//复位lcd
for(i=0xFF;i>0;i--)//延时1ms
{;}
//Rst_Lcd=1;
SetStarLine(0x00);
InitDis();
return(state);
}
///////////////////////////////////////////////////////////////////////////////////
//****************
//*Name:RdStateLcd
//*Function:读Lcd状态
//*Description:
//*Calls:NO
//*Input:no
//*Outputs:读到的状态
//*RegisterUsage:
//********************************************************/
//********************************/
//*Name:SetStarLine
//*Function:设置当前页地址
//*Description:
//*Calls:
//*Input:page=页地址
//*Outputs:返回操作状态
//*RegisterUsage:
//***************************************/
charSetPageAddr(charpage)
{
charstate;
page=(page&0x07)|0xB8;
state=WrCommandLcd(page);
return(state);
}
//*******************/
//*Name:SetStarLine
//*Function:设置当Y地址
//*Description:
//*Calls:
//*Input:line=开始显示的行数?
//*Outputs:返回操作状态
//*RegisterUsage:
//*********************************/
charSetYAddr(chary)
{
charstate;
y=(y&0x3F)|0x40;
state=WrCommandLcd(y);
return(state);
}
//////////////////////////////////////////////////////////////////////////////
//*********************/
//*Name:DisWord
//*Function:汉字串显示程序
//*Description:
//*Calls:NO
//*Input:*p=字符串首地址
//*page=显示页地址
//*y=显示起始y地址
//*Outputs:No
//*RegisterUsage:
//***************************************/
voidDisWord(unsignedchar*p,unsignedcharpage,unsignedchary,charstate)
{
unsignedchari,j,tmp;
for(j=0;j<2;j++)
{
SetPageAddr(page+j);
if(y<64)
{i=y;}
el
{i=y-64;}
SetYAddr(i);
//SetStarLine(i);
if(y<64)
{
Cs1_Lcd=1;
Cs2_Lcd=0;
}
el
{
Cs1_Lcd=0;
Cs2_Lcd=1;
}
for(i=16;i<32;i++)
{
tmp=p[i-16*j];//daohuanhoumiandezaishangmian
if(state==1)
{
tmp=~tmp;
}
WrDataLcd(tmp);
}
}
//WrCommandLcd(0x3F);/*tiaoshi*/
}
voidDisChar(unsignedchar*p,unsignedcharpage,unsignedchary,charstate)
{
unsignedchari,j,tmp;
for(j=0;j<2;j++)
{
SetPageAddr(page+j);
if(y<64)
{i=y;}
el
{i=y-64;}
SetYAddr(i);
//SetStarLine(i);
if(y<64)
{
Cs1_Lcd=1;
Cs2_Lcd=0;
}
el
{
Cs1_Lcd=0;
Cs2_Lcd=1;
}
for(i=8;i<16;i++)
{
tmp=p[i-8*j];
if(state==0x01)
{tmp=~tmp;}
WrDataLcd(tmp);
}
}
}
voidDispoint(unsignedcharpage,unsignedchary)
{
unsignedchari,j,tmp=0;
unsignedchara=0,b=0;
unsignedcharstate=0;
//a=page/8;b=page%8;
a=0;
SetPageAddr(a);
if(y<64)
{i=y;}
el
{i=y-64;}
SetYAddr(i);
if(y<64)
{
Cs1_Lcd=1;
Cs2_Lcd=0;
}
el
{
Cs1_Lcd=0;
Cs2_Lcd=1;
}
//tmp|=(1<
//tmp=88;
//WrDataLcd(tmp);
WrDataLcd(page);
}
/*
voidDisread(unsignedcharpage,unsignedchary)
{
unsignedchari,j,tmp=0;
unsignedchara=0,b=0;
unsignedcharstate=0;
a=page/8;b=page%8;
SetPageAddr(a);
if(y<64)
{i=y;}
el
{i=y-64;}
SetYAddr(i);
if(y<64)
{
Cs1_Lcd=1;
Cs2_Lcd=0;
}
el
{
Cs1_Lcd=0;
Cs2_Lcd=1;
}
state=RdDataLcd();
DisChar(fig[state/10],6,32,0);
DisChar(fig[state%10],6,40,0);
//DisChar(fig[state/10],6,32,0);
}
*/
unsignedchargetState()
{
unsignedcharstate=0;
Cs1_Lcd=0;
Cs2_Lcd=0;
Rs_Lcd=0;
Rw_Lcd=1;
En_Lcd=1;//下降沿
En_Lcd=0;
state=DataBuss;
returnstate;
}
unsignedcharlcdBusy()
{
unsignedcharstate=0;
state=getState();
if(state&0x80)
{//BUSY
return1;
}
el
{//idle
return0;
}
}
////////////////////////////////////////////////////////////////////////////////
voidClrScreen(void)
{
chari,j,state;
for(j=0;j<8;j++)
{
state=SetPageAddr(j);
state=SetYAddr(0x00);
Cs1_Lcd=1;
Cs2_Lcd=0;
for(i=0;i<64;i++)//清
{
state=WrDataLcd(0);
}
Cs1_Lcd=0;
Cs2_Lcd=1;
for(i=0;i<64;i++)//清
{
state=WrDataLcd(0);
}
}
}
voiddisp_lcd_left(unsignedchar*p,unsignedcharpage,unsignedchary)
{
unsignedchari;
SetPageAddr(page);
SetYAddr(y);
Cs1_Lcd=1;
Cs2_Lcd=0;
for(i=0;i<16;i++)
{
WrDataLcd(p[i]);
}
WrCommandLcd(0x3F);/*tiaoshi*/
SetPageAddr(page-1);
SetYAddr(y);
Cs1_Lcd=1;
Cs2_Lcd=0;
for(i=16;i<32;i++)
{
WrDataLcd(p[i]);
}
}
voiddisp_lcd_right(unsignedchar*p,unsignedcharpage,unsignedchary)
{
unsignedchari;
SetPageAddr(page);
SetYAddr(y);
Cs1_Lcd=0;
Cs2_Lcd=1;
for(i=0;i<16;i++)
{
WrDataLcd(p[i]);
}
WrCommandLcd(0x3F);/*tiaoshi*/
SetPageAddr(page-1);
SetYAddr(y);
Cs1_Lcd=0;
Cs2_Lcd=1;
for(i=16;i<32;i++)
{
WrDataLcd(p[i]);
}
}
////////////////////////////////////////////////////////////////////////////////
voiddisp_binglun()
{
unsignedchar*p;
//p=bing;
ClrScreen();
disp_lcd_left(bing,0x03,20);
WrCommandLcd(0x3F);
p=lun;
disp_lcd_left(lun,0x03,44);
p=ji;
disp_lcd_right(ji,0x03,4);
p=tuan;
disp_lcd_right(tuan,0x03,28);
DisChar(fig[1],6,32,0);
DisChar(fig[2],6,40,0);
DisChar(fig[3],6,48,0);
DisChar(fig[4],6,56,0);
DisChar(fig[5],6,64,0);
DisChar(fig[6],6,72,0);
DisChar(fig[7],6,80,0);
DisChar(fig[8],6,88,0);
}
//////////////////////////////////////////////////////
voidmain()
{
charSonState;
unsignedchari=0;
unsignedchardat=0;
unsignedcharstate,tmp;
state=0;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
delay_us(100);
do{
SonState=SysInit();
}while(SonState!=0);
ClrScreen();
while(1)
{
for(i=0;i<256;i++)
{
Dispoint(i,5);
delay_ms(20);
for(tmp=0xFF;(RdStateLcd()&0x80)&&(tmp>0x00);tmp--)
{;}
if(tmp==0)
{state=0xFF;}
el
{
Rs_Lcd=1;
Rw_Lcd=1;
dat=DataBuss;
En_Lcd=1;
En_Lcd=0;
}
DisChar(fig[dat/100],6,32,0);
DisChar(fig[dat%100/10],6,40,0);
DisChar(fig[dat%10],6,48,0);
}
i=0;
ClrScreen();
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////
不含竖直线
voidDispoint(unsignedcharpage,unsignedchary)
{
unsignedchari,j,tmp=0;
unsignedchara=0,b=0;
unsignedcharstate=0;
a=page/8;b=page%8;
SetPageAddr(a);
if(y<64)
{i=y;}
el
{i=y-64;}
SetYAddr(i);
if(y<64)
{
Cs1_Lcd=1;
Cs2_Lcd=0;
}
el
{
Cs1_Lcd=0;
Cs2_Lcd=1;
}
tmp|=1<<(b);
WrDataLcd(tmp);
}
/*
while(1)
{
for(i=0;i<64;i++)
{Dispoint(i,i);
delay_ms(2);}
ClrScreen();
for(i=0;i<64;i++)
{Dispoint(63-i,64+i);
delay_ms(2);}
ClrScreen();
for(i=0;i<128;i++)
{Dispoint(0,127-i);
delay_ms(2);}
ClrScreen();
}
*/
////////////////////////////////////////////////////////////////////
读竖直线
voidmain()
{
charSonState;
unsignedchari=0;
unsignedchardat=0;
unsignedcharstate,tmp;
state=0;
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
delay_us(100);
do{
SonState=SysInit();
}while(SonState!=0);
ClrScreen();
while(1)
{
for(i=0;i<256;i++)
{
Dispoint(i,5);
delay_ms(20);
////////////////////////////////读取数据ram
for(tmp=0xFF;(RdStateLcd()&0x80)&&(tmp>0x00);tmp--)
{;}
if(tmp==0)
{state=0xFF;}
el
{
Rs_Lcd=1;
Rw_Lcd=1;
dat=DataBuss;
En_Lcd=1;
En_Lcd=0;
}
////////////////////////////////
DisChar(fig[dat/100],6,32,0);
DisChar(fig[dat%100/10],6,40,0);
DisChar(fig[dat%10],6,48,0);
}
i=0;
ClrScreen();
}
}
本文发布于:2022-11-15 14:47:15,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/88/24924.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |