C51---LCD1602显示一行字符
创始人
2024-06-02 18:40:04

1.器件:C51、LCD1602

2.code:

#include "reg52.h"
#include "intrins.h"
#define     databuffer  P0//定义8位数据线,Po端口组

sbit        RS = P1^0;
sbit        RW = P1^1;
sbit        EN = P1^4;

void check_busy()
{
    char tmp = 0x80;
    databuffer = 0x80;
    
    while (tmp & 0x80 ){
        RS  = 0;
        RW  = 1;
        EN  = 0;
        _nop_();
        EN  = 1;
        _nop_();
        _nop_();
    tmp = databuffer;
        EN = 0;
        _nop_();
    }

}

void Write_Cmd_Func(char cmd)
{
    check_busy();
        RS  = 0;
        RW  = 0;
    
        EN  = 0;
        _nop_();
    databuffer = cmd;
        EN  = 1;
        _nop_();
        _nop_();
        EN = 0;
        _nop_();
    
}

void Write_Data_Func(char dataShow)
{
        check_busy();
        RS  = 1;
        RW  = 0;
    
        EN  = 0;
        _nop_(); 
    databuffer = dataShow;
        _nop_();
        EN  = 1; 
        _nop_();
        _nop_();
        EN = 0;
        _nop_();

}

void Delay15ms()        //@11.0592MHz
{
    unsigned char i, j;

    i = 27;
    j = 226;
    do
    {
        while (--j);
    } while (--i);
}

void Delay5ms()        //@11.0592MHz
{
    unsigned char i, j;
    i = 9;
    j = 244;
    do
    {
        while (--j);
    } while (--i);
}


void LCD1602_INIT()
{
     //延时15ms
    Delay15ms();
    //写指令38H(不检测忙信号)
    Write_Cmd_Func(0x38);
    //延时5ms
    Delay5ms();
    //以后每次写指令,读/写数据操作均需要检测忙信号
    //写指令38H,显示模式设置
    Write_Cmd_Func(0x38);
    //写指令08H,显示关闭
    Write_Cmd_Func(0x08);
    //写指令01H,显示清屏
    Write_Cmd_Func(0x01);
    //写指令06H,显示光标移动设置
    Write_Cmd_Func(0x06);
    //写指令0CH,显示开光标设置
    Write_Cmd_Func(0x0C);
}

void LCD1602_showline(char row,char col,char *string)
{
         switch(row){
            
             case 1:
             Write_Cmd_Func(0x80+col);
                while(*string){
                            Write_Data_Func(*string);
                            string++;
                }
                break;
                
              case 2:
                Write_Cmd_Func(0x80+0x40+col); 
                while(*string){
                            Write_Data_Func(*string);
                            string++;
                }
                break;
    }
}

void main()
{
    char position = 0x80+0x05;
    //char dataShow = 'C';
    LCD1602_INIT();
    LCD1602_showline(1,5,"NO.1");
    LCD1602_showline(2,0,"Tayminy Fuo");
    //Write_Cmd_Func(position);//选择要显示的地址
    //Write_Data_Func(dataShow);//发送要显示的字符
}
    
    
     
    
    
    
    
    
    
    
    

3.效果

 

 

相关内容

热门资讯

杭州银行行长张精科任职资格获监... 中访网数据  杭州银行股份有限公司(证券代码:600926,证券简称:杭州银行)今日公告,公司收到国...
伊朗外长回应美总统“不要报复”... 本文转自【央视新闻客户端】;总台记者获悉,当地时间3月1日,伊朗外交部长阿拉格齐在接受媒体采访时,就...
美军称在打击伊朗导弹设施时使用... 转自:财联社【美军称在打击伊朗导弹设施时使用B-2隐形轰炸机】财联社3月2日电,美国中央司令部当地时...
阿布扎比和迪拜股市3月2日至3...   阿联酋资本市场管理局通过电子邮件发表声明说,阿布扎比证券交易所和迪拜金融市场3月2日至3日关闭。...
主要产油国宣布4月增产 转自:成都日报锦观主要产油国宣布4月增产 据新华社维也纳3月1日电(记者 孟凡宇) 石油输出国...