📄 1602s51.h
字号:
/*--------------------------------------------------------------------------
1602S51.H
Header file for the low voltage Flash Atmel AT89C52 and AT89LV52.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/
#ifndef __1602S51_H__
#define __1602S51_H__
#define dataprot P0
sbit RS=P1^0;
sbit RW=P1^1;
sbit LCDE=P1^2;
wr_com(unsigned char comm);//********写控制字符程序 E=1 RS=0 RW=0**********//
wr_data(unsigned char dat);//*****当前位置写字符子程序:E=1 RS=1 RW=0
void display(unsigned char addr,unsigned char *a,unsigned char c);
unsigned char rd_bf();//*****忙状态检查*******//
//*************delay_ms********************************
void delay_10us(unsigned char x)
{
while(x--);
}
void delay_ms(unsigned char cnt)
{
unsigned char i;
do {
i = 4;
do {
delay_10us(39);
} while(--i);
} while(--cnt);
}
//====================================================
// 1602液晶相关
wr_com(unsigned char comm)//********写控制字符程序 E=1 RS=0 RW=0**********//
{
LCDE=0;
RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。
RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。
LCDE=1;
dataprot=comm;
RS=0;
RW=0;
LCDE=0;
}
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;
dataprot=dat;
LCDE=0;
RS=0;
RW=0;
}
unsigned char rd_bf()//*****忙状态检查*******//
{
unsigned char i;
//P0=0xff;
LCDE=0;
RS=0;
RW=0;
RS=0;
RW=1;
LCDE=1;
i=dataprot;
LCDE=0;
// while(i){i=P0_7;}
return(i);
}
void init_LCD()//**********初始化程序,必须按照产品的资料介绍的过程进行********//
{
wr_com(0x38); //*****显示模式设置必须三次,不用检测忙信号
delay_ms(5);
wr_com(0x38);
delay_ms(5);
wr_com(0x38);
delay_ms(5);
//rd_bf();
//delay5ms();
wr_com(0x01); ///***清屏****
delay_ms(5);
rd_bf();
delay_ms(5);
wr_com(0x06); ///****光标移动设置***
delay_ms(5);
rd_bf();
delay_ms(1);
wr_com(0x38); ////***显示模式设置****
delay_ms(1);
rd_bf();
delay_ms(1);
wr_com(0x0f); /////***显示开***
delay_ms(1);
rd_bf();
delay_ms(1);
wr_com(0x40); //set cgram address
delay_ms(1);
// rd_bf();
}
//---------------------------------------
//名称:显示子程序
//功能:在指定地方显示字符
//入口:a 是指向要显示的数组
// addr是要显示的地址
// c 为数组长度
//返回:无
void display(unsigned char addr, unsigned char *a, unsigned char c)
{
unsigned char i;
// if(rd_bf())
wr_com(addr);
for(i=0;i<c;i++)
{
rd_bf();
wr_data(a[i]);
delay_10us(1);
}
}
/*
//---------------------------------------------------------------
//功能:数据输出
//输入:str为要显示的数据,X为坐标
void Printf_Number(unsigned char X,unsigned long Temp)
{
unsigned char i = 8;
char vec[9];
char *ptr=vec;
vec[i] = 0;
do
{
vec[--i] = Temp%10 + '0';
Temp /= 10;
}
while (Temp!=0);
ptr=ptr+i;
wr_com(X);
while((*ptr) != '\0')
{
// wr_lcd (dat, *ptr);
rd_bf();
wr_data(*ptr);
ptr ++;
delay_10us(2);
}
}
*/
/*
//---------------------------------------------------------------
//功能:数据输出
//输入:str为要显示的数据,X为坐标
void Printf_Number_float(unsigned char X,float Temp,char unito)
{
unsigned char i = 0;
// unsigned int t;
char vec[9];
char *ptr=vec;
Temp*=10; //有一位小数
//t=Temp;
vec[i] = 0;
vec[0]= t/10000000+'0';
vec[1]=(t/1000000)%10+'0';
vec[2]=(t/100000)%10+'0';
vec[3]=(t/10000)%10+'0';
vec[4]=(t/1000)%10+'0';
vec[5]=(t/100)%10+'0';
vec[6]='.'-'0';
vec[7]=(t/10)%10+'0';
vec[8]= unito;
for(i=0; vec[i]=='0'&&i<=8; i++); //清除前导零
ptr=ptr+i;
wr_com(X);
while((*ptr) != '\0')
{
// wr_lcd (dat, *ptr);
rd_bf();
wr_data(*ptr);
ptr ++;
delay_10us(2);
}
}
*/
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -