C51LCD1602

/**************************************
 LCD1602上用两行显示两个字符串
 *************************************/
#include <reg52.h>

#define uchar unsigned char
#define LCD1602 P0

sbit RS = P2^4;
sbit RW = P2^5;
sbit EN = P2^6;
uchar code *str1 = "LCD1602";
uchar code *str2 = "Let us test it";

void LcdStatus();
void WriteData(uchar dat);
void WriteCom(uchar cmd);
void InitLcd();
void SetCursor(uchar x, uchar y);
void LcdDisplay(uchar x, uchar y, uchar *p_str);

void main()
{
    InitLcd();
    LcdDisplay(4,0,str1);                  //第0行的第四列显示
    LcdDisplay(1,1,str2);                  //第1行的第一列显示
    while (1);
}
//读状态
void LcdStatus()
{
    uchar sta;
    LCD1602 = 0xFF;              //51端口要读取外部状态时,要先使端口输出高电平;
    EN = 0;
    RS = 0;
    RW = 1;

    do
    {
       EN = 1;
       sta = LCD1602;
       EN = 0;
    }while (sta &= 0x80);
}
//写指令
void WriteCmd(uchar cmd)
{
    LcdStatus();                //对控制器每次进行读写之前,都要进行状态检测,确定STA7为0;
    RS = 0;                     //选择指令寄存器;
    RW = 0;                     //执行写操作;
    LCD1602 = cmd;              //执行写操作时,一定总线上要先有数据;
    EN = 1;                     //E升为高电平
    EN = 0;                     //E在下降沿时,才将数据写入;
}
//写数据
void WriteData(uchar dat)
{
    LcdStatus();
    RS = 1;                     //选择数据寄存器;
    RW = 0;                     //执行写操作;
    LCD1602 = dat;              //执行写操作时,一定总线上要先有数据;
    EN = 1;                     //E升为高电平
    EN = 0;                     //E在下降沿时,才将数据写入;
}
//对LCD1602进行初始化设置
void InitLcd()
{
    WriteCmd(0x38);             //设置16X2显示、5X7点阵、8位数据接口;
    WriteCmd(0x0C);             //设置开显示、不显示光标、光标不闪烁;
    WriteCmd(0x06);             //设置读/写一个字符时地址指针加一,且光标也加一;
    WriteCmd(0x01);             //清屏再显示;
}
//设置显示位置
void SetCursor(uchar x, uchar y)         //x作为行坐标、y作为纵坐标;
{
    uchar addr;
    if (0 == y)
    {
        addr = 0x00 + x;
    }
    else 
    {
        addr = 0x40 + x;
    }
    WriteCmd(addr + 0x80);
}
//显示内容
void LcdDisplay(uchar x, uchar y, uchar *p_str)
{
    SetCursor(x,y);
    while (*p_str != '\0')                            //遇到字符串结束标志停止显示;
    {
        WriteData(*p_str ++);
    }
}




基于单片机的的LCD1602显示,C语言编程。#include "lcd.h" void Lcd1602_Delay1ms(uint c) { uchar a,b; for (; c>0; c--) { for (b=199;b>0;b--) { for(a=1;a>0;a--); } } } /******************************************************************************* * 函 数 名 : LcdWriteCom * 函数功能 : 写命令 * 输 入 : com * 输 出 : 无 *******************************************************************************/ void LcdWriteCom(uchar com) { LCD1602_E = 0; LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DATAPINS = com; Lcd1602_Delay1ms(1); LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_E = 0; } /******************************************************************************* * 函 数 名 : LcdWriteData * 函数功能 : 写数据 * 输 入 : dat * 输 出 : 无 *******************************************************************************/ void LcdWriteData(uchar dat) { LCD1602_E = 0; LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DATAPINS = dat; Lcd1602_Delay1ms(1); LCD1602_E = 1; Lcd1602_Delay1ms(5); LCD1602_E = 0; } /******************************************************************************* * 函 数 名 : LcdInit() * 函数功能 : 初始化LCD屏 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void LcdInit() { LcdWriteCom(0x38); //开显示 LcdWriteCom(0x0c); //开显示不显示光标 LcdWriteCom(0x06); //写一个指针加1 LcdWriteCom(0x01); //清屏 LcdWriteCom(0x80); //设置数据指针起点 } /******************************************************************************* * 函 数 名 : LcdIdiszhu() * 函数功能 : 主屏显示 * 输 入 : 无 * 输 出 : 无 *******************************************************************************/ void lcddiszhu() { uchar i; uchar lcd1[]="Model i ii iii"; uchar lcd2[]="Choose 1 2 3 "; LcdWriteCom(0x80); for(i=0;i<15;i++) { LcdWriteData(lcd1[i]); } LcdWriteCom(0x80+0x40); fo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值