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

📄 1602.c

📁 Freescale控制5110液晶程序
💻 C
字号:

#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
#include "1602.h"


void delayms(int ms)
{   
   int ii,jj;
   for(ii=0;ii<ms;ii++)
   for(jj=0;jj<4338;jj++);    //40MHz--1ms      
}

/*********************************************
 1602


**********************************************/
/*****************************************************
函数功能:判断液晶模块的忙碌状态
返回值:result。result=1,忙碌;result=0,不忙
***************************************************/
uchar bt(void)
{     
    	uchar result;
      DSFR = 0x00;
		  RS=0;       //根据规定,RS为低电平,RW为高电平时,可以读状态
    	RW=1;
    	E=1;        //E=1,才允许读写
    	delayms(1);   //空操作    	 
   		   //空操作四个机器周期,给硬件反应时间	
    	result=P0&0x80;  //将忙碌标志电平赋给result
	  	E=0;
	  	DSFR=0xFF;
    	return result;
}
/*****************************************************
函数功能:将模式设置指令或显示地址写入液晶模块
入口参数:dictate
***************************************************/
void write_com (uchar dictate)
{   //delayms(200);
   while(bt()!=0); //如果忙就等待
	 RS=0;                  //根据规定,RS和R/W同时为低电平时,可以写入指令
	 RW=0;   
	 E=0;                   //E置低电平(写指令时,
                             // 就是让E从0到1发生正跳变,所以应先置"0"
	 delayms(2);             //空操作两个机器周期,给硬件反应时间
	 P0=dictate;            //将数据送入P0口,即写入指令或地址
	 delayms(4);               //空操作四个机器周期,给硬件反应时间
	 E=1;                   //E置高电平
	 delayms(4);               //空操作四个机器周期,给硬件反应时间
	 E=0;                  //当E由高电平跳变成低电平时,液晶模块开始执行命令
 }
/*****************************************************
函数功能:指定字符显示的实际地址
入口参数:x
***************************************************/
 void writeadd(uchar x)
 {
     write_com(x|0x80); //显示位置的确定方法规定为"80H+地址码x"	
 }
/*****************************************************
函数功能:将数据(字符的标准ASCII码)写入液晶模块
入口参数:y(为字符常量)
***************************************************/
 void writedata(uchar y)
 {
    while(bt()==1);  
	  RS=1;           //RS为高电平,RW为低电平时,可以写入数据
	  RW=0;
	  E=0;            //E置低电平(写指令时,,
                       // 就是让E从0到1发生正跳变,所以应先置"0"
	  P0=y;           //将数据送入P0口,即将数据写入液晶模块
    delayms(4);
       //空操作四个机器周期,给硬件反应时间
	  E=1;          //E置高电平
    delayms(4);        //空操作四个机器周期,给硬件反应时间
	  E=0;            //当E由高电平跳变成低电平时,液晶模块开始执行命令
 }

void write_add_dat(uchar add,uchar dat)
{
  	writeadd(add);
	writedata(dat);
 }

 void LcdInt(void)
{
    delayms(15);  //延时15ms,首次写指令时应给LCD一段较长的反应时间
   	write_com(0x38);  //显示模式设置:16×2显示,5×7点阵,8位数据接口
    delayms(5);
	write_com(0x38);
    delayms(5);
	write_com(0x38); //3次写 设置模式
    delayms(5);
	write_com(0x0C);  //显示模式设置:显示开,有光标,光标闪烁
    delayms(5);
	write_com(0x06);  //显示模式设置:光标右移,字符不移
    delayms(5);										  
	write_com(0x01);  // 清屏幕指令,将以前的显示内容清除
    delayms(5);
 }
 
 void print(uchar *str) 
 { 
   while(*str!='\0')
   {
      writedata(*str);
      str++;
   }
 }
void printstr(uchar x,uchar y,uchar *str)
{
	if(y==0) 
	{ 
	writeadd(0x00+x);
	print(str);
	} 
	else if(y==0) 
	{ 
	writeadd(0x40+x);
	print(str);
	} 
	else
	{
  write_add_dat(0x01,'E');
	write_add_dat(0x01,'R');
	write_add_dat(0x02,'R');
	write_add_dat(0x03,'O');
	write_add_dat(0x04,'R');
	write_add_dat(0x05,'!');	
	}


}

⌨️ 快捷键说明

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