基于51单片机的1602液晶显示温度和时间的C程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

//液晶显示温度

#include "AT89X52.H"

#define Ddata P0

sbit RS=P2^7; //命令数据控制端

sbit RW=P2^6; //读写选择端

sbit LCDE=P2^5; //液晶使能端

sbit DQ=P2^0; //ds18b20与单片机连接口

#define uchar unsigned char

#define uint unsigned int

unsigned char hour=0,min=0,sec=0; //定义初值

unsigned int count=0;

unsigned char line1[16]={" temp: "}; //16个字符

unsigned char line2[16]={" time: 00:00:00"}; //16个字符

unsigned char tab[]={'0','1','2','3','4','5','6','7','8','9'}; //数组

uchar data disdata[5];

uint tvalue; //温度值

uchar tflag; //温度正负标志

void time();

/*************************lcd1602程序**************************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的)

{

unsigned int i,j;

for(i=0;i

for(j=0;j<110;j++);

}

void delay5ms()//延时5毫秒(不够精确的)

{

unsigned int i;

for (i=0;i<1000;i++);

}

void delay50us()

{

register int i;

for (i=0;i<20;i++);

}

void delay()

{unsigned char m,n;

for(m=255;m>0;m--)

for(n=255;n>0;n--);

}

void wr_com(unsigned char comm) //********写控制字符程序E=1 RS=0

RW=0 **********//

{

LCDE=0; //使能端

RS=0; //********RS寄存器选择输入端,当RS=0;当进行写模块操作,指向指令寄存器。

RW=0; //********当RS=1,无论是读操作还是写操作,都是指向数据寄存器。LCDE=1;

Ddata=comm;

RS=0;

RW=0;

LCDE=0;

void 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;

Ddata=dat; //将dat赋给P0口

LCDE=0;

RS=0;

RW=0;

}

unsigned char busycheck()//*****忙状态检查*******//

{

unsigned char i;

LCDE=0;

RS=0;

RW=0;

RS=0;

RW=1;

LCDE=1;

i=Ddata;

LCDE=0;

return(i);

}

void init()//**********初始化程序,必须按照产品的资料介绍的过程进行********// {

wr_com(0x38); //*****显示模式设置必须三次,不用检测忙信号

delay5ms();

wr_com(0x38);

delay5ms();

wr_com(0x38);

delay5ms();

wr_com(0x01); ///***清屏****

delay5ms();

busycheck();

wr_com(0x08);

delay5ms();

busycheck();

delay5ms();

wr_com(0x06); ///****光标移动设置,写一个字符后地址指针加1***

delay5ms();

busycheck();

delay50us();

wr_com(0x38); ////***显示模式设置****

delay50us();

busycheck();

delay50us();

wr_com(0x0c); /////***显示开,不显示光标***

delay50us();

busycheck();

delay50us();

wr_com(0x40); //set cgram address

delay50us();

delay50us(); //***这些延时可用可不用***// }

void display()

{ unsigned char i;

wr_com(0x80); //set ram address

delay50us();

busycheck();

delay50us();

for(i=0;i<6;i++)

{wr_data(line1[i]); //display(6个字符)delay50us();

busycheck();}

busycheck();

delay50us();

wr_com(0xc0); //0xc0=0x80+0x40 delay50us();

busycheck();

delay50us();

for(i=0;i<16;i++)

{

wr_data(line2[i]); //display

delay50us();

busycheck();

}

}

相关文档
最新文档