电子产业一站式赋能平台

PCB联盟网

搜索
查看: 2282|回复: 4
收起左侧

单片机C语言实例-372-1602液晶

[复制链接]
发表于 2022-4-6 11:02:32 | 显示全部楼层 |阅读模式
单片机C语言实例-372-1602液晶

/*******************************************************************

* 描述:                                                           
*    LCD1602可以分为8位和4位控制方式,8位控制方式是用D0-D7数据线   
* 来传送控制命令及数据。4位控制方式是用D4-D7数据线来传送控制命令   
* 及数据。使用4位数据线做控制时,需要分两次来传送,先送出高4位数   
* 据,再送出低4位数据。可以节省单片机的4根端口线。                 
*                                                                  
*******************************************************************/
#include < reg52.h >
#include < intrins.h >
#define uchar unsigned char
#define uint  unsigned int
sbit  LCD_RS = P2^0;            
sbit  LCD_RW = P2^1;
sbit  LCD_EN = P2^2;
uchar code  cdis1[ ] = {"   WELCOME TO   "};
uchar code  cdis2[ ] = {" WWW.RICHMCU.COM "};
/**********************************************************

* 5us 延时子程序

**********************************************************/
void  delayNOP()
{
   _nop_();
   _nop_();
   _nop_();
   _nop_();
   _nop_();
}

/**********************************************************

* 延时子程序

**********************************************************/
void delay(uint ms)

{
   uchar t;
   while(ms--)
   {
     for(t = 0; t < 120; t++);
   }
}


/**********************************************************

* 检查LCD忙状态                                          
* lcd_busy为1时,忙,等待。                              
* lcd-busy为0时,闲,可写指令与数据                        

**********************************************************/
bit lcd_busy()
{                          
    bit result;
    LCD_RS = 0;
    LCD_RW = 1;
    LCD_EN = 1;
    delayNOP();
    result = (bit)(P0&0x80);
    LCD_EN = 0;
    return(result);
}

/*********************************************************

* 写指令或数据

* start=0, 写入命令;  start=1, 写入数据

*********************************************************/

void lcd_write(bit start, uchar in_data)
{
    uchar Hdata,Ldata;

    while(lcd_busy());

    Hdata=in_data&0xf0;             //取高四位
    Ldata=(in_data<<4)&0xf0;    //取低四位

    if(start==0)
    LCD_RS = 0;               //写入命令
    else
    LCD_RS = 1;                 //写入数据

    LCD_RW = 0;
    LCD_EN = 0;
    delayNOP();

    P0 = Hdata;                 //发送高四位   
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;
    delayNOP();

    P0 = Ldata;                 //发送低四位     
    LCD_EN = 1;
    delayNOP();
    LCD_EN = 0;
    delayNOP();
}

/*************************************************************

*  LCD初始化设定                                             

*************************************************************/
void lcd_init()
{
    delay(15);
    lcd_write(0,0x28);                //16*2显示,5*7点阵,4位数据
    delay(5);
    lcd_write(0,0x28);
    delay(5);
    lcd_write(0,0x28);

    delay(5);
    lcd_write(0,0x0c);               //显示开,关光标
    delay(5);
    lcd_write(0,0x06);              //移动光标
    delay(5);
    lcd_write(0,0x01);              //清除LCD的显示内容
    delay(25);                          //延时
}

/**********************************************************

*  设定显示位置                                             

**********************************************************/
void lcd_pos(uchar pos)
{                          
   lcd_write(0,pos|0x80);     //数据指针=80+地址变量
}

/**********************************************************

* 主函数

**********************************************************/
void  main()
{
    uchar  m;

    lcd_init();                          //LCD1602初始化

    lcd_pos(0x00);                 //设置显示位置为第一行
    for(m=0;m<16;m++)
    lcd_write(1,cdis1[m]);


     lcd_pos(0x40);                //设置显示位置为第二行     
     for(m=0;m<16;m++)
     lcd_write(1,cdis2[m]);

      while(1);
}

/*********************************************************/


更多详情参考附件文档
+08:00C168联盟网9647.png
游客,如果您要查看本帖隐藏内容请回复

回复

使用道具 举报

2

主题

378

帖子

1709

积分

三级会员

Rank: 3Rank: 3

积分
1709
发表于 2023-9-12 20:13:14 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

54

帖子

188

积分

一级会员

Rank: 1

积分
188
发表于 2023-9-13 10:16:27 来自手机 | 显示全部楼层
66666666666666666
回复 支持 反对

使用道具 举报

0

主题

503

帖子

942

积分

二级会员

Rank: 2

积分
942
发表于 2023-9-17 19:08:51 | 显示全部楼层
谢谢分享                 
回复 支持 反对

使用道具 举报

0

主题

69

帖子

261

积分

一级会员

Rank: 1

积分
261
发表于 2023-12-12 20:31:52 | 显示全部楼层
谢谢谢谢谢谢谢谢谢谢
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表