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

📄 lcd128x64.c

📁 基于AT89S52的电子钟(LCD12864显示)
💻 C
📖 第 1 页 / 共 3 页
字号:
 {
  unsigned int i,j;
  for(i=0;i<t;i++)
  for(j=0;j<10;j++)
   ;
 }

/*-------------------------写命令到LCD------------------------------*/
void write_command(unsigned char cmdcode)
 {
  RS = 0;
  RW = 0;
  P0 = cmdcode;
  delay(0);
  E = 1;
  delay(0);
  E = 0;
 }

/*-------------------------写数据到LCD----------------------------*/

void write_data(unsigned char Dispdata)
 {
  RS = 1;
  RW = 0;
  P0 = Dispdata;
  delay(0);
  E = 1;
  delay(0);
  E = 0;
 }


/*------------------------清显示屏--------------------------------*/
void Clr_Scr()
 {
  unsigned char j,k;
  CS2=1;CS1=0;             // 清左半屏 //
   {
    write_command(Page_Add+0);
    write_command(Col_Add+0);
    for(k=0;k<4;k++)               // 清左上半屏 //
     {
      for(j=0;j<64;j++)
	  write_data(0x00);
     }
    for(k=0;k<4;k++)               // 清左下半屏 //
     {
      write_command(Page_Add+4);
      for(j=0;j<64;j++)
	  write_data(0x00);
     }
   }
  CS2=0;CS1=1;                     // 清右半屏 //
   {
    write_command(Page_Add+0);
    write_command(Col_Add+0);
    for(k=0;k<4;k++)               // 清右上半屏 //
     {
      for(j=0;j<64;j++)
	  write_data(0x00);
     }
    for(k=0;k<4;k++)               // 清右下半屏 //
     {
	  write_command(Page_Add+4);
      for(j=0;j<64;j++)
	  write_data(0x00);
     }
   }
 }
/*------------------显示12864图片---------------------------*/
void Disp_Img(unsigned char code *img)
 {
  unsigned char j,k;
  for(k=0;k<8;k++)
   {
    CS2=1;
	CS1=0;
	delay(10);
    write_command(Page_Add+k);
    write_command(Col_Add+0);
    for(j=0;j<64;j++) 
	 write_data(img[k*128+j]);
    CS2=0;
	CS1=1;
    delay(10);
    write_command(Page_Add+k);
    write_command(Col_Add+0);
    for(j=64;j<128;j++) 
	 write_data(img[k*128+j]);
   }
 }

/*---------------------指定位置显示数字8*16-----------------------*/

void sz_disp16(unsigned char pag,unsigned char col, unsigned char code *szk)
 {
  unsigned char j=0,i=0;
  for(j=0;j<2;j++)
   {
    write_command(Page_Add+pag+j);
    write_command(Col_Add+col);
    for(i=0;i<8;i++) 
	 write_data(szk[8*j+i]);
   }
 }

/*---------------------指定位置显示汉字16*16-----------------------*/

void hz_disp16(unsigned char pag,unsigned char col, unsigned char code *hzk)
 {
  unsigned char j=0,i=0;
  for(j=0;j<2;j++)
   {
    write_command(Page_Add+pag+j);
    write_command(Col_Add+col);
    for(i=0;i<16;i++) 
	 write_data(hzk[16*j+i]);
   }
 }


/*------------------初始化LCD屏--------------------------*/
void init_lcd()
 {
  RST=0;
  delay(100);
  RST=1;
  delay(100);

  CS2=1;
  CS1=1;

  delay(100);
  write_command(Disp_Off);
  write_command(Page_Add+0);
  write_command(Start_Line+0);
  write_command(Col_Add+0);
  write_command(Disp_On);
 }


