LCD1602

来源:互联网 发布:中国药智数据网 编辑:程序博客网 时间:2024/05/22 06:20

lcd1602.h

#ifndef _LCD1602_H_#define _LCD1602_H_#include<reg51.h>/********************************************* 定义以下宏是为了便于4位数据传输和8位数据 传输的切换取消以下宏定义编译出来的是8位传输 *********************************************///#define LCD1602_4PINS#ifndef uchar #define uchar unsigned char#endif#ifndef uint#define uint unsigned int#endif#define LCD1602_DATAPINS P0sbit LCD1602_EN = P2^7;sbit LCD1602_RW = P2^5;sbit LCD1602_RS = P2^6;//void Lcd1602_Delay1ms(uint c);void lcd1602WriteCommand(uchar command);void lcd1602WriteData(uchar da);void initialLCD1602();void lcd1602ShowFloatValue(float value, uchar precision);#endif

lcd1602.c

#include <lcd1602.h>#include<function.h>#include<math.h>#ifndef LCD1602_4PINSvoid lcd1602WriteCommand(uchar command){    LCD1602_EN = 0;    LCD1602_RS = 0; //发送命令    LCD1602_RW = 0;    LCD1602_DATAPINS = command;    delayms(1);//此处应稍有延时,为了速度不用延时也可以    LCD1602_EN = 1;    delayms(5);    LCD1602_EN = 0;}#elsevoid lcd1602WriteCommand(uchar command){    LCD1602_EN = 0;    LCD1602_RS = 0; //发送命令    LCD1602_RW = 0;    LCD1602_DATAPINS = command;//16024位接法时,用数据线的高4位接传输,先写入高4位,后写入低4位    delayms(1);//此处应稍有延时,为了速度不用延时也可以    LCD1602_EN = 1;    delayms(5);    LCD1602_EN = 0;    LCD1602_DATAPINS = command << 4;    delayms(1);//此处应稍有延时,为了速度不用延时也可以     LCD1602_EN = 1;    delayms(5);    LCD1602_EN = 0;}#endif#ifndef LCD1602_4PINSvoid lcd1602WriteData(uchar da){    LCD1602_EN = 0;    LCD1602_RS = 1; //发送命令    LCD1602_RW = 0;    LCD1602_DATAPINS = da;    delayms(1);//此处应稍有延时,为了速度不用延时也可以    LCD1602_EN = 1;    delayms(5);    LCD1602_EN = 0;}#elsevoid lcd1602WriteData(uchar da){    LCD1602_EN = 0;    LCD1602_RS = 1; //发送命令    LCD1602_RW = 0;    LCD1602_DATAPINS = da;//16024位接法时,用数据线的高4位接传输,先写入高4位,后写入低4位    delayms(1);//此处应稍有延时,为了速度不用延时也可以    LCD1602_EN = 1;    delayms(5);    LCD1602_EN = 0;    LCD1602_DATAPINS = da << 4;    delayms(1);//此处应稍有延时,为了速度不用延时也可以     LCD1602_EN = 1;    delayms(5);    LCD1602_EN = 0;}#endif#ifndef LCD1602_4PINSvoid initialLCD1602(){    lcd1602WriteCommand(0x38);  //开显示    lcd1602WriteCommand(0x0c);  //开显示不显示光标    lcd1602WriteCommand(0x06);  //写一个指针加1    lcd1602WriteCommand(0x01);  //清屏    lcd1602WriteCommand(0x80);  //设置数据指针起点  }#elsevoid initialLCD1602(){         lcd1602WriteCommand(0x32);    lcd1602WriteCommand(0x28);  //开显示    lcd1602WriteCommand(0x0c);  //开显示不显示光标    lcd1602WriteCommand(0x06);  //写一个指针加1    lcd1602WriteCommand(0x01);  //清屏    lcd1602WriteCommand(0x80);  //设置数据指针起点  }#endifvoid lcd1602ShowFloatValue(float value, uchar precision){    uchar i, LCD1602Falg = 0;     uchar wei[5];    uint tp;    value = value + pow(0.1,precision + 1);    for(i = 0; i < precision; i++)    {           value = value * 10;    }    tp = value;    wei[0] = tp/10000;    wei[1] = tp%10000/1000;    wei[2] = tp%1000/100;    wei[3] = tp%100/10;    wei[4] = tp%10;    //i = 0;    for(i = 0; i < 5; i++)    {        if(LCD1602Falg == 0 && wei[i] == 0 &&   i < 4 - precision)        {             lcd1602WriteData(0x20);        }else        {            lcd1602WriteData(wei[i] + 0x30);            if(i == 4 - precision)            {                lcd1602WriteData('.');            }            LCD1602Falg = 1;        }    }}
0 0
原创粉丝点击