// 头文件
#include <reg51.h> //包含单片机寄存器的头文件
//#include<intrins.h> //包含_nop_()函数定义的头文件
#include <stdio.h> //标准输入输出函数库
//宏定义
typedef unsigned int uint;
typedef unsigned char uchar;
//全局变量
unsigned char temp1=123;
// 位定义
sbit RS = P2^0; //0=输入指令;1=输出数据
sbit RW = P2^1; //0=向LCD写入指令或数据; 1=从LCD读取信息
sbit EN = P2^2; //使能信号,1时读取信息,1->0(下降沿)执行指令
// 延时函数
void delay_1ms(uint n)
{
uint a,b;
for(a=n;a>0;a--)
for(b=110;b>0;b--);
}
void delay_10us(uchar n)
{
while(n--);
}
//写入命令
void LCD_Com (uchar Com)
{
RS=0; //选择指令寄存器
P0=Com; //把命令字送入P0
RW=0; //选择写指令
EN=1;
delay_1ms(5);
EN=0; //使能线电平变化,命令送入1602的8位数据口
}
//写数据
void LCD_Data (uchar Data)
{
RS=1;//选择数据寄存器
P0=Data;//把要显示的数据送入P0
RW=0;//选择写数据
EN=1;
delay_1ms(5);
EN=0;//使能线电平变化,数据送入1602的8位数据口
}
//初始化
void LCD_Init ()
{
LCD_Com (0x38);
delay_1ms(5);
LCD_Com (0x38);//显示模式设置(8位数据,双列,5*7字形)
LCD_Com (0x0C);//开显示,不显示光标
LCD_Com (0x06);//指针自动加一
LCD_Com (0x01);//清屏
LCD_Com (0x80);//设置数据指针起点
}
//设置初始地址
void LCD_XY (uchar Row,uchar Location)
{
uchar Result;
if(Row==0)//A=0 显示第一行,A=1 显示第二行
{
Result=0x80+Location;
}
else
{
Result=0x80+0x40+Location;
}
LCD_Com (Result);
}
//在第X行Y列开始显示,指针*S所指向字符串
void LCD_XY_Pointing_String(uchar Row,uchar Location,uchar *S)
{
LCD_XY(Row,Location);//设置初始字符显示地址
while(*S)//逐次写入显示字符,直到最后一个字符"0"
{
LCD_Data(*S);//写入当前字符并显示
S++;//地址指针加1,指向下一个待写字符
}
}
//在第X行Y列开始显示Wdata所对应的单个字符
void LCD_Single_Character(uchar Row,uchar Location,uchar Wdata)
{
LCD_XY(Row,Location);//写地址
LCD_Data(Wdata);//写入当前字符并显示
}
//LCD显示
void LCD_display(void)
{
//uchar tempL=123;
LCD_XY_Pointing_String(0,0," temp(L)Setting ");
LCD_Single_Character(1,5,0x30+temp1%1000/100);
LCD_Single_Character(1,6,0x30+temp1%100/10);
LCD_Single_Character(1,7,0x30+temp1%10);
}
//主函数
void main(void)
{
LCD_Init();//LCD初始化
LCD_display();//LCD显示
while(1);
}
|