⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 410.c

📁 一个用keil写的,动行在c8051f410上的软件vf的驱动程序,在protes下仿真过.希望对初学者能有用.
💻 C
📖 第 1 页 / 共 2 页
字号:
如果没有写完一个半屏的数据就要充分结合此函数来达到要显示的效果
---------------------------------------------------------------------------*/
void LCD_Initial(void) 
{   
  LCD_RST = 0;    /* 置复位信号为低电平 */ 
 // Delay_us(2);  
  LCD_RST = 1;    /* 置复位信号为高电平 */ 
  LCD_WriteCommand(0x3F,Left);	  /*显示开*/
  LCD_WriteCommand(0x3F,Right);
  LCD_WriteCommand(0xC0,Left);    /*起始行*/
  LCD_WriteCommand(0xC0,Right);			    
  LCD_WriteCommand(0xB8,Left); 	  /*起始页*/
  LCD_WriteCommand(0xB8,Right);  
  LCD_WriteCommand(0x40,Left);	  /*起始列*/
  LCD_WriteCommand(0x40,Right); 
} 

/*---------------------------------------------------------------------------
下面这个函数显示开机画面,按回车进入主控界面
---------------------------------------------------------------------------*/
 firstpagelcd()
 {

 page=0xb8;
for(j=0;j<8;j++)
{
  LCD_WriteCommand((page+j),Right);
  LCD_WriteCommand(0x40,Right);
for(i=0;i<64;i++)
{
  LCD_WriteData(fr[64*j+i],Right); 
}};


page=0xb8;
for(j=0;j<8;j++)
{
  LCD_WriteCommand((page+j),Left);
  LCD_WriteCommand(0x40,Left);
for(i=0;i<64;i++)
{
  LCD_WriteData(fl[64*j+i],Left); 
}};
 }
/*---------------------------------------------------------------------------
下面这个函数显示第二页画面的固定值
---------------------------------------------------------------------------*/
  secondpage()
{ 
page=0xbc;                    //r0
pageend=2;clmsum=21;
clmstart=0x40;pagestart=0;

leftout();                    //ri
pagestart=2;pageend=4;clmstart=0x40;
rightout();
       
page=0xba;                    //con:
pageend=8;clmsum=28;clmstart=0x40;
pagestart=6;

leftout();                    //a+b:
pagestart=4;pageend=6;clmstart=0x40;
rightout();
}

/*---------------------------------------------------------------------------
下面这个函数显示左半屏数据
---------------------------------------------------------------------------*/
leftout(){
for((j=pagestart,k=0);j<pageend;(j++,k++))
{
  LCD_WriteCommand((page+k),Left);
  LCD_WriteCommand(clmstart,Left);
for(i=0;i<clmsum;i++)
{
digitalin=ro[j][i];
if(keysetin==1){digitalin=~ro[j][i];};
  LCD_WriteData(digitalin,Left); 
}}
keysetin=0;
}
/*---------------------------------------------------------------------------
下面这个函数显示右半屏数据
---------------------------------------------------------------------------*/
rightout(){
for((j=pagestart,k=0);j<pageend;(j++,k++))
{
  LCD_WriteCommand((page+k),Right);
  LCD_WriteCommand(clmstart,Right);
for(i=0;i<clmsum;i++)
{
  digitalin=ro[j][i];
  if(keysetin==1){digitalin=~ro[j][i];};
  LCD_WriteData(digitalin,Right); 
}}
keysetin=0;
}


/*---------------------------------------------------------------------------
下面这个函数用于数字数组例坐标选择,对应相应数值的点阵
---------------------------------------------------------------------------*/
swi()
{
  switch (swd)
  {
  case 0: k=0; break;
  case 1: k=1; break;
  case 2: k=2; break;
  case 3: k=3; break;
  case 4: k=4; break;
  case 5: k=5; break;
  case 6: k=6; break;
  case 7: k=7; break;
  case 8: k=8; break;
  case 9: k=9; break;
  }
}

/*---------------------------------------------------------------------------
下面这个函数用于左半屏数字位的显示示,只需给定页地址,起始例
---------------------------------------------------------------------------*/
digitaloutleft()
{
for(j=0;j<2;j++)
{
  LCD_WriteCommand((page+j),Left);
  LCD_WriteCommand(clmstart,Left);
for(i=0;i<7;i++)
{
  digitalin=digital[k][7*j+i];
  if(keysetin==1){digitalin=~digital[k][7*j+i];};
  
  LCD_WriteData(digitalin,Left); 
}}
keysetin=0;
}

