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

📄 ocm12864.c

📁 超声波测距+温湿度传感器
💻 C
📖 第 1 页 / 共 2 页
字号:
////*****判忙函数****////
////*****************////
void check_busy()
{
 uchar read_data=0xff;   
 clear_rs();        
 set_rw();
 clear_cs();
 LCD_DIN_EN ;
 
 do
 {
 set_en();
 _NOP();
 _NOP();
 read_data=lcddata_in;
 clear_en();
 }while(read_data&0x80);
 
 set_cs();
 LCD_DOUT_EN;
}
////*****************////
////***写数据函数****////
////*****************////
void write_data(uchar dat)
{
 check_busy();
 set_rs();
 clear_rw();
 clear_cs();
 lcddata_out=dat;
 set_en();
 _NOP();
 _NOP();
 clear_en(); 
 set_cs();
}
////*****************////
////****写命令函数***////
////*****************////
void write_command(uchar command)
{
 check_busy();
 clear_rs();
 clear_rw();
 clear_cs();
 lcddata_out=command;
 set_en();
 _NOP();
 _NOP();
 clear_cs();
 set_cs();
}
////*****************////
////*****复位函数****////
////*****************////
void reset(void)
{
 
 clear_reset();
 LCD_Delay(200);
 set_reset();
}
////*****************////
////*****清屏函数****////
////*****************////
void clear_screen(uchar m)
{
 uchar i,j;
 write_command(0x40);        //设置起始行
 for(i=0;i<8;i++)
  {
  write_command(i|0xb0);     //设置起始页
  write_command(0x10);       //设置列的高八位
  write_command(0x00);       //设置列的低八位
  for(j=0;j<128;j++)
   {
    write_data(m);           //设置清屏方式
   }
  }
}
////*****************////
////***初始化函数****////
////*****************////
void lcd_initial()
{
 P2DIR=0XFF;
 clear_en();
 clear_rw();
 clear_cs();
 reset();

 write_command(0xe2);          //复位函数
 write_command(0xa2);          //液晶背光电压选择
 write_command(0xa0);          //液晶驱动输出和内部RAM列选择
 write_command(0xc0);          //控制输出模式选择
 write_command(0x24);          //液晶背光灯电压设置为总电压的50%
 write_command(0x81);          //液晶背光灯电压设置控制使能
 write_command(0x28);          //对比度控制,液晶所有控制电压全关
 write_command(0x2f);          //对比度控制,液晶所有控制电压全开
 write_command(0xa6);          //现实模式设置(正常)
 write_command(0xaf);          //开显示
 write_command(0xa5);          //液晶上所有显示点开
 LCD_Delay(1000);  
 write_command(0xa4);          //液晶正常显示
 clear_screen(0);              //以清屏
 write_command(0x40);          //显示起始行设置
 write_command(0xb0);          //设置起始页
 write_command(0x10);          //设定列高八位
 write_command(0x00);          //设定列低八位

}
////*****************////
////**设行起始页位置**////
////*****************////
void set_page_address(uchar page)
{
 write_command(0xb0|page);
}
////*****************////
////**设定起始列位置**////
////*****************////
void set_colume_address(uchar colume)
{
 uchar temp;
 temp=colume>>4;
 write_command(temp|0x10);     //先送列的高三位
 temp=colume&0x0f;
 write_command(temp|0x00);     //再送列的低四位
}
////*****************////
//在指定位置显示一个字符//
////*****************////
void disp_word(uchar col,uchar pag,uchar ascii)    //列col 0~127  小行pag 0~7  字符ascii
{                                                  //4行16列时(8*i,2*j,ascii);
  uchar i,tmp;
  uint x;
  x=(ascii-0x20)*0x10;                        //字符从0x20开始起,每个16位
  write_command((adj_page[pag]&0x07)|0xb0);   //设置页地址
  tmp=col>>4;
  write_command(tmp|0x10);                    //显示列的高四位
  tmp=col&0x0f;                              
  write_command(tmp);                         //显示列的低四位
  for(i=0;i<8;i++)
  {
   write_data(ASCIIchardot[x]);               //通过查找ASCIIchardot表得到相应字符串
   x++;
  } 
  pag++;//写下半页
  write_command((adj_page[pag]&0x07)|0xb0);   //设置页地址
  tmp=col>>4;
  write_command(tmp|0x10);                    //显示列的高四位
  tmp=col&0x0f;
  write_command(tmp);                         //显示列的低四位
  for(i=0;i<8;i++)
  {
   write_data(ASCIIchardot[x]);
   x++;
  }
  pag--;                                       //写完一个字符页还原
}

