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

📄 lcd.txt

📁 完整程序,直接下载就能用...,我用的是AT89S52
💻 TXT
字号:

#include <AT89X52.H> 
#include <stdlib.h> 
#include <string.h>   
#define uint unsigned int 
#define uchar unsigned char 
 
#define  		HIGH   			1
#define  		LOW    			0
#define  		TRUE     		1
#define  		FALSE    		0
#define  		ZERO    	    	0 
#define  		MSB    			0x80
#define  		LSB    			0x01
/************************************/
//lcd part
#define  	LINE1     	    		0
#define  	LINE2     		   	1
#define  	LINE1_HEAD    			0x80
#define  	LINE2_HEAD    			0xC0
#define  	DATA_MODE    			0x38
#define  	OPEN_SCREEN    			0x0C
#define  	DISPLAY_ADDRESS   		0x80
#define  	CLEARSCREEN    			LCD_en_com(0x01)
#define  LCDIO     P2
sbit LCD1602_RS=P1^5;   //寄存器选择,0&&写入:写入指令;
                        //0&&读取:读忙及地址计数器内容 ;1:读写数据 
sbit LCD1602_RW=P1^6;    //0:写入,1读取   
sbit LCD1602_EN=P1^7;    //启用控制         

/*********function declare ***********************************/
/*************************************************************/
void SYS_init(void);
void delay_nms(unsigned int n);
void LED_bl_ntimes(unsigned int n);

/*LCD subprogram part***********************/
void LCD_en_com(unsigned char command);
void LCD_en_dat(unsigned char temp);
void LCD_set_xy( unsigned char x, unsigned char y );
//void LCD_WRITE_CHAR( unsigned x,unsigned char y,unsigned char dat);
void LCD_write_string(unsigned char X,unsigned char Y,unsigned char *s);
void LCD_init(void);
void LCD_read_bf(void);
MAIN()
{
  LCD_init();
  LCD_write_string("TEST!!");

}

void LCD_Read_BF(void)
{
	unsigned char read=0; 
	
	LCD1602_RS = LOW;		//RS 0
	LCD1602_RW = HIGH;		//RW 1 :读取动作
	LCD1602_EN = HIGH;		
	
	LCDIO = 0xFF;
	do{
		read = LCDIO;
	}while(read&MSB);     // 查询读忙标志(p2.7)是否为1
}
/*************************************/
void LCD_en_com(unsigned char command)
{
	LCD_Read_BF(); 
	
	LCD1602_RS = LOW;   	//RS=0 AND 写入动作时 ,写入“指令”
	LCD1602_RW = LOW;		//RW 0 写入动作
	
	LCD1602_EN = HIGH;	//EN 下降沿时,写入指令	
	LCDIO = command;
	LCD1602_EN = LOW;
}
/*********************************/
void LCD_en_dat(unsigned char dat)
{
	LCD_Read_BF();
	
	LCD1602_RS = HIGH;	//RS=1时读写“数据”
	LCD1602_RW = LOW;		//RW 0 写入动作
	
	LCD1602_EN = HIGH;	//EN 下降沿动作,写入数据
	LCDIO = dat;
	LCD1602_EN = LOW;
}
/**********************************************/
void LCD_set_xy(unsigned char x,unsigned char y)
{
	unsigned char address;
	if(y == LINE1)	
		address = LINE1_HEAD + x;
	else 			
		address = LINE2_HEAD + x;
	LCD_en_com(address); 
}
/****************************************************************/
void LCD_write_char( unsigned x,unsigned char y,unsigned char dat)
//设定写入地址即显示地址
{
	LCD_set_xy(x,y); 
	LCD_en_dat(dat);
}
/*********************************************************************/
void LCD_write_string(unsigned char x,unsigned char y,unsigned char *s)
{
	LCD_set_xy(x,y); 
	while(*s)  
	{
		LCDIO = *s;
		LCD_en_dat(*s);   
		s++;
	}
}
/*******************/
void LCD_init(void)
{ 
LCD_en_com(DATA_MODE);
	//set 8 bit data transmission mode 
   //0x38:001 DL N F X X (DL:1表8位数,0表4位;
   // N:1为双列,0单列  F:1为5*10点阵,字较大;0为5*7;
LCD_en_com(OPEN_SCREEN);
	//open display (enable lcd display)
   // 0x0c:00001D C B D:1开户显示屏;C:1表光标出现
   //B:1光标闪烁
LCD_en_com(DISPLAY_ADDRESS);
   //设置道行显示地址:1A6---A0
CLEARSCREEN;
	//0X01:clear screen
}

⌨️ 快捷键说明

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