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

📄 lcd12864.h

📁 用单片机控制DDS芯片的函数发生器
💻 H
字号:
/**************************************************************************
  
   File Name:       LCD12864.h
   Author:          liuxinfa
   Created:         2008/8/1
   Modified:		NO
   Revision: 		1.0
   Email:           mc22@163.com
  

   带中文字库的液晶12864的C程序(MD12864C-1)!并口连接液晶!
   unsigned char LCD_Wait(void);//内部等待函数
   void LCD_Write(bit style, unsigned char input);//向LCD写入命令或数据
   void LCD_Initial();//初始化LCD
   void ClearLCD(void);
   void Set_xy(unsigned char xpos,unsigned char ypos); //设置显示位置
   void print(unsigned char x,unsigned char y,char* str);
   void printstr(unsigned char xpos,unsigned char ypos,unsigned char str[],unsigned char k);
***************************************************************************/

#include <intrins.h>         //因为要用到 _nop_();

//端口定义*****************************************************************
sbit LcdRs= P2^6;
sbit LcdRw= P2^5;
sbit LcdEn= P2^4;
//sbit PSB= P2^3;
//sbit RST= P2^2;
sfr  DBPort= 0x80;		//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口


//内部等待函数*************************************************************
unsigned char LCD_Wait(void)
{
	LcdRs=0;
	LcdRw=1;	_nop_();
	LcdEn=1;	_nop_();
	while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用LCD_Write()时,会进入死循环,
						 //可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
						 //实际硬件时打开此语句
	LcdEn=0;
	return DBPort;		
}


//向LCD写入命令或数据******************************************************
#define LCD_COMMAND			0      // Command
#define LCD_DATA			1      // Data
void LCD_Write(bit style, unsigned char input)
{
	LcdEn=0;
	LcdRs=style;
	LcdRw=0;		_nop_();
	DBPort=input;	_nop_();//注意顺序
	LcdEn=1;		_nop_();//注意顺序
	LcdEn=0;		_nop_();
	LCD_Wait();	
}


//初始化LCD************************************************************
//复位、通讯方式选择
void LCD_Initial()
{ 
//        RST=1;//复位
//        PSB = 1;       //通讯方式为并口
        //LCD_Write(LCD_COMMAND,0x34);  //34H--扩充指令操作
        LCD_Write(LCD_COMMAND,0x30);  //功能设置,一次送8位数据,基本指令集
        LCD_Write(LCD_COMMAND,0x0C);  //0000,1100 整体显示,游标off,游标位置off
        LCD_Write(LCD_COMMAND,0x01);  //0000,0001 清DDRAM
        LCD_Write(LCD_COMMAND,0x02);  //0000,0010 DDRAM地址归位
        LCD_Write(LCD_COMMAND,0x80);  //1000,0000 设定DDRAM 7位地址000,0000到地址计数器AC
}


//设置显示位置**********************************************************
//xpos(0~7),ypos(0~3)
void Set_xy(unsigned char xpos,unsigned char ypos)
{
        switch(ypos)
        {
             case 0: xpos |= 0x80;break;         //第一行
             case 1: xpos |= 0x90;break;         //第二行
             case 2: xpos |= 0x88;break;         //第三行
             case 3: xpos |= 0x98;break;         //第四行
             default:break;
        }
        LCD_Write(LCD_COMMAND,xpos);             //此处的Xpos已转换为LCM的显示寄存器实际地址
}


//在指定位置显示字符串***********************************************
void print(unsigned char x,unsigned char y,char* str)
{ 
        Set_xy(x,y);
        //while(*str!='\0')
        while(*str!=0)
	{
	     LCD_Write(LCD_DATA,*str);
	     str++;
	} 
}


//在指定位置显示字符串***********************************************
//K为显示字符的个数.
void printstr(unsigned char x,unsigned char y,unsigned char str[],unsigned char k)
{ 
        unsigned char n;
        Set_xy(x,y);
        for(n=0;n < k;n++)
        { 
             LCD_Write(LCD_DATA,str[n]);         //显示汉字时注意码值,连续两个码表示一个汉字
        }
}



//清屏******************************************************************
void ClearLCD(void)
{
        LCD_Write(LCD_COMMAND,0x01);
        //LCD_Write(LCD_COMMAND,0x34);
        //LCD_Write(LCD_COMMAND,0x30);
}

⌨️ 快捷键说明

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