/*---------------------------------------------------------------------------
下面这个函数用于右半屏数字位的显示,只需给定页地址,起始例
---------------------------------------------------------------------------*/
digitaloutright()
{
for(j=0;j<2;j++)
{
  LCD_WriteCommand((page+j),Right);
  LCD_WriteCommand(clmstart,Right);
for(i=0;i<7;i++)
{
   digitalin=digital[k][7*j+i];
   if(keysetin==1){digitalin=~digital[k][7*j+i];};
  
  LCD_WriteData(digitalin,Right); 
}}
keysetin=0;
}

/*---------------------------------------------------------------------------
下面这个timespeedout函数用于第二页的时间及速度值显示,
---------------------------------------------------------------------------*/
  timespeedout()
  {
  
  ymdhmsrout();
  page=0xb8;clmstart=0x40;swd=2;swi();ifkeyl();digitaloutleft(); //yer1---
  page=0xb8;clmstart=0x47;swd=0;swi();ifkeyl();digitaloutleft(); //yer-1--
  page=0xb8;clmstart=0x4e;digih=year/10;swd=digih;swi();ifkeyl();digitaloutleft(); //yer--1-
  page=0xb8;clmstart=0x55;digil=year%10;swd=digil;swi();ifkeyl();digitaloutleft(); //yer---1
  
  page=0xb8;clmstart=0x63;digih=month/10;swd=digih;swi();ifkeyl();digitaloutleft(); //monthh
  page=0xb8;clmstart=0x6a;digil=month%10;swd=digil;swi();ifkeyl();digitaloutleft(); //monthl
  
  page=0xb8;clmstart=0x71;digih=day/10;swd=digih;swi();ifkeyl();digitaloutleft(); //dayh
  page=0xb8;clmstart=0x78;digil=day%10;swd=digil;swi();ifkeyl();digitaloutleft(); //dayl
  
  page=0xb8;clmstart=0x47;digih=hour/10;swd=digih;swi();ifkeyr();digitaloutright(); //hourh
  page=0xb8;clmstart=0x4e;digil=hour%10;swd=digil;swi();ifkeyr();digitaloutright(); //hourl
  page=0xb8;clmstart=0x55;k=12;digitaloutright(); //:
  
  page=0xb8;clmstart=0x5c;digih=minute/10;swd=digih;swi();ifkeyr();digitaloutright(); //minuteh
  page=0xb8;clmstart=0x63;digil=minute%10;swd=digil;swi();ifkeyr();digitaloutright(); //minutel
  page=0xb8;clmstart=0x6a;k=12;digitaloutright(); //:
  
  page=0xb8;clmstart=0x71;digih=second/10;swd=digih;swi();ifkeyr();digitaloutright(); //secondh
  page=0xb8;clmstart=0x78;digil=second%10;swd=digil;swi();ifkeyr();digitaloutright(); //secondl
  
  switch (symbolout){case 0: k=13;break;case 1: k=14;break;case 2: k=15;break;case 3: k=16;break;}
  page=0xbc;clmstart=0x55;                                              ifkeyl();digitaloutleft(); //switch symbol and out
  page=0xbc;clmstart=0x5c;digih2=rout/1000;            swd=digih2;swi();ifkeyl();digitaloutleft(); //rin1---
  page=0xbc;clmstart=0x63;digih=(rout%1000)/100;       swd=digih;swi(); ifkeyl();digitaloutleft(); //rin-1--
  page=0xbc;clmstart=0x6a;digil2=((rout%1000)%100)/10; swd=digil2;swi();ifkeyl();digitaloutleft(); //rin--1-
  page=0xbc;clmstart=0x71;digil=((rout%1000)%100)%10;  swd=digil;swi(); ifkeyl();digitaloutleft(); //rin---1
  
  switch (symbolin){case 0: k=13;break;case 1: k=14;break;case 2: k=15;break;case 3: k=16;break;}
  page=0xbc;clmstart=0x55;ifkeyr();                                            digitaloutright(); //switch symbol and out
  page=0xbc;clmstart=0x5c;digih2=rin/1000;           swd=digih2;swi();ifkeyr();digitaloutright(); //rout1---
  page=0xbc;clmstart=0x63;digih=(rin%1000)/100;      swd=digih; swi();ifkeyr();digitaloutright(); //rout-1--
  page=0xbc;clmstart=0x6a;digil2=((rin%1000)%100)/10;swd=digil2;swi();ifkeyr();digitaloutright(); //rout--1-
  page=0xbc;clmstart=0x71;digil=((rin%1000)%100)%10; swd=digil; swi();ifkeyr();digitaloutright(); //rout---1

     if(con==1){pagestart=8;pageend=10;clmstart=0x5c;clmsum=21;page=0xba;leftout();}//con:run
else if(con==0){pagestart=10;pageend=12;clmstart=0x5c;clmsum=21;page=0xba;keysetin=1;leftout();}//con:off

     if(ab==1){pagestart=8;pageend=10;clmstart=0x5c;clmsum=21;page=0xba;rightout();}//a+b:run
else if(ab==0){pagestart=10;pageend=12;clmstart=0x5c;clmsum=21;page=0xba;keysetin=1;rightout();}//A+B:off

 }
 ifkeyl(){
      if((page==keyud)&(clmstart==keylr)&(dir==Left)&(keyclr==1)){keysetin=keyset;}  //judge the left twinkle function enable and adress
	    }
 ifkeyr(){
      if((page==keyud)&(clmstart==keylr)&(dir==Right)&(keyclr==1)){keysetin=keyset;} //judge the right twinkle function enable and adress
	    }
  //////////////////the accident recode display
  accidentdisplay()
  {
  ymdhmsrout();
  page=0xbe;clmstart=0x40;swd=serial;swi();ifkeyl();digitaloutleft(); //yer1---

  page=0xbe;clmstart=0x71;digih=day/10;swd=digih;swi();ifkeyl();digitaloutleft(); //dayh
  page=0xbe;clmstart=0x78;digil=day%10;swd=digil;swi();ifkeyl();digitaloutleft(); //dayl
  
  page=0xbe;clmstart=0x47;digih=hour/10;swd=digih;swi();ifkeyr();digitaloutright(); //hourh
  page=0xbe;clmstart=0x4e;digil=hour%10;swd=digil;swi();ifkeyr();digitaloutright(); //hourl
  page=0xbe;clmstart=0x55;k=12;digitaloutright(); //:
  
  page=0xbe;clmstart=0x5c;digih=minute/10;swd=digih;swi();ifkeyr();digitaloutright(); //minuteh
  page=0xbe;clmstart=0x63;digil=minute%10;swd=digil;swi();ifkeyr();digitaloutright(); //minutel
  page=0xbe;clmstart=0x6a;k=12;digitaloutright(); //:
  
  page=0xbe;clmstart=0x71;digih=second/10;swd=digih;swi();ifkeyr();digitaloutright(); //secondh
  page=0xbe;clmstart=0x78;digil=second%10;swd=digil;swi();ifkeyr();digitaloutright(); //secondl
  }
