📄 lcd.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 + -