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

📄 lcd._c

📁 使用Mega128单片机编写的液晶、串口、菜单的C程序。
💻 _C
字号:
#include <iom128v.h>
#include <macros.h>
#include "stdtypes.h"
#include "lcd.h"


UNS8  XPOS, YPOS;//定义位置全局变量

void delay(UNS16 num)
{
	//UNS8 i;
	//for(i=0;i<100;i++)
	while(num--);
}

//判断LCD是否忙?
void lcd_idle(void)
{  
   LCD_R
   LCD_I
   LCD_EN
   while((LCD_PORT & 0x80)==0x80);
   LCD_NE
}

/*LCD读命令和数据函数*/
//ins_data =1 data ,=0 instruction
//address 8bit 
UNS8 LCD_read(UNS8 ins_data)
{
 	 delay(400);
 	 lcd_idle();
 	 LCD_R
	 if (ins_data==1)
	 {
	  LCD_D	
	 }
	 else 
	 {
	  LCD_I
	 }
	return LCD_PORT;
}

/*LCD写命令函数*/
//ins_data =1 data ,=0 instruction
//address 8bit 
void LCD_write_ins(UNS8 data)
{
	 lcd_idle();
 	 LCD_W
	 LCD_I
	 LCD_PORT = data;
	 LCD_EN
	 delay(1);
	 LCD_NE
	 delay(2000);
}
/*LCD写数据函数*/
//ins_data =1 data ,=0 instruction
//address 8bit 
void LCD_write_data(UNS8 data)
{ 
	 //lcd_idle();
 	 LCD_W
	 LCD_D	
	 LCD_PORT = data;
	 LCD_EN
	 delay(1);
	 LCD_NE 
	 delay(100);
}



//LCD 初始化
void LCD_init(void)
{
 LCD_write_ins(0x01);//Clear Display
 LCD_write_ins(0x38);//Function set
 LCD_write_ins(0x38);//Function set
 LCD_write_ins(0x38);//Function set
 LCD_write_ins(0x38);//Function set
 LCD_write_ins(0x06);//Entry mode set 
 LCD_write_ins(0x0D);//Display on / off control
 
 //Write data to CG RAM / DD RAM
 /*LCD_write_data(0x49);//I
 LCD_write_data(0x20);//空格
 LCD_write_data(0x4C);//L
 LCD_write_data(0x4F);//0
 LCD_write_data(0x56);//V
 LCD_write_data(0x45);//E
 LCD_write_data(0x20);//空格
 LCD_write_data(0x59);//Y
 LCD_write_data(0x4F);//0
 LCD_write_data(0x55);//U
 LCD_write_data(0x20);//空格
 LCD_write_data(0x21);//!
 */
 //LCD_write_str(0, 0, "RobinLee        ");
 //LCD_write_str(0, 1, "          123456");
}

void LCD_pos(void)// 改变LCD的显示位置
{  
   XPOS &= 0x0F;
   YPOS &= 0x03;
   if(YPOS==0x00)
      LCD_write_ins(XPOS|0x80);
   else if(YPOS==0x01)
      LCD_write_ins((XPOS+0x40)|0x80);
}

void LCD_set_xy( unsigned char x, unsigned char y )  //写地址函数
{
    unsigned char address;
    if (y == 0) address = 0x80 + x;
    else   address = 0xc0 + x;
    LCD_write_ins( address);
}


void LCD_fill(UNS8 n)//LCD填充
{
   for(YPOS=0;YPOS<2;YPOS++)
      for(XPOS=0;XPOS<16;XPOS++)
      {  
	  	LCD_pos();
        LCD_write_data(n); 
	  }
}


void LCD_write_str(UNS8 x,UNS8 y,UNS8 *s)
{  
   YPOS=y;
   for(XPOS=x;XPOS<16;XPOS++)
   {  
   	  LCD_pos();
      LCD_write_data(*s);
      s++;
      //delay(2000);
   }
}
/***************************************************显示数组里面的值by Robin
void LCD_write_row(UNS8 x,UNS8 y,char row[16])
{  
   UNS8 m;
   YPOS=y;
   
   for(XPOS=x;XPOS<16;XPOS++)
   {  
   	  LCD_pos();
      for(m=1;m<=16;m++)
	  {LCD_write_data(row[m]);}
	  
      //delay(2000);
   }
}
*/
void LCD_write_char(unsigned char X,unsigned char Y,unsigned char data) //列x=0~15,行y=0,1
{
  LCD_set_xy( X, Y ); //写地址
  LCD_write_data( data);
  
}

void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s) //列x=0~15,行y=0,1
{
    LCD_set_xy( X, Y ); //写地址    
    while (*s)  // 写显示字符
    {
      LCD_write_data( *s );
      s ++;
    }
      
}

⌨️ 快捷键说明

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