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

📄 1602.c

📁 光电池LED自动照明控制系统的设计与实现
💻 C
字号:

#include "1602.h"
#include "bit.h"
//===================================
//液晶读写控制定义
#define E  P0_10
#define RW_bit P0_9
#define RS_bit P0_8
#define LCD_data P1_Lowbyte
//========================================================
//延时子程序
void delay_1603(void)
{
 unsigned int i,j;
 for(i=100;i>0;i--)
 for(j=50;j>0;j--)
 {
 	 *P_Watchdog_Clear=C_WDTCLR;
 }
 
}



//*************delay_ms******************************** 
void delay_10us1602(unsigned char x)  
{  
  while(x--)
  {
  //	 ClearWatchDog();
  *P_Watchdog_Clear=C_WDTCLR;
  
  } 
}  

void delay_ms1602(unsigned char cnt) 
{ 
    unsigned char i; 
do { 
  i = 4; 
  do { 
   delay_10us1602(39); 
  } while(--i); 
} while(--cnt); 
} 

void LCDE(int t)   //IOB8  1111 1110
{
 
   E=t;
    	               
} 


void RW(int tt)  //IOB10   1111 1011
{
 
   
   RW_bit=tt;
}

void RS(int ttt)  //IOB9  1111 1101
{ 
   RS_bit=ttt;
}


void send(unsigned char dataLCD)  //数据操作 //IOA高8位
{ 
   LCD_data=dataLCD;
   
}
void wr_com(unsigned char comm)//********写控制字符程序 E=1 RS=0 RW=0**********//
{                         
		LCDE(0);
		RS(0);             //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
		RW(0);             //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
		LCDE(1);
		send(comm);
		RS(0);
		RW(0);
		LCDE(0);
}

void wr_data(unsigned char dat)//*****当前位置写字符子程序:E=1 RS=1 RW=0
{
		LCDE(0);
		RS(0);             //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
		RW(0);             //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
		RS(1);
		RW(0);
		LCDE(1);
		send(dat);
  		LCDE(0);
		RS(0);
		RW(0);
}


unsigned int rd_bf()//*****忙状态检查*******//
{
		unsigned char i;
	 
		//P0=0xff;
		LCDE(0);
		RS(0);
		RW(0);
		RS(0);
		RW(1);
		LCDE(1);
		i=LCD_data;
  		LCDE(0);
	
	//	while(i){i=P1_7;}
     //   delay_ms1602(10);
		return(i);
	 
}


 
void init_LCD()//**********初始化程序,必须按照产品的资料介绍的过程进行********//
{
	wr_com(0x38);   //*****显示模式设置必须三次,不用检测忙信号
	delay_ms1602(5);
	wr_com(0x38);
	delay_ms1602(5);
	wr_com(0x38);
	delay_ms1602(5);

	//rd_bf();
	//delay5ms();
	wr_com(0x01);   ///***清屏****
	delay_ms1602(5);
	rd_bf();
	delay_ms1602(5);
	wr_com(0x06);   ///****光标移动设置***
   delay_ms1602(5);
	rd_bf();
	delay_ms1602(1);
	wr_com(0x38);   ////***显示模式设置****
	delay_ms1602(1);
	rd_bf();
    delay_ms1602(1);
	wr_com(0x0c);   /////***显示开*** 如果要开光标,设为0x0f
    delay_ms1602(1);
	rd_bf();
	delay_ms1602(1);
	
	wr_com(0x40);		//set cgram address
	delay_ms1602(1);
//	rd_bf();
	

}




//---------------------------------------
//名称:显示子程序
//功能:在指定地方显示字符
//入口:a 是指向要显示的数组
//      addr是要显示的地址
//      c 为数组长度
//返回:无
void display_1602(unsigned char addr, unsigned char *a, unsigned char c)  
{
    unsigned char i;
 
	wr_com(addr);
    for(i=0;i<c;i++)
	  {
      	rd_bf();   
	    wr_data(a[i]);
      //  delay_10us1602(100);
	  }


	
} 

	

⌨️ 快捷键说明

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