点滴报警器——显示模块

单片机中,常用的显示方式大抵以下:8段式数码管,点阵LED,LCD1602,LCD12864。其中数码管和点阵表示的信息有限,所以此处不考虑。对于LCD1602和LCD12864,LCD1602能表示16x2=32位字母数字,而LCD12864虽然能表示更多信息,但是其电路和内部代码指令也更为复杂。因此我选择使用LCD1602,这个显示足够满足点滴报警器的需要。

protues仿真电路

点滴报警器——显示模块_第1张图片
此处需要注意的就是在VEE处需要上拉一个10kΩ的滑动电阻,以调节显示。其次VSS指的是地电压,VDD为5V.

实际芯片图片

点滴报警器——显示模块_第2张图片
在实际模块中,还需要对显示的背光度进行调节(即多出来的两个接口A和K),太亮会很耗电,太暗会看不清上面的字符。

内部调用代码

把lcd调用的代码封装在一个头文件里

#ifndef __LCD1602_H__
#define __LCD1602_H__

#include "Delay.h"

#define lcd1602_io P2
sbit lcd1602_en = P1 ^ 0;
sbit lcd1602_rw = P1 ^ 1;
sbit lcd1602_rs = P1 ^ 2;

void lcd1602_write_cmd(unsigned char cmd)
{
    lcd1602_io = cmd;
    lcd1602_rs = 0;
    lcd1602_en = 0;
    lcd1602_rw = 0;
    Delay(1);
    lcd1602_en = 1;
    Delay(1);
    lcd1602_en = 0;
}

void lcd1602_write_data(unsigned char dat)
{
    lcd1602_io = dat;
    lcd1602_rs = 1;
    lcd1602_en = 0;
    lcd1602_rw = 0;
    Delay(1);
    lcd1602_en = 1;
    Delay(1);
    lcd1602_en = 0;

}

void lcd1602_init()
{
    lcd1602_rw = 0;
    lcd1602_write_cmd(0x38);   //显示模式设置:16×2显示,5×7点阵,8位数据接口
    Delay(1);
    lcd1602_write_cmd(0x0e);   //显示模式设置
    Delay(1);
    lcd1602_write_cmd(0x06);   //显示模式设置:光标右移,字符不移
    Delay(1);
    lcd1602_write_cmd(0x01);   //清屏幕指令,将以前的显示内容清除
    Delay(1);
}

void lcd1602_write_char(unsigned char x, unsigned char y, unsigned char dat) //坐标定位
{
    unsigned char address;
    if(y == 0)
        address = 0x80 + x; //y=0,写第一行
    else
        address = 0xc0 + x; //y=1,写第二行
    lcd1602_write_cmd(address);
    lcd1602_write_data(dat);
}

void lcd1602_write_string(unsigned char x, unsigned char y, unsigned char *dat) //坐标定位
{
    unsigned char address;
    if(y == 0)
        address = 0x80 + x; //y=0,写第一行
    else if(y == 1)
        address = 0xc0 + x; //y=1,写第二行
    lcd1602_write_cmd(address);
    while(*dat > 0)
    {
        lcd1602_write_data(*dat);
        dat++;
        Delay(1);
    }
}
#endif //__LCD1602_H__

主函数调用

#include
#include "Delay.h"
#include "lcd1602.h"

void main()
{
	lcd1602_init();
	
	while(1)
	{		
		lcd1602_write_string(0,0,"Speed:");
	}
} 

此处会在第一排显示“Speed:”,还可以进行其他显示,但主要一定要初始化。

实际操作过程中遇到的问题

  1. 选择LCD芯片时一定要注意是否有自带字库,字库是否带中文,一般带中文字库的还需要取字软件。
  2. 当焊好电路以后,显示屏无论怎么调,都只显示第一排黑方块。这种问题是由于LCD没有初始化,如果没有初始化的话,显示屏就默认显示第一排黑方块。当然还有一个地方也需要注意,那就是注意代码中的延时,有时延时过长也会导致芯片无法进入初始化。
  3. 重要提示:对于新手焊板子的一定要将lcd1602的每个引脚都焊开(就是焊点不要挨着),还有就是单片机的接口连接处也要焊开,不如也会出现LCD1602只显示第一排的情况

你可能感兴趣的:(单片机及传感器技术)