• 大小: 7KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-25
  • 语言: 其他
  • 标签:

资源简介

本程序是对温湿度采集系统,显示器件为12864,传感器为dht11。单片机为at89c51。

资源截图

代码片段和文件信息

#include 
#define OK 1 
#define ERROR 0 
#define NUMBER 20  //防止在与硬件通信时发生死循环设置的计数范围
#define SIZE 5 
#define uint unsigned int 
#define uchar unsigned char
static uchar status; 
uchar value_array[SIZE];
uint  temp_value humi_value;
/*------------用户自定义-----------------------------------------------*/
sbit rs=P2^4; //RS=“H“表示DB7--DB0为显示数据
//RS=“L“表示DB7--DB0为显示指令数据

sbit rw=P2^5;                   //R/W=“H“E=“H“数据被读到DB7--DB0
//R/W=“L“E=“H→L“ DB7--DB0的数据被写到IR或DR
sbit e=P2^6; //使能信号
sbit dht11 = P2^0;//温湿度传感器接口

sbit psb=P2^3; //H:8位或4位并口方式,L:串口方式
      



 void Delay_1ms(unsigned int ms) //延时1ms

unsigned int x y; 
for(x = ms; x > 0; x--) 

for(y = 114; y > 0; y--); 



extern void Delay_10us(void)  //延时10us

unsigned char i; 
i--; 
i--; 
i--; 
i--; 
i--; 
i--; 


//****************************************************
//延时函数,在12MZ的晶振频率下
//大约50us的延时
//****************************************************
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}

//****************************************************
//延时函数,在12MZ的晶振频率下
//大约50ms的延时
//****************************************************
void delay_50ms(uint t)
{
uint j;
for(;t>0;t--)
for(j=6245;j>0;j--);
}







void chk_busy() //判忙函数
{
    rs=0 ;
    rw=1 ;
    e=1 ;
    P0=0xff ;
    while((P0&0x80)==0x80);
    e=0 ;
}
void lcd_write_cmd(uchar com) //LCD12864写命令
{
    chk_busy();
    rs=0 ;
    rw=0 ;
    e=1 ;
    P0=com;
    delay_50us(1);
    //------------------在数据写入的时候加入适当的延时
    e=0 ;
}

void lcd_write_data(uchar dat)  //LCD12864写数据
{
    chk_busy();
    rs=1 ;
    rw=0 ;
    e=1 ;
    P0=dat;
    delay_50us(1);
    //------------------在数据写入的时候加入适当的延时
    e=0 ;
}

/**********************************************************************
* 名称:  Addr_Set()
* 函数功能:字符位置确定
* 入口参数: x(0~7)  指定点所在列的位置
*            y(0~3)   指定点所在行的位置
* 出口参数:无
* 说明:汉字必须是存在在液晶字库中的
**********************************************************************/
void Addr_Set(uchar xuchar y)  
{  
uchar address;
    switch(x)
    {  
case 0:  x = 0x80 ; break;
       case 1:  x = 0x90 ; break;
      case 2:  x = 0x88 ; break;
       case 3:  x = 0x98 ; break;
       default: return;
    }
   address = x+y;
   lcd_write_cmd(address);
}

void LCD_12864_initinal(void)
{
delay_50ms(2);
lcd_write_cmd(0x30); //Function set 基本指令操作
lcd_write_cmd(0x0c);   //显示状态开/关00001DCB     
//D=1: 整体显示 ON C=1: 游标ON B=1:游标位置反白允许
lcd_write_cmd(0x01);
  //清除显示 将DDRAM填满“20H“并且设定DDRAM的地址计数器(AC)到“00H“
lcd_write_cmd(0x06);
//进入点设定0001I/DS
//指定在数据的读取与写入时设定游标的移动方向及指定显示的移位
}

/*------------------显示字符串--------------------------*/
void string_dis(uchar code *s)
{
    while(*s>0)             //“\0“结束
    {
        lcd_write_data(*s);
        s++;
        //delay_1ms(500); //慢速显
//delay_1ms(200); /

评论

共有 条评论