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.效果

 

 

相关内容

热门资讯

中信证券:2026年度造纸行业... 转自:财联社【中信证券:2026年度造纸行业预计底部改善 金属包装行业将迎来春天】财联社11月21日...
财联社汽车早报11月21日 转自:财联社两部门发布《新能源汽车政府采购需求标准(征求意见稿)》11月20日,财政部会同工业和信息...
四川阆中警方凌晨通报 转自:北京日报客户端11月21日凌晨,四川省阆中市公安局发布“警情通报”:11月20日,阆中市一学生...
@近视的你 当心甜食正在悄悄损... 来源:央视新闻客户端 用眼过度、强光刺激……这些常见的视力“杀手”相信大家都不陌生但日常生活中有一个...
直击车展 | MoLA架构发布...   Hehson科技讯 11 月 21日上午消息,在华为乾崑生态大会上,华为智能汽车解决方案 BU ...