📄 lcd.c
字号:
#include <reg52.h>
#include <absacc.h>
#include <intrins.h>
/******************************************
功能:void check_busy( void )
功能:检查是否LCD忙碌的子程序
实参输入:void
返回值:void
******************************************/
void check_busy(void)
{
P1 = 0xff;
RS = 0;
RW = 1;
while (1)
{
smNop();
E =1;
smNop();
if( P1 < 0x80 )
break;
smNop();
E =0;
}
E = 0;
}
/*****************************************
名称:void send_com( unsigned char command )
功能:数据写命令
实参输入:unsigned char command
返回值:void
*****************************************/
void send_com(const unsigned char command)
{
check_busy();
RS = 0;
RW = 0;
P1 = command;
E = 1;
smNop();
E = 0;
}
/********************************************************
名称:void send_com_init( unsigned char command_init )
功能:LCD初始化时的送命令
实参输入:unsigned char command_init
返回值:void
********************************************************/
void send_com_init(const unsigned char command_init )
{
RS = 0;
RW = 0;
P1 = command_init;
E = 1;
smNop();
E = 0;
}
/*******************************************************
名称:void send_data( unsigned char data_a )
功能:写数据
实参输入:unsigned char data_a
返回值:void
*******************************************************/
void send_data(const unsigned char data_a)
{
check_busy();
RS = 1; //DB7-DB0为显示数据
RW = 0; //写入数据
P1 = data_a;
E = 1;
smNop();
E = 0; //下降沿
}
/*********************************************************
名称:void clear_LCD( void )
功能:清屏
实参输入:void
返回值:void
*********************************************************/
void clear_LCD(void)
{
send_com(0x01); //清除显示//
send_com(0x34); // 功能设定:扩充指令集动作 //
send_com(0x30); //功能设定:基本指令集动作//
}
/*************************************************************
名称:void initial_LCD( void )
功能:LCD初始化
实参输入:void
返回值:void
*************************************************************/
void initial_LCD(void)
{
PSB = 1; //水平显示
RST = 0; //复位
_nop_();
_nop_();
RST = 1; //不复位
_nop_();
delay_10us(10);
send_com_init(0x30);//30H--基本指令操作
delay_10us(4);
send_com_init(0x0c);//开显示,关光标,不闪烁。
delay_10us(10);
send_com_init(0x01);//清除显示
delay_ms(10);
send_com_init(0x06);//指定在资料写入或读取时,光标的移动方向,DDRAM的地址计数器(AC)加1。
}
/*********************************************************************
名称:void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
功能:显示字符串 2 1 6
参数输入:unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length
返回值:void
*********************************************************************/
void Display_num( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
{
unsigned char ddram = 0x00;
unsigned char i1;
if(line == 1)
ddram = 0x80;
if(line == 2)
ddram = 0x90;
if(line == 3)
ddram = 0x88;
if(line == 4)
ddram = 0x98;
ddram = ddram + col - 1;
send_com( ddram ); //定位显示起始地址
for( i1 = 0;i1 < length;i1 ++ )
{
send_data( ptr[i1] );//输出单个字符
}
}
/********************************************************
名称: void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
功能:显示汉字子程序
实参输入:unsigned char *ptr, unsigned char line, unsigned char col, unsigned length
返回值:void
********************************************************/
void Display_ch( unsigned char *ptr, unsigned char line, unsigned char col, unsigned char length )
{
unsigned char ddram = 0x00;
unsigned char i1;
if(line == 1)
ddram = 0x80;
if(line == 2)
ddram = 0x90;
if(line == 3)
ddram = 0x88;
if(line == 4)
ddram = 0x98;
ddram = ddram + col - 1;
send_com( ddram ); //定位显示起始地址
for( i1 = 0;i1 < length;i1 ++ )
{
send_data(ptr[i1*2]);//输出单个字符
send_data(ptr[i1*2+1]);
}
}
void xianshi(void)
{ Display_ch(jiemian0,1,1,6);
Display_ch(jiemian1,2,1,6);
Display_ch(jiemian2,3,1,6);
Display_ch(jiemian3,4,1,5);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -