LCD1602.c

来源:互联网 发布:matlab最优化计算 编辑:程序博客网 时间:2024/05/22 13:15


LCD1602.c

/** * 文件名:LCD1602.c * 描  述:1602字符液晶驱动模块 */#include <reg52.h>#include "stdint.h"#include "LCD1602.h"#define LCD1602_DB P0sbit LCD1602_RS = P1^0;sbit LCD1602_RW = P1^1;sbit LCD1602_E  = P1^5;/* 等待液晶准备好 */void LCDwaitReady() {    uint8_t state;    LCD1602_DB = 0xFF;    LCD1602_RS = 0;    LCD1602_RW = 1;    do {        LCD1602_E = 1;        state = LCD1602_DB; //读取状态字        LCD1602_E = 0;    } while (state & 0x80); //bit7等于1表示液晶正忙,重复检测直到其等于0为止}/* 向LCD1602液晶写入一字节命令,cmd-待写入命令值 */void LCDwriteCmd(uint8_t cmd) {    LCDwaitReady();    LCD1602_RS = 0;    LCD1602_RW = 0;    LCD1602_DB = cmd;    LCD1602_E  = 1;    LCD1602_E  = 0;}/* 向LCD1602液晶写入一字节数据,dat-待写入数据值 */void LCDwriteDat(uint8_t dat) {    LCDwaitReady();    LCD1602_RS = 1;    LCD1602_RW = 0;    LCD1602_DB = dat;    LCD1602_E  = 1;    LCD1602_E  = 0;}/* 设置显示RAM起始地址,亦即光标位置,(col, row)-对应屏幕上的字符坐标 */void LCDsetCursor(uint8_t col, uint8_t row) {    uint8_t addr;    if (row == 0)  //由输入的屏幕坐标计算显示RAM的地址        addr = col;  //第一行字符地址从0x00起始    else        addr = 0x40 + col;  //第二行字符地址从0x40起始    LCDwriteCmd(addr | 0x80);  //设置RAM地址}/* 在液晶上显示字符串,(col, row)-对应屏幕上的起始坐标,str-字符串指针 */void LCDprintStr(uint8_t col, uint8_t row, uint8_t * str) {    LCDsetCursor(col, row);   //设置起始地址//连续写入字符串数据,直到检测到结束符    while (*str != '\0') {        LCDwriteDat(*str++);    }}/* 初始化1602液晶 */void LCDinit() {    LCDwriteCmd(0x38);  //16*2显示,5*7点阵,8位数据接口    LCDwriteCmd(0x0C);  //显示器开,光标关闭    LCDwriteCmd(0x06);  //文字不动,地址自动+1    LCDwriteCmd(0x01);  //清屏}/* 清除液晶显示屏上的内容,同时将光标移动到初始位置左上角 */void LCDclear() {    LCDwriteCmd(0x01);}/* 将光标移动到初始位置左上角,但不清除液晶屏幕上的内容 */void LCDhome() {    LCDwriteCmd(0x02);}/* 显示开关控制, * 控制整体显示的开/关,光标的开/关,光标是否闪烁: * 由combine的低三位决定,高电平表示开,低电平表示关 */void LCDctrlDisplayCursorBlink(uint8_t display, uint8_t cursor, uint8_t blink) {    uint8_t combine;    combine = ((display << 2) | (cursor << 1) | blink);    LCDwriteCmd(0x08 | combine);}void LCDsetCursordirCharshift(uint8_t cursorDir, uint8_t charShift) {    uint8_t combine;    combine = ((cursorDir << 1) | charShift);    LCDwriteCmd(0x04 | combine);}void LCDsetShiftwhatShiftdir(uint8_t shiftWhat, uint8_t shiftDir) {    uint8_t combine;    combine = ((shiftWhat << 1) | shiftDir);    LCDwriteCmd(0x10 | combine);}


0 0
原创粉丝点击