有关Lcd5110和dht11组成温度计的问题-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5966|回复: 8

有关Lcd5110和dht11组成温度计的问题

[复制链接]
发表于 2013-12-10 16:32 | 显示全部楼层 |阅读模式
谁能帮我看看程序哪里错了,显示温湿度的地方出现乱码。
#include <Wire.h>
#include "DHT.h"
DHT dht;


int LCD_RST=7;
int LCD_CE=6;
int LCD_DC=5;
int SDIN=4;
int SCLK=3;



//****************************定义ASCII字符**********************//

/**********************************
6 x 8 font
1 pixel space at left and bottom
index = ASCII - 32
***********************************/
const unsigned char font6x8[][6] =
{
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
    { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
    { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
    { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
    { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
    { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
    { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
    { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
    { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
    { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
    { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
    { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
    { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
    { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
    { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
    { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
    { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
    { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
    { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
    { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
    { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
    { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
    { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
    { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
    { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
    { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
    { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
    { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
    { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
    { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
    { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
    { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
    { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
    { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
    { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
    { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
    { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
    { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
    { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
    { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
    { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
    { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
    { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
    { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
    { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
    { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
    { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
    { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
    { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
    { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
    { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
    { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
    { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
    { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
    { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
    { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
    { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
    { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
    { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
    { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
    { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
    { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
    { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
    { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
    { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
    { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
    { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
    { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
    { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
    { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
    { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
    { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
    { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
    { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
    { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
    { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
    { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
    { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
    { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
    { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines
};
static const byte hanzi12x16[][24]={

//温
        {0x89,0x72,0x00,0xC0,0x5F,0xD5,0x55,0xD5,0x55,0xDF,0x00,0x00,0x07,0x00,0x04,0x07,0x04,0x07,0x04,0x07,0x04,0x07,0x04,0x00,},
//度
        {0x00,0xFE,0x0A,0x8A,0xBE,0xAA,0xAB,0xAA,0xBE,0x0A,0x0A,0x00,0x06,0x01,0x04,0x04,0x04,0x03,0x02,0x03,0x04,0x04,0x04,0x00,},
//湿
        {0x88,0xF1,0x1A,0xC0,0x1F,0xF5,0x15,0xF5,0x15,0x9F,0x40,0x00,0x00,0x07,0x04,0x04,0x05,0x07,0x04,0x07,0x05,0x04,0x04,0x00,},
//:
        {0x00,0x00,0x00,0x00,0x8C,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,},

};
/************************LCD初始化函数********************************/  
void LCD_init(void)
{
    //先设置为输出
     pinMode(SCLK,OUTPUT);
     pinMode(SDIN,OUTPUT);
     pinMode(LCD_DC,OUTPUT);
     pinMode(LCD_CE,OUTPUT);
     pinMode(LCD_RST,OUTPUT);

    // 产生一个让LCD复位的低电平脉冲
     digitalWrite( LCD_RST, LOW);

     delayMicroseconds(1);
     digitalWrite( LCD_RST, HIGH);

    // 关闭LCD
     digitalWrite( LCD_CE, LOW);
     delayMicroseconds(1);

    // 使能LCD
     digitalWrite( LCD_CE, HIGH); //LCD_CE = 1;
     delayMicroseconds(1);
    LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
    LCD_write_byte(0xc8, 0); // 设置偏置电压
    LCD_write_byte(0x06, 0); // 温度校正
    LCD_write_byte(0x13, 0); // 1:48
    LCD_write_byte(0x20, 0); // 使用基本命令
    LCD_clear();             // 清屏
    LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示

    // 关闭LCD
   digitalWrite( LCD_CE, LOW);  //LCD_CE = 0;
}
/************************LCD清屏函数*******************************/
void LCD_clear(void)
{
    unsigned int i;
    LCD_write_byte(0x0c, 0);  
    LCD_write_byte(0x80, 0);
    for (i=0; i<504; i++)
      {
        LCD_write_byte(0, 1);
      }   
}
/*************************设置字符位置函数**************************/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
    LCD_write_byte(0x40 | Y, 0);// column
    LCD_write_byte(0x80 | X, 0);// row
}
/*************************ASCII字符显示函数*************************/
void LCD_write_char(unsigned char c)
{
    unsigned char line;
    c -= 32;
    for (line=0; line<6; line++)
    {
        LCD_write_byte(font6x8[c][line], 1);
    }
}
/*******************************************************************/
/*-------------------------------------------------
LCD_write_english_String  : 英文字符串显示函数
输入参数:*s      :英文字符串指针;
          X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
--------------------------------------------------*/
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
{
    LCD_set_XY(X,Y);
    while (*s)  
    {
     LCD_write_char(*s);
     s++;
    }
}
/******************************************************************/
/*---------------------------------------------
LCD_write_byte    : 写数据到LCD
输入参数:data    :写入的数据;
          command :写数据/命令选择;
---------------------------------------------*/
void LCD_write_byte(unsigned char dat, unsigned char command)
{
    unsigned char i;
   digitalWrite( LCD_CE, LOW); // 使能LCD_CE = 0
    if (command == 0)
    {
     digitalWrite( LCD_DC, LOW);// 传送命令 LCD_DC = 0;
    }
    else
    {
      digitalWrite( LCD_DC, HIGH);// 传送数据LCD_DC = 1;
    }

  for(i=0;i<8;i++)
  {
     if(dat&0x80)
     {
        digitalWrite( SDIN, HIGH);//SDIN = 1;
     }
    else
    {
     digitalWrite( SDIN, LOW);//SDIN = 0;
     }
   digitalWrite( SCLK, LOW);//SCLK = 0;
   dat = dat << 1;
   digitalWrite( SCLK, HIGH);//SCLK = 1;
  }
    digitalWrite( LCD_CE, HIGH);//LCD_CE = 1;

}
/******************************************************************/
/*---------------------------------------------
void LCD_write_hanzi  : 汉字显示子函数
输入参数:row :写入汉字列 page :写入汉字行 row :写入汉字   ;
---------------------------------------------*/  
void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char dd) //row:列 page:页 dd:字符
{
        unsigned char i;         
        LCD_set_XY(row*8, page);// 列,页
        for(i=0; i<12;i++)
        {
                LCD_write_byte(hanzi12x16[dd][i],1);
        }

    LCD_set_XY(row*8, page+1);// 列,页
        for(i=12; i<24;i++)
        {
                LCD_write_byte(hanzi12x16[dd][i],1);
        }        
}
void setup()
{
  LCD_init();//初始化液晶     
  LCD_clear();
  delay(10) ;
  Serial.begin(9600);
  dht.setup(2);
}
void loop()
{
  delay(dht.getMinimumSamplingPeriod());

  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();

  LCD_write_hanzi(0,0,0) ;//温
  LCD_write_hanzi(2,0,1) ;//度
  LCD_write_hanzi(4,0,3) ;//:
  LCD_write_hanzi(0,2,2) ;//湿
  LCD_write_hanzi(2,2,1) ;//度
  LCD_write_hanzi(4,2,3) ;//:

   delay(1000) ;

   LCD_set_XY(42, 0);
   LCD_write_char(temperature );
   LCD_set_XY(42, 2);
   LCD_write_char(humidity);

   }
   附上dht11的库文件

DHT.rar

41.97 KB, 下载次数: 55

dht11库文件

发表于 2013-12-10 20:02 | 显示全部楼层
没看到dht11的pin定义,
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 12
loop里没读dht11
DHT11.read(DHT11PIN);

另外能把取字模的软件分享下吗?
 楼主| 发表于 2013-12-10 20:07 | 显示全部楼层
a_zhi 发表于 2013-12-10 20:02
没看到dht11的pin定义,
#include
dht11 DHT11;

先把字模给你,我再试试程序,
 楼主| 发表于 2013-12-10 20:29 | 显示全部楼层
a_zhi 发表于 2013-12-10 20:02
没看到dht11的pin定义,
#include
dht11 DHT11;

好像不是这个原因,你看我这个程序已经定义了,生成的温度湿度还是乱码,我想好像是应该是没有字符串转换的事,但具体没有弄明白#include <Wire.h>
#include <dht11.h>
dht11 DHT11;
#define DHT11PIN 2

int LCD_RST=7;
int LCD_CE=6;
int LCD_DC=5;
int SDIN=4;
int SCLK=3;



//****************************定义ASCII字符**********************//

/**********************************
6 x 8 font
1 pixel space at left and bottom
index = ASCII - 32
***********************************/
const unsigned char font6x8[][6] =
{
    { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },   // sp
    { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 },   // !
    { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 },   // "
    { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 },   // #
    { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 },   // $
    { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 },   // %
    { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 },   // &
    { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 },   // '
    { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 },   // (
    { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 },   // )
    { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 },   // *
    { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 },   // +
    { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 },   // ,
    { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 },   // -
    { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 },   // .
    { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 },   // /
    { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E },   // 0
    { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 },   // 1
    { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 },   // 2
    { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 },   // 3
    { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 },   // 4
    { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 },   // 5
    { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 },   // 6
    { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 },   // 7
    { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 },   // 8
    { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E },   // 9
    { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 },   // :
    { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 },   // ;
    { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 },   // <
    { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 },   // =
    { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 },   // >
    { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 },   // ?
    { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E },   // @
    { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C },   // A
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 },   // B
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 },   // C
    { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C },   // D
    { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 },   // E
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 },   // F
    { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A },   // G
    { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F },   // H
    { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 },   // I
    { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 },   // J
    { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 },   // K
    { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 },   // L
    { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F },   // M
    { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F },   // N
    { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E },   // O
    { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 },   // P
    { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E },   // Q
    { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 },   // R
    { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 },   // S
    { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 },   // T
    { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F },   // U
    { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F },   // V
    { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F },   // W
    { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 },   // X
    { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 },   // Y
    { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 },   // Z
    { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 },   // [
    { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 },   // 55
    { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 },   // ]
    { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 },   // ^
    { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 },   // _
    { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 },   // '
    { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 },   // a
    { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 },   // b
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 },   // c
    { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F },   // d
    { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 },   // e
    { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 },   // f
    { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C },   // g
    { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 },   // h
    { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 },   // i
    { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 },   // j
    { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 },   // k
    { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 },   // l
    { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 },   // m
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 },   // n
    { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 },   // o
    { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 },   // p
    { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC },   // q
    { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 },   // r
    { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 },   // s
    { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 },   // t
    { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C },   // u
    { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C },   // v
    { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C },   // w
    { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 },   // x
    { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C },   // y
    { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 },   // z
    { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 }    // horiz lines
};
static const byte hanzi12x16[][24]={

//温
        {0x89,0x72,0x00,0xC0,0x5F,0xD5,0x55,0xD5,0x55,0xDF,0x00,0x00,0x07,0x00,0x04,0x07,0x04,0x07,0x04,0x07,0x04,0x07,0x04,0x00,},
//度
        {0x00,0xFE,0x0A,0x8A,0xBE,0xAA,0xAB,0xAA,0xBE,0x0A,0x0A,0x00,0x06,0x01,0x04,0x04,0x04,0x03,0x02,0x03,0x04,0x04,0x04,0x00,},
//湿
        {0x88,0xF1,0x1A,0xC0,0x1F,0xF5,0x15,0xF5,0x15,0x9F,0x40,0x00,0x00,0x07,0x04,0x04,0x05,0x07,0x04,0x07,0x05,0x04,0x04,0x00,},
//:
        {0x00,0x00,0x00,0x00,0x8C,0x8C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,},

};
/************************LCD初始化函数********************************/  
void LCD_init(void)
{
    //先设置为输出
     pinMode(SCLK,OUTPUT);
     pinMode(SDIN,OUTPUT);
     pinMode(LCD_DC,OUTPUT);
     pinMode(LCD_CE,OUTPUT);
     pinMode(LCD_RST,OUTPUT);

    // 产生一个让LCD复位的低电平脉冲
     digitalWrite( LCD_RST, LOW);

     delayMicroseconds(1);
     digitalWrite( LCD_RST, HIGH);

    // 关闭LCD
     digitalWrite( LCD_CE, LOW);
     delayMicroseconds(1);

    // 使能LCD
     digitalWrite( LCD_CE, HIGH); //LCD_CE = 1;
     delayMicroseconds(1);
    LCD_write_byte(0x21, 0); // 使用扩展命令设置LCD模式
    LCD_write_byte(0xc8, 0); // 设置偏置电压
    LCD_write_byte(0x06, 0); // 温度校正
    LCD_write_byte(0x13, 0); // 1:48
    LCD_write_byte(0x20, 0); // 使用基本命令
    LCD_clear();             // 清屏
    LCD_write_byte(0x0c, 0); // 设定显示模式,正常显示

    // 关闭LCD
   digitalWrite( LCD_CE, LOW);  //LCD_CE = 0;
}
/************************LCD清屏函数*******************************/
void LCD_clear(void)
{
    unsigned int i;
    LCD_write_byte(0x0c, 0);  
    LCD_write_byte(0x80, 0);
    for (i=0; i<504; i++)
      {
        LCD_write_byte(0, 1);
      }   
}
/*************************设置字符位置函数**************************/
void LCD_set_XY(unsigned char X, unsigned char Y)
{
    LCD_write_byte(0x40 | Y, 0);// column
    LCD_write_byte(0x80 | X, 0);// row
}
/*************************ASCII字符显示函数*************************/
void LCD_write_char(unsigned char c)
{
    unsigned char line;
    c -= 32;
    for (line=0; line<6; line++)
    {
        LCD_write_byte(font6x8[c][line], 1);
    }
}
/*******************************************************************/
/*-------------------------------------------------
LCD_write_english_String  : 英文字符串显示函数
输入参数:*s      :英文字符串指针;
          X、Y    : 显示字符串的位置,x 0-83 ,y 0-5
--------------------------------------------------*/
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
{
    LCD_set_XY(X,Y);
    while (*s)  
    {
     LCD_write_char(*s);
     s++;
    }
}
/******************************************************************/
/*---------------------------------------------
LCD_write_byte    : 写数据到LCD
输入参数:data    :写入的数据;
          command :写数据/命令选择;
---------------------------------------------*/
void LCD_write_byte(unsigned char dat, unsigned char command)
{
    unsigned char i;
   digitalWrite( LCD_CE, LOW); // 使能LCD_CE = 0
    if (command == 0)
    {
     digitalWrite( LCD_DC, LOW);// 传送命令 LCD_DC = 0;
    }
    else
    {
      digitalWrite( LCD_DC, HIGH);// 传送数据LCD_DC = 1;
    }

  for(i=0;i<8;i++)
  {
     if(dat&0x80)
     {
        digitalWrite( SDIN, HIGH);//SDIN = 1;
     }
    else
    {
     digitalWrite( SDIN, LOW);//SDIN = 0;
     }
   digitalWrite( SCLK, LOW);//SCLK = 0;
   dat = dat << 1;
   digitalWrite( SCLK, HIGH);//SCLK = 1;
  }
    digitalWrite( LCD_CE, HIGH);//LCD_CE = 1;

}
/******************************************************************/
/*---------------------------------------------
void LCD_write_hanzi  : 汉字显示子函数
输入参数:row :写入汉字列 page :写入汉字行 row :写入汉字   ;
---------------------------------------------*/  
void LCD_write_hanzi(unsigned char row, unsigned char page,unsigned char dd) //row:列 page:页 dd:字符
{
        unsigned char i;         
        LCD_set_XY(row*8, page);// 列,页
        for(i=0; i<12;i++)
        {
                LCD_write_byte(hanzi12x16[dd],1);
        }

    LCD_set_XY(row*8, page+1);// 列,页
        for(i=12; i<24;i++)
        {
                LCD_write_byte(hanzi12x16[dd],1);
        }        
}
void setup()
{
  LCD_init();//初始化液晶     
  LCD_clear();
  delay(10) ;
  Serial.begin(9600);
}
void loop()
{
   DHT11.read(DHT11PIN);
    int dht11temp = DHT11.temperature;
    Serial.print("temperature:");
    Serial.println(dht11temp);
    int dht11hum = DHT11.humidity;
    Serial.print("humidity:");
    Serial.println(dht11hum);
  
  LCD_write_hanzi(0,0,0) ;//温
  LCD_write_hanzi(2,0,1) ;//度
  LCD_write_hanzi(4,0,3) ;//:
  LCD_write_hanzi(0,2,2) ;//湿
  LCD_write_hanzi(2,2,1) ;//度
  LCD_write_hanzi(4,2,3) ;//:
  
   delay(1000) ;
   
   LCD_set_XY(42, 0);
   LCD_write_char(dht11temp);
   LCD_set_XY(42, 2);
    LCD_write_char(dht11hum);
   
   }
   
发表于 2013-12-11 10:29 | 显示全部楼层
本帖最后由 a_zhi 于 2013-12-11 10:36 编辑

要把读出的数直转换成字符才能在LCD上显示。
可以参考一下別人的代码,网上搜一下。
只要整数部分可用itoa函数转换
 楼主| 发表于 2013-12-11 10:31 | 显示全部楼层
a_zhi 发表于 2013-12-11 10:29
要把读出的数直转换成字符才能在LCD上显示。

怎么转换呢,我试了几次也没整明白
发表于 2013-12-11 10:45 | 显示全部楼层
int aaaa = DHT11.humidity;////shidu
  Serial.print(aaaa);
  itoa(aaaa,string1,10);
  LCD_write_english_string(48,1,string1);
  LCD_write_char(32);//sp
  LCD_write_char(37);//   %
 楼主| 发表于 2013-12-11 10:50 | 显示全部楼层
a_zhi 发表于 2013-12-11 10:45
int aaaa = DHT11.humidity;////shidu
  Serial.print(aaaa);
  itoa(aaaa,string1,10);

谢了啊。我试试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2025-1-1 20:02 , Processed in 0.093342 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表