////*****************////
//在指定位置显示一个汉字//
////*****************////
void disp_chn(uchar col,uchar pag,uchar cn)    //列col 0~127  小行pag 0~7  汉字cn tab表中的序号0~x
{                                              //4行8列时(16*i,2*j,cn);
  uchar i,tmp;
  uint x;
  x=cn<<5;
  write_command((adj_page[pag]&0x07)|0xb0);   //设置页地址
  tmp=col>>4;
  write_command(tmp|0x10);                    //显示列的高四位
  tmp=col&0x0f;                              
  write_command(tmp);                         //显示列的低四位
  for(i=0;i<16;i++)
  {
   write_data(tab[x]);                        //通过查找tab表得到相应字符串
   x++;
  }
  pag++;                                      //写下半页
  write_command((adj_page[pag]&0x07)|0xb0);   //设置页地址
  tmp=col>>4;
  write_command(tmp|0x10);                    //显示列的高四位
  tmp=col&0x0f;
  write_command(tmp);                         //显示列的低四位
  for(i=0;i<16;i++)
   {
   write_data(tab[x]);
   x++;
   }
   pag--;                                       //写完一个字符页还原
}
////*****************////
//在指定位置显示一个字符串//
////*****************////
void disp_str(uchar col,uchar pag,uchar *cn)    
{
   while(*cn!=0)
  {
    if(col==128)
    {
      pag+=2;
      col=0;
    }
    if(pag==8)
    {
      pag=0;
    }
    disp_word(col,pag,*cn++);
    col+=8;
  }
}

////***************************/////
////**在指定的位置显示一个点***/////
////***************************////
void setpoint(uchar x,uchar y)     //x横坐标 0-127 往右   y纵坐标 0-63 往下
{
 set_page_address(y/8);      //y用以确定某一页,0-7页
 set_colume_address(x);   //x用于确定某一列,0-127列
 write_data(0x01<<(y%8));  //再y确定某一页的具体点
 
}

////***************************/////
////**在指定行pag低端的位置显示一个点***/////
////***************************////
void point(uchar x,uchar y)
{
 set_page_address(x);      //x用以确定某一页,0-7页
 set_colume_address(y);   //Y用于确定某一列,0-127列
 write_data(0x80);
 
}

////***************************/////
////********显示图片***********/////
////***************************////
void disp_bmp( uchar const *puts )
{
  uchar i,j;
  write_command(0x40);     
  for(i=8;i>0;i--)
  {
    write_command((i-1)|0xB0);
    write_command(0x10);      
    write_command(0x00);      
    for(j=0;j<128;j++)
    {
      write_data( *puts++ );                       
     }
   }
}

////***************************/////
////*********显示竖线*********/////
////***************************////
void shuxian(uchar n,uchar e,uchar f)  //列 n 0-127  e,f行 0-7 从e行到f行画竖线
{
 uint i;
 for(i=e;i<(f+1);i++)
 {
 set_page_address(i);
 set_colume_address(n); 
 write_data(0xff);
 }
}
////***************************/////
////*********显示横线*********/////
////***************************////
void hengxian(uchar k)     //行 k 0-7 底端画横线
{
 uint i;
 for(i=0;i<128;i++)
 {
  point(k,i);
  //write_data(0xff);
 }
}
////*****************////
////*****延时函数****////
////*****************////
void LCD_Delay(unsigned long v)
{
 while(v--);
}

⌨️ 快捷键说明

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