/*---------------------------------------------------------------------------
/*---------------------------------------------------------------------------
下面这个ymdnsrout函数用于将数组中的data取出用;
---------------------------------------------------------------------------*/
      ymdhmsrout()
 {
  year  =datacenter[0][2]*10+datacenter[0][3];
  month =datacenter[0][5]*10+datacenter[0][6];
  day   =datacenter[0][7]*10+datacenter[0][8];

  hour  =datacenter[1][1]*10+datacenter[1][2];
  minute=datacenter[1][4]*10+datacenter[1][5];
  second=datacenter[1][7]*10+datacenter[1][8];

  rout  =datacenter[2][4]*1000+datacenter[2][5]*100+datacenter[2][6]*10+datacenter[2][7];
}
/*---------------------------------------------------------------------------
下面这个ymdnsrin函数用于将data装入数组;
---------------------------------------------------------------------------*/
      ymdhmsrin()
 {
  datacenter[0][2]=year/10;   datacenter[0][3]=year%10;
  datacenter[0][5]=month/10;  datacenter[0][6]=month%10;
  datacenter[0][7]=day/10;    datacenter[0][8]=day%10;

  datacenter[1][1]=hour/10;   datacenter[1][2]=hour%10;
  datacenter[1][4]=minute/10; datacenter[1][5]=minute%10;
  datacenter[1][7]=second/10; datacenter[1][8]=second%10;

  datacenter[2][4]=rout/1000; datacenter[2][5]=(rout%1000)/100; datacenter[2][6]=((rout%1000)%100)/10;  datacenter[2][7]=(((rout%1000)%100)%10)%10;
}
/*---------------------------------------------------------------------------
下面这个函数为主函数,根据程序要实现的功能写相应的应用程序
---------------------------------------------------------------------------*/
void main(void) 
{ 


 // XBR2=0x40;//ENABLE 交叉开关
 // XBR1=0x08;//count
 // XBR0=0x08;//pca
  LCD_Initial();  
  LCD_keyclr(Left);
  LCD_keyclr(Right);
  firstpagelcd();
  enterkeynumber=1;
  LCD_keyclr(Left);
  LCD_keyclr(Right);
 }  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -