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

📄 ocm12864.c

📁 12864drver you can use do something happy
💻 C
📖 第 1 页 / 共 2 页
字号:

void chk_busy (void)                           //测试LCD是否处于忙状态
{
  data_port=0xff;
  di=0;
  rw=1;
  ;
  e=1;
  while(bf||res==1);
  e=0;
}

void wr_lcd (uchar data_command,uchar content)	//写数据或命令到LCD
{
  chk_busy ();
  di=data_command;
  rw=0;
  data_port=content;
  e=1;
  ;
  e=0;
}


void lattice_disp (uchar data1,uchar data2)	   //写点阵 整屏清 
{
  uchar i,j;
  cs1=1;cs2=1;
 wr_lcd (command,disp_on);     //开显示
  for(j=0;j<8;j++)
  {
    wr_lcd (command,disp_x+j);	//   X   0~7   表示选择页地址
    wr_lcd (command,disp_z); 	//   Z	 0~63	  表示行选择地址
    wr_lcd (command,disp_y);	//	 Y   0~63	  表示行具体某一位
    for(i=0;i<32;i++)          //16X16点阵为32个数据组成
    {
      wr_lcd (data,data1);					  
      wr_lcd (data,data2);
    }
  }
}

void chn_disp (uchar t_f,uchar x,uchar y,uchar xl,uchar yl,uchar row_xl,uchar row_yl,uchar code *chn)
{							//指定位置(x,y)显示row_xl行(每行row_yl个)汉字(大小8xl*yl)
   uchar i,j,k,l,a;
  wr_lcd (command,disp_on);   //开显示
  for(l=0;l<row_xl;l++)	   //数据行数
  {
    for(k=0;k<row_yl;k++)  //每行16位数据
    {
      for(j=0;j<xl;j++)	   
      {
        wr_lcd (command,disp_x+x+l*xl+j);
        wr_lcd (command,disp_z);
        wr_lcd (command,disp_y+y+k*yl);
        a=l*xl*yl*row_yl+k*xl*yl+j*yl;
		if(t_f==0)
        for(i=0;i<yl;i++)
          wr_lcd (data,chn[a+i]);
      }
    }
  }
}
 
void init_lcd (void)                        // LCD初始化
{
  delay(30);
  rst=0;
  rst=1;
  cs1=1;cs2=1;
  wr_lcd (command,disp_off);
  wr_lcd (command,disp_on);
}

    

void display (void)                         //   待机显示
{
  lattice_disp(0x00,0x00);
/**********************************************************/
  cs1=1;cs2=0;
  chn_disp (0,0,0,2,8,1,1,digital1+2*16);
  chn_disp (0,0,8,2,8,1,1,digital1+0*16);
  chn_disp (0,0,16,2,8,1,1,digital1+(year/10)*16);
  chn_disp (0,0,24,2,8,1,1,digital1+(year%10)*16);
  chn_disp (0,0,32,2,16,1,1,timepoint+96);               //年
  chn_disp (0,0,48,2,8,1,1,digital1+(month/10)*16);
  chn_disp (0,0,56,2,8,1,1,digital1+(month%10)*16);

/*---------------------------------------------------------*/
  cs1=0;cs2=1;
  chn_disp (0,0,0,2,16,1,1,timepoint+128);		       //月
  chn_disp (0,0,16,2,8,1,1,digital1+(date/10)*16);
  chn_disp (0,0,24,2,8,1,1,digital1+(date%10)*16);
  chn_disp (0,0,32,2,16,1,1,timepoint+160);			   //日

/*---------------------------------------------------------*/
   cs1=1;cs2=0;

  chn_disp (0,2,16,2,8,1,1,digital1+(hour/10)*16);
  chn_disp (0,2,24,2,8,1,1,digital1+(hour%10)*16);
  chn_disp (0,2,32,2,16,1,1,timepoint);			        //时
  chn_disp (0,2,48,2,8,1,1,digital1+(minite/10)*16);
  chn_disp (0,2,56,2,8,1,1,digital1+(minite%10)*16);

/*---------------------------------------------------------*/

  cs1=0;cs2=1;

  chn_disp (0,2,0,2,16,1,1,timepoint+32);			   //分
  chn_disp (0,2,16,2,8,1,1,digital1+(second/10)*16);
  chn_disp (0,2,24,2,8,1,1,digital1+(second%10)*16);
  chn_disp (0,2,32,2,16,1,1,timepoint+64);			   //秒

/*---------------------------------------------------------*/

  cs1=1;cs2=0;

  chn_disp (0,4,8,2,16,1,2,timepoint+192);			   //星期
  chn_disp (0,4,40,2,16,1,1,digital2+(week*16));			     

/*---------------------------------------------------------*/

 cs1=0;cs2=1;

  chn_disp (0,4,0,2,16,1,2,setdisp+128);			    //温度
  chn_disp (0,4,32,2,8,1,1,digital1+(Temper/10)*16);    
  chn_disp (0,4,40,2,8,1,1,digital1+(Temper%10)*16);	
  chn_disp (0,4,48,2,16,1,1,setdisp+384);
/*---------------------------------------------------------*/

  cs1=1;cs2=0;

  chn_disp (0,6,0,2,16,1,4,Company);	

/**********************************************************/

  cs1=0;cs2=1;

  chn_disp (0,6,0,2,16,1,3,Company+128);

/**********************************************************/
}

void display1 (void)                         //设定显示屏
{
  lattice_disp(0x00,0x00);
  cs1=1;cs2=0;
  chn_disp (settimeoff_on,0,0,2,16,1,2,setdisp+0);     //时间设定
  chn_disp (settimeoff_on,0,32,2,16,1,2,setdisp+256);	 
  chn_disp (setdateoff_on,2,0,2,16,1,2,setdisp+64);	 //日期设定
  chn_disp (setdateoff_on,2,32,2,16,1,2,setdisp+256);	 
  chn_disp (settempoff_on,4,0,2,16,1,2,setdisp+128);	 //温度设定
  chn_disp (settempoff_on,4,32,2,16,1,2,setdisp+256);
  chn_disp (setdelayoff_on,6,0,2,16,1,2,setdisp+192);	 //定时设定
  chn_disp (setdelayoff_on,6,32,2,16,1,2,setdisp+256);


  cs1=0;cs2=1;
  chn_disp (0,0,0,2,8,1,1,digital1+(hour/10)*16);	   //一行 时间设定
  chn_disp (0,0,8,2,8,1,1,digital1+(hour%10)*16);
  chn_disp (0,0,16,2,8,1,1,point);
  chn_disp (0,0,24,2,8,1,1,digital1+(minite/10)*16);
  chn_disp (0,0,32,2,8,1,1,digital1+(minite%10)*16);
  chn_disp (0,0,40,2,8,1,1,point);
  chn_disp (0,0,48,2,8,1,1,digital1+(second/10)*16);
  chn_disp (0,0,56,2,8,1,1,digital1+(second%10)*16);


  chn_disp (0,2,0,2,8,1,1,digital1+(year/10)*16);	    //二行 日期设定
  chn_disp (0,2,8,2,8,1,1,digital1+(year%10)*16);
  chn_disp (0,2,16,2,8,1,1,point+16);
  chn_disp (0,2,24,2,8,1,1,digital1+(month/10)*16);
  chn_disp (0,2,32,2,8,1,1,digital1+(month%10)*16);
  chn_disp (0,2,40,2,8,1,1,point+16);
  chn_disp (0,2,48,2,8,1,1,digital1+(date/10)*16);
  chn_disp (0,2,56,2,8,1,1,digital1+(date%10)*16);
	
  chn_disp (0,4,8,2,8,1,1,digital1+(Temper/100)*16);    //三行 温度设定
  chn_disp (0,4,16,2,8,1,1,digital1+(Temper/10)*16);	
  chn_disp (0,4,24,2,8,1,1,point+32);
  chn_disp (0,4,32,2,8,1,1,digital1+(Temper%10)*16);
  chn_disp (0,4,40,2,16,1,2,setdisp+384);

  chn_disp (0,6,0,2,8,1,1,digital1+(sethour/10)*16);	 //四行 定时设定
  chn_disp (0,6,8,2,8,1,1,digital1+(sethour%10)*16);
  chn_disp (0,6,16,2,8,1,1,point);
  chn_disp (0,6,24,2,8,1,1,digital1+(setminite/10)*16);
  chn_disp (0,6,32,2,8,1,1,digital1+(setminite%10)*16);
  chn_disp (0,6,40,2,16,1,1,setdisp+320+(setoff_on*16));
  chn_disp (0,6,56,2,8,1,1,digital1+setnumber*16);

}


void main ()                             // 主程序
{

	TMOD=0x11;		 
 	TL0=0xF0;
 	TH0=0xD8;
	PT0=1;
	TR0=1;
	ET0=1;

 	TL1=0x00;
 	TH1=0x00;
	PT1=0;
	TR1=0;
	ET1=1;
	EA=1;
 delay(65535);
 delay(65535);
  init_lcd ();
 delay(65535);
  while(1)
  {
   delay(50000);
  display();}
}



void t0(void) interrupt 1 using 1
{  
 TL0=0xF0;			     //定时器自动装载方式,10ms定时
 TH0=0xD8; 
	mir++;
	if(mir==100)
	{
	  mir=0;
      second++;	
	  if(second==59)
	   {
	    second=0;
	    minite++;
		  if(minite==59)
            {
              minite=0;
              hour++;
				if(hour==12) hour=1;	 
            }
        }
	
	 }
}


void t1(void) interrupt 3 using 1
{  
 	TL1=0x00;		//定时器自动装载方式,65.535ms定时
 	TH1=0x00;
	b++;
if(b==15)
    {
	 b=0;
    if(falg==0)
	display();
	if(falg==1)
	display1();
	}
}

⌨️ 快捷键说明

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