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

📄 yanjing12864new.c

📁 LCD应用系统程序
💻 C
📖 第 1 页 / 共 2 页
字号:
//proteus仿真论坛:http://proteus.5d6d.com
#include <at89x51.h>
#include <intrins.h>
#include<ds18b20.h>

#define uchar unsigned char
#define uint  unsigned int
#define lcm P1
sbit p_csl=P2^2;
sbit p_csr=P2^1;
sbit p_di=P2^3;
sbit p_rw=P2^4;
sbit p_e=P2^5;
sbit p_rst=P2^0;
sbit xiayi=P3^5;
sbit sure=P3^6;
sbit fanhui=P3^7;
sbit alarm=P2^6;
uchar code t[];
uchar code tu[];
uchar code tu1[];
uchar code tu2[];
uchar code xzi[];
uchar code zuobiao[];
uchar ye,lie,shu,r,temp,tp[5]={0,0,0,0,0};
uint fanbai=0,shi=3,ge=5;
bit baojing=0,ss=0;

unsigned int i,h,aa=0,bb=0,dd,xuanzhe=0,ad,rr,q=0,lu=1;
unsigned char ye,lei,shu,yy,zan,zan1,zan2,zan3,zan4,d1=0x00,d2=0x00,d3=0x00,d4=0x00,d5=0x00,date1,ff,gg; 

uchar code ds18b20_num2[8][8]={
                          {0xAE,0x00,0x00,0x01,0xBC,0x71,0xFD,0x28},
                          {0xEB,0x00,0x00,0x01,0xBC,0x4D,0x22,0x28},
                          {0x3A,0x00,0x00,0x01,0xBC,0x71,0xE7,0x28},
						  {0x77,0x00,0x00,0x01,0xBC,0x48,0x09,0x28},
						  {0x48,0x00,0x00,0x01,0xBC,0x58,0xCD,0x28},
						  {0xA6,0x00,0x00,0x01,0xBC,0x7E,0x36,0x28},
						  {0x72,0x00,0x00,0x01,0xBC,0x55,0x96,0x28},
                          {0x74,0x00,0x00,0x01,0xBC,0x6D,0xE9,0x28},
                           };
/*uchar code ds18b20_num2[8][8]={
                          {0x8e,0x00,0x00,0x00,0xb8,0xc5,0x30,0x28},
                          {0x16,0x00,0x00,0x00,0xb8,0xc5,0x40,0x28},
                          {0xB9,0x00,0x00,0x00,0xb8,0xc5,0x31,0x28},
						  {0xe0,0x00,0x00,0x00,0xb8,0xc5,0x32,0x28},
						  {0xd7,0x00,0x00,0x00,0xb8,0xc5,0x33,0x28},
                          {0x52,0x00,0x00,0x00,0xb8,0xc5,0x34,0x28},
						  {0x65,0x00,0x00,0x00,0xb8,0xc5,0x35,0x28},
						  {0x3c,0x00,0x00,0x00,0xb8,0xc5,0x36,0x28},
                          };*/
//uchar ds18b20_num2[8]={0x16,0x00,0x00,0x00,0xb8,0xc5,0x40,0x28};

/*****函数声明********/
void delay(uint k);
void wcode(uchar c,uchar csl,uchar csr);
void wdata(uchar c,uchar csl,uchar csr);
void set_statrline(uchar i);
void set_xy(uchar x,uchar y);
void dison_off(uchar o);
void reset();
void lcd_init(void);
void lw(uchar x,uchar y,uchar dd);//写数据函数
void disp_Hz(uchar xx,uchar yy,uchar n,uchar fb);//显示汉字
void disp_Ez(uchar xx,uchar yy,uchar n,uchar fb);

//延时
void delay(uint k)
{	uint i;
    for(;k>0;k--)
	 {	for(i=0;i<124;i++)
	      {;}
	  }
}

//


//LCM忙判断
void lcd_busy(void)
{	p_di=0;
    p_rw=1;
    /*lcm=0xff;
    while(1)
     {  p_e=1;
        if(lcm<0x80)
         break;
        p_e=0;
     }
    p_e=0;*/
}
//写指令到LCM
void wcode(uchar c,uchar csl,uchar csr)
{	p_csl=csl;
    p_csr=csr;
    lcd_busy();
    p_di=0;
    p_rw=0;
    lcm=c;//将变量C赋予LCM
    p_e=1;
    p_e=0;
}
//写数据到LCM子函数
void wdata(uchar c,uchar csl,uchar csr)
{	p_csl=csl;
    p_csr=csr;
    lcd_busy();
    p_di=1;
    p_rw=0;
    lcm=c;//将变量C赋予LCM
    p_e=1;
    p_e=0;
}
//设定起始行
void set_startline(uchar i)
{	i=0xc0+i;
    wcode(i,1,1);
}
//定位X方向,Y方向
void set_xy(uchar x,uchar y)
{	x=x+0x40;
    y=y+0xb8;
    wcode(x,1,1);
    wcode(y,1,1);
}
//屏幕开启、关闭
void dison_off(uchar o)
{	o=o+0x3e;  //o为1为开,为0是关
    wcode(o,1,1);
}
//复位子函数
void reset()
{//delay(1000);
   	p_rst=0;
    delay(20);
    p_rst=1;
   delay(20);
}
//LCM初始化
void lcd_init(void)
{	uchar x,y;
    reset();
    dison_off(0);
    for(y=0;y<8;y++) 
     { for(x=0;x<128;x++)
         lw(x,y,0);
      }
    dison_off(1);
   set_startline(0);
}
//写数据到LCM
void lw(uchar x,uchar y,uchar dd)
{	if(x>=64)
      { 
	   set_xy(x-64,y);
       wdata(dd,0,1);
      }
     else
	  { set_xy(x,y);
	    wdata(dd,1,0);
	  }
  }
void xieshuju(uint csl,uint csr)
 {
  wcode(ye,csl,csr);
  wcode(lie,csl,csr);
  wdata(shu,csl,csr);
  }

void xianshi(uchar y1,uchar l1,uint k,uint csl,uint csr)
  {
   uchar j;
   lie=l1;
   for(j=0;j<8;j++,lie++)
   {
    ye=y1;
    shu=t[2*j+16*k];
	if (fanbai==1) shu=~shu;
    xieshuju(csl,csr);
	ye++;
	shu=t[2*j+1+16*k];
	if (fanbai==1) shu=~shu;
	xieshuju(csl,csr);
	}
	ye--;
   }

void caidanhanshu(uint b)
{
  xianshi(r,0x60,b,1,0); 
  b++;
  xianshi(r,0x68,b,1,0); 
   b++;
  xianshi(r,0x70,b,1,0); 
   b++;
  xianshi(r,0x78,b,1,0); 
   b++;
  xianshi(r,0x40,b,0,1); 
   b++;
  xianshi(r,0x48,b,0,1); 
   b++;
  xianshi(r,0x50,b,0,1); 
   b++;
  xianshi(r,0x58,b,0,1); 
 }
 void qinglin()
  {
  xianshi(r,0x60,10,1,0); 
  xianshi(r,0x68,10,1,0); 
  xianshi(r,0x70,10,1,0); 
  xianshi(r,0x78,10,1,0); 
  xianshi(r,0x40,10,0,1); 
  xianshi(r,0x48,10,0,1); 
  xianshi(r,0x50,10,0,1); 
  xianshi(r,0x58,10,0,1);
   }
void qingpin()
  {
 for(lie=0x40;lie<=0x7f;lie++)
  {
	 for(ye=0xb8;ye<=0xbf;ye++)
       {
	    shu=0x00;
		xieshuju(1,1);
	    }
	 }

  }

void xieyihangzi(uchar ye1,uint zi)
  {
 ye=ye1;
   for(lie=0x50;lie<=0x78;zi++)
   {
   xianshi(ye,lie,zi,1,0);
    } 
   
 for(lie=0x40;lie<=0x68;zi++)
     {
   xianshi(ye,lie,zi,0,1);
     } 
   }

void wenduchuli()
   {
    if((gao>>4)==0)
 {
 temp=(gao<<4)|(di>>4);
 tp[0]=temp/100;
 tp[1]=(temp%100)/10;
 tp[2]=temp%10;
 tp[3]=(di&0x0f)*625/1000;
 }
 else
  {
if(di==0)
 {
 di=~di+1;
 gao=~gao+1;
 }
  else
 {
  di=~di+1;
  gao=~gao;
  }
 tp[0]=191;
 temp=(gao<<4)|(di>>4);

 tp[1]=temp/10;
 tp[2]=temp%10;
   }
  }     

void xiexiaozi(uchar a,uchar b,uint c,uint csl,uint csr)
 {
 uchar i;
  ye=a;
  lie=b;
  for(i=0;i<4;i++)
  {
  shu=xzi[i+4*c];
  xieshuju(csl,csr);
  lie++;
  }
  }

void tuxing(uchar a,uint b,uint c)
 {
  ad=(tp[0]*100*5+tp[1]*10*5+tp[2]*5+tp[3]/2)-125;

          if(ad<=7)  ye=0xbf,shu=(0x80>>ad);
     else if(ad<=15) ye=0xbe,shu=(0x80>>(ad-8));
	 else if(ad<=23) ye=0xbd,shu=(0x80>>(ad-16));
     else if(ad<=31) ye=0xbc,shu=(0x80>>(ad-24));
     else if(ad<=39) ye=0xbb,shu=(0x80>>(ad-32));
	 else if(ad<=47) ye=0xba,shu=(0x80>>(ad-40));
	 else if(ad<=55) ye=0xb9,shu=(0x80>>(ad-48));
	 else if(ad<=63) ye=0xb8,shu=(0x80>>(ad-56));
	  if(lie==a)
	{
	d1=shu;
	d2=ye;
	}
	if(lie!=a)
	{
	 d3=shu;
	 d4=ye;
	 if(ye==d2)
	 {
	  if(shu>d1)
	 {
	 d5=shu;
	 d5=d5>>1;
	 while(d5!=d1)
	 {d5=d5>>1;
	 shu=shu|(shu>>1);}
	 }
	 if(shu<d1)
	 {
	 d5=shu;
	 d5=d5<<1;
	 while(d5!=d1)
	 {d5=d5<<1;shu=shu|(shu<<1);} 
	 }
	}
 
    if(ye<d2)
	 {
	     for(q=0;q<7;q++) 
	     {
		  shu=shu|(shu<<1);
		  } 
		  xieshuju(b,c);
	 	  ye++;
		  while(ye<d2) {shu=0xff,xieshuju(b,c),ye++;}
		  if(ye==d2){
		              shu=0x01;
					  if(shu<d1)
	                {
	                 d5=shu;
	                 d5=d5<<1;
	                 while(d5!=d1)
	                 {d5=d5<<1;shu=shu|(shu<<1);} 
	                  }
					  }
       }
	  if(ye>d2)
	 {
	     for(q=0;q<7;q++) 
	        {
		      shu=shu|(shu>>1);
		     }
		  xieshuju(b,c);
	 	  ye--;
		  while(ye>d2) {shu=0xff,xieshuju(b,c),ye--;}
		  if(ye==d2){
		              shu=0x80;
					  if(shu>d1)
	                   {
	                 d5=shu;
	                 d5=d5>>1;
	                 while(d5!=d1)
	                 {d5=d5>>1;shu=shu|(shu>>1);} 
	                    }
					 } 
      }
	  }
	if(lie!=a)
	{
	 d1=d3;
	 d2=d4;
	 }
xieshuju(b,c);
delay(200);
  }

/*****主函数****/
void main()

{   bit k1;
    uchar *ds18b20_rom;
	uchar k,yy,ll,k2;
    uint a=2,d=1,i,j,b,jisuan;
    lcd_init();
    delay(300);
/*while(1)
{


P2=0x00;
while(1);
delay(300);
 }*/
r=0xbb;
goto abc;
goto bbb;
aaa:
     while(sure==0)
	{
	 if(a==1) goto wendu1;
	 if(a==2) goto donghua;
	 if(a==3) goto shige;
	 if(a==4) goto set;
	 } 
 eee:
    r=0xb7;
    r=0xbb;
    while(xiayi==1)
    {
     goto aaa;
     }
    qinglin();
    while(xiayi==0);
     a++;
  if(a==5) a=1;
  if(a==1) goto bbb;
  if(a==2) goto ccc;
  if(a==3) goto fff;
  if(a==4) goto mmm;
     
 bbb:
    r=0xb7;
   	while(r!=0xbb)
	{  
  qinglin();
  r++; 
abc: 
  caidanhanshu(13);
  delay(100);
  }
 goto aaa;

 ccc:
    r=0xb7;
   	while(r!=0xbb)
	{  
  qinglin();
  r++; 
  caidanhanshu(21);
  delay(100);
  } 
  goto aaa;


fff:
  r=0xb7;
  while(r!=0xbb)
 {  
  qinglin();
  r++; 
  caidanhanshu(39);
  delay(100);
  } 
  goto aaa; 

mmm:
  r=0xb7;
  while(r!=0xbb)
 {  
  qinglin();
  r++; 
  xianshi(r,0x60,13,1,0); 
  xianshi(r,0x68,14,1,0); 
  xianshi(r,0x70,15,1,0); 
  xianshi(r,0x78,16,1,0); 
  xianshi(r,0x40,11,0,1);
  xianshi(r,0x48,12,0,1); 
  xianshi(r,0x50,96,0,1); 
  xianshi(r,0x58,97,0,1); 
  delay(100);
  } 
  goto aaa; 

donghua:
 qingpin();
 xianshi(0xb9,0x58,21,0,1);
 xianshi(0xb9,0x60,22,0,1);
 xianshi(0xbc,0x58,23,0,1);
 xianshi(0xbc,0x60,24,0,1);
 for(j=0;j<=1;j++)
 {
  i=0;
 for(lie=0x55;lie<=0x78;lie++)
  {
    for(ye=0xb9;ye<=0xbf;ye++)
    {
	
	 if(j==0) shu=tu1[i];
	 if(j==1) shu=tu2[i];
	 xieshuju(1,0);
	 i++;
	 }
   }   	 
   if(fanhui==0) goto hhh;
   delay(300);
   if(fanhui==0) goto hhh;
   }
 goto donghua;
hhh:
   qingpin();
   goto ccc;
wendu1:
   qingpin();
   goto bb;
/*   r=0xb7;
   	while(r!=0xbb)
	{  
  qinglin();
  r++; 
  xianshi(r,0x60,98,1,0); 
  xianshi(r,0x68,99,1,0); 
  xianshi(r,0x70,100,1,0); 
  xianshi(r,0x78,101,1,0); 
  xianshi(r,0x40,13,0,1);
  xianshi(r,0x48,14,0,1); 
  xianshi(r,0x50,15,0,1); 
  xianshi(r,0x58,16,0,1); 
  delay(100);
  }*/
wendu:   
    if(fanhui==0)  {qingpin();goto bbb;}
    while(sure==0)
	{
	 if(d==1) goto badianweudu;
	 if(d==2) goto tuxingxianshi;
    	 } 
ee:
    r=0xb7;
    r=0xbb;
    while(xiayi==1)
    {
     goto wendu;
     }
    qinglin();
    while(xiayi==0);
     d++;
  if(d==3) d=1;
  if(d==1) goto bb;
  if(d==2) goto cc;
bb:
    r=0xb7;
  while(r!=0xbb)
 {  
  qinglin();
  r++; 
  xianshi(r,0x60,98,1,0); 
  xianshi(r,0x68,99,1,0); 
  xianshi(r,0x70,100,1,0); 
  xianshi(r,0x78,101,1,0); 
  xianshi(r,0x40,13,0,1);
  xianshi(r,0x48,14,0,1); 
  xianshi(r,0x50,15,0,1); 
  xianshi(r,0x58,16,0,1); 
  delay(100);
  } 

⌨️ 快捷键说明

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