/*-------------------------- 开机信息显示------------------------*/
void StartMsg(void)
 {
  Clr_Scr();         // 先清屏 //
  CS2=1;CS1=0;
  hz_disp16(0,32,huan);      //  欢
  delay(2000);
  hz_disp16(0,48,ying);      //  迎
  delay(2000);
  CS2=0;CS1=1;
  hz_disp16(0,0,shi1);       //  使
  delay(2000);
  hz_disp16(0,16,yong);      //  用
  delay(2000);
  CS2=1;CS1=0;
  hz_disp16(2,32,shu);       //  数
  delay(2000);
  hz_disp16(2,48,ma);        //  码
  delay(2000);
  CS2=0;CS1=1;
  hz_disp16(2,0,shi);        //  时
  delay(2000);
  hz_disp16(2,16,zhong);     //  钟
  delay(2000);

  CS2=1;CS1=0;
  hz_disp16(5,16,zhi);       //  制
  delay(2000);
  hz_disp16(5,32,zuo);       //  作
  delay(2000);
  hz_disp16(5,48,maohao);    //  :
  delay(2000);
  CS2=0;CS1=1;
  hz_disp16(5,0,liu);       //  刘
  delay(2000);
  hz_disp16(5,16,bing);      //  兵
  delay(2000);
  hz_disp16(5,32,gantanhao);     //  !
  delay(2000);
 }
/*------------------------时钟固定汉字显示-----------------------*/
void ClockMsg(void)
 {
  Clr_Scr();         // 先清屏 //
  
  CS2=1;CS1=0;       // 左屏
  hz_disp16(1,32,xing);       //  星
  hz_disp16(1,48,qi);       //  期
  sz_disp16(3,0,shuzi[2]);       //  2
  sz_disp16(3,8,shuzi[0]);       //  0
  hz_disp16(3,32,nian);     //  年
  hz_disp16(5,48,shi2);     //  时

  CS2=0;CS1=1;       // 右屏
  hz_disp16(3,0,yue);      //  月
  hz_disp16(3,32,ri);      //  日
  hz_disp16(5,16,fen);      //  分
  hz_disp16(5,48,miao);     //  秒
 }


/*-----------------------时钟部分---------------------------*/

///////////////////////////////////////////////
///// 函数名:   写入字节子函数          //////
///// 函数功能: 写入一个字节到对应地址  //////
///// 函数参数: 有(写入的字节内容)      //////
///// 返回值:   无                      //////
///////////////////////////////////////////////

void InputByte(unsigned char dat) 
 { 
  unsigned char i;
  ACC = dat;
  for(i=8; i>0; i--)
   {
    IO = ACC0;      
    CLK = 1;          //下降沿写入数据//
    CLK = 0;
    ACC = ACC >> 1; 
   } 
 }

/************************************************************************************///*时钟部分*/↓
///////////////////////////////////////////////
///// 函数名:   读出字节子函数          //////
///// 函数功能: 从对应地址读出一个字节  //////
///// 函数参数: 无                      //////
///// 返回值:   有(读出的字节内容)      //////
///////////////////////////////////////////////

OutputByte(void) 
 { 
  unsigned char i;
  for(i=8; i>0; i--)
   {
    ACC = ACC >>1; 
    ACC7 = IO;
    CLK = 1;           //上升沿读出数据//
    CLK = 0;
   } 
  return(ACC); 
 }
/*************************************************************************************************/ 
/////////////////////////////////////////////
///// 函数名:   写入字节完整子函数    //////
///// 函数功能: 写入一个字节到DS1302  //////
///// 调用: InputByte()               //////
///// 函数参数: 有(写入的地址和数据)  //////
///// 返回值:   无                    //////
/////////////////////////////////////////////

void WriteTo1302(unsigned char Addr,unsigned char Date)
 {
  RST2 = 0;
  CLK = 0;
  RST2 = 1;
  InputByte(Addr);       // 先给地址,命令 //
  InputByte(Date);       // 再写入一字节数据 //
  CLK = 1;
  RST2 =0;
 }                                                      
/*************************************************************************************************/ 
/////////////////////////////////////////////
///// 函数名:   读出字节完整子函数    //////
///// 函数功能: 从DS1302读出一个字节  //////
///// 调用: InputByte(); OutputByte() //////
///// 函数参数: 无                    //////
///// 返回值:   有(读出的字节内容)    //////
/////////////////////////////////////////////

ReadFrom1302(unsigned char Add)
 {
  unsigned char Date;
  RST2 = 0;
  CLK = 0;
  RST2 = 1;
  InputByte(Add);         // 先给地址,命令 //
  Date = OutputByte();      // 再读一字节数据 //
  CLK = 1;
  RST2 =0;
  return(Date);
 }
/*************************************************************************************************/

⌨️ 快捷键说明

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