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

📄 12864.c.120724153604

📁 atmega128串行操作lcd12864
💻 120724153604
字号:
/*****************************************
 *文件名:lcd12864.c
 *功能:LCD12864串行方式AVR驱动程序
 *日期:2010年7月10日
 ****************************************/
 
#include "12864.h"		//包含头文件

/*****************************************
 *函数名:delay_12864
 *功能:利用寄存器操作实现延时效果
 *参数:延时变量x
 *返回值:无
 ****************************************/

void delay_ms(uint x) 
{ 
	uint i,j; 
	for(j=0;j<x;j++)  
		for(i=0;i<1141;i++); 
}

void delay_us(uint x) 
{ 
	uint i,j; 
	for(j=0;j<x;j++)  
		for(i=0;i<40;i++); 
}

//清屏
void CLE_Screen(void)
{
Write_Command(CLR_SCREEN);
delay_ms(7);
}
 
/*****************************************
 *函数名:send_command
 *功能:向LCD控制器的寄存器写指令
 *参数:指令command_data
 *返回值:无
 ****************************************/
void LCD_init(void)
{
delay_ms(100);
DDRE|=(1<<5);
DDRE|=(1<<3);
DDRE|=(1<<1);
delay_ms(1);
CLE_Screen();
Write_Command(RE_ADDR);//显示地址归位0x02
Write_Command(BASIC);//选择基本指令集0x30
Write_Command(CURSOR_OFF);//光标关
Write_Command(0x08);
Write_Command(0x10);
Write_Command(0x38);
Write_Command(0x80);
Write_Command(DISPLYAY_ON);//开显示0x0c
}
//向12864发送一个字节的数据
void Write_One_Date(unsigned char date)
{
unsigned char i;
SCLK_CLE;//时钟总线拉低
delay_us(1);
for(i=0;i<8;i++)//把数据送到线上去
{
  if(date&0x80)
    {SID_SET;}
  else
      {SID_CLE;}

delay_us(1);
 SCLK_SET;//时钟总线拉高,数据传送给显示屏
 delay_us(1);
 SCLK_CLE;
 delay_us(1);
 date=date<<1;//高位先发
}
}

//发送命令
void Write_Command(unsigned char CMD)
{
CS_SET;
Write_One_Date(0xf8);//命令控制字
Write_One_Date(CMD&0xf0);
Write_One_Date(CMD&0x0f);//低位转高
CS_CLE;
delay_us(40);

}

//发送一个字符
void Write_one_char(unsigned char dat)
{
CS_SET;
Write_One_Date(0xfa);
Write_One_Date(dat&0xf0);
Write_One_Date(dat&0X0f);
CS_CLE;
delay_us(40);
}
//在指定的位置显示一个字母
void Lcd_putsachar(unsigned char x,unsigned char y,char dat)
{
char addr;
switch(x)//计算显示的位置
    {
	case 0:
	   {addr=y+0x80;
	   break;
	   } 
	case 1:
	   {
	   addr=y+0x90;
	   break;
	   } 
	case 2:
	   {
	   addr=y+0x88;
	   break;
	   }
	case 3:
	   {
	   addr=y+0x98;
	   break;
	   }
	 }
Write_Command(addr);//写地址到显示屏
Write_one_char(dat);//写数据
}
//从指定的位置开始显示汉字或字符
void Lcd_puts_any(unsigned char x,unsigned char y, char *p)
{
char addr,i;
switch(x)
    {
	case 0:
	   {addr=y+0x80;
	   break;
	   } 
	case 1:
	   {
	   addr=y+0x90;
	   break;
	   } 
	case 2:
	   {
	   addr=y+0x88;
	   break;
	   }
	case 3:
	   {
	   addr=y+0x98;
	   break;
	   }
	 }
Write_Command(addr);
while(*p!='\0')//'\0'字符串结束标志
  {
 Write_one_char(*p); 
 p++;
  }
}

⌨️ 快捷键说明

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