0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于51单片机的LCD1602液晶显示时钟

电子开发圈 来源:电子开发圈 2023-01-13 09:57 次阅读

51单片机结构简单,架构体系完备,学习资料丰富,应用领域广泛。通过对51单片机的学习,可帮助小白实现快速入门电子设计,理解电路系统工作原理,为高级嵌入式芯片的学习及开发打下坚实基础。

本篇描述

1、51+Proteus8.10;

2、学习1302时钟芯片、1602液晶驱动;

仿真设计

采用Proteus作为仿真设计工具。Proteus是一款著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,真正实现了从概念到产品的完整设计。

软件设计

采用Keil作为软件设计工具。Keil提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(μVision)将这些部分组合在一起。

#include 
#include 
#include 
#define uint unsigned int
#define uchar unsigned char


sbit DS1302_IO = P1^7;
sbit DS1302_SCLK = P1^6;
sbit DS1302_RST = P1^5;
sbit LCD1602_RS = P2^0;
sbit LCD1602_RW = P2^1;
sbit LCD1602_EN = P2^2;


uchar LCD_1[]={"DATE: 00-00-00  "};
uchar LCD_2[]={"TIME: 0000  "};
uchar DateTime[7];


void DelayMS(uint ms)
{
   uchar i;
  while(ms--)
  {
     for(i=0;i<120;i++);
  }
}


uchar Get_A_Byte_FROM_DS1302()
{
   uchar i,b=0x00;
  for(i=0;i<8;i++)
  {
     b |= _crol_((uchar)DS1302_IO,i);
    DS1302_SCLK=1;
    DS1302_SCLK=0;
  }
  return b/16*10+b%16;
}


void Write_A_Byte_TO_DS1302(uchar x)
{
   uchar i;
  for(i=0;i<8;i++)
  {
     DS1302_IO=x&0x01;
    DS1302_SCLK=1;
    DS1302_SCLK=0;
    x>>=1;
  }
}


uchar Read_Data(uchar addr)
{
   uchar dat;
  DS1302_RST = 0;
  DS1302_SCLK=0;
  DS1302_RST=1;
  Write_A_Byte_TO_DS1302(addr);
  dat = Get_A_Byte_FROM_DS1302();
  DS1302_SCLK=1;
  DS1302_RST=0;
  return dat;
}


uchar Read_LCD_State()
{
   uchar state;
  LCD1602_RS=0;
  LCD1602_RW=1;
  LCD1602_EN=1;
  DelayMS(1);
  state=P0;
  LCD1602_EN = 0;
  DelayMS(1);
  return state;
}


void LCD_Busy_Wait()
{
   while((Read_LCD_State()&0x80)==0x80);
  DelayMS(5);
}


void Write_LCD_Data(uchar dat)
{
   LCD_Busy_Wait();
  LCD1602_RS=1;
  LCD1602_RW=0;
  LCD1602_EN=0;
  P0=dat;
  LCD1602_EN=1;
  DelayMS(1);
  LCD1602_EN=0;  
}


void Write_LCD_Command(uchar cmd)
{
   LCD_Busy_Wait();
  LCD1602_RS=0;
  LCD1602_RW=0;
  LCD1602_EN=0;
  P0=cmd;
  LCD1602_EN=1;
  DelayMS(1);
  LCD1602_EN=0;  
}


void Set_LCD_POS(uchar p)
{
   Write_LCD_Command(p|0x80);  
}


void Display_LCD_String(uchar p,uchar *s)
{
   uchar i;
  Set_LCD_POS(p);
  for(i=0;i<16;i++)
  {
    Write_LCD_Data(s[i]);
    DelayMS(1);   
  }
}


void Format_DateTime(uchar d,uchar *a)
{
   a[0]=d/10+'0';
  a[1]=d%10+'0';
}


void Init_LCD()
{
   Write_LCD_Command(0x38);
  DelayMS(1);  
  Write_LCD_Command(0x01);
  DelayMS(1);  
  Write_LCD_Command(0x06);
  DelayMS(1);  
  Write_LCD_Command(0x0c);
  DelayMS(1);  
}


void GetTime()
{
   uchar i,addr = 0x81;
  for(i=0;i<7;i++)
  {
     DateTime[i]=Read_Data(addr);addr+=2;
  }
}


void main()
{
   Init_LCD();
  while(1)
  {
     GetTime();


    Format_DateTime(DateTime[6],LCD_1+6);
    Format_DateTime(DateTime[4],LCD_1+9);
    Format_DateTime(DateTime[3],LCD_1+12);
    Format_DateTime(DateTime[2],LCD_2+6);
    Format_DateTime(DateTime[1],LCD_2+9);
    Format_DateTime(DateTime[0],LCD_2+12);


    Display_LCD_String(0x00,LCD_1);
    Display_LCD_String(0x40,LCD_2);
  }
}

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6002

    文章

    43987

    浏览量

    620937
  • 液晶显示
    +关注

    关注

    6

    文章

    574

    浏览量

    39884
  • 51单片机
    +关注

    关注

    269

    文章

    5649

    浏览量

    120832
  • LCD1602
    +关注

    关注

    14

    文章

    606

    浏览量

    51940
  • 显示时钟
    +关注

    关注

    0

    文章

    5

    浏览量

    1616

原文标题:5044-LCD1602液晶显示时钟

文章出处:【微信号:电子开发圈,微信公众号:电子开发圈】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    LCD1602液晶显示屏在51单片机上的使用 精选资料分享

    LCD1602液晶显示屏在51单片机上的使用​以下是我在学习使用51单片机时的心得体会,在这里记
    发表于 07-13 08:32

    LCD1602液晶显示模块

    LCD1602内部写入需要显示的内容。RS=0时,选择命令寄存区,即向LCD1602内部写入需要显示内容的显示位置。R/W引脚:E引脚:D0
    发表于 07-20 06:48

    51单片机驱动 LCD1602液晶显示系统

    51单片机驱动 LCD1602液晶显示系统,51单片机驱动
    发表于 07-21 07:35

    怎样使用单片机去控制LCD1602液晶显示显示时间等信息

    怎样使用单片机去控制LCD1602液晶显示显示时间等信息?如何对基于单片机LCD1602
    发表于 09-01 06:14

    基于51单片机LCD1602显示的设计资料分享

    基于51单片机LCD1602显示要在1602显示字符,要大概明白
    发表于 11-18 08:43

    lcd1602单片机连接图,基于51单片机lcd1602液晶显示屏连接电路图

     LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符。LCD1602液晶显示原理 L
    发表于 10-20 11:33 13.8w次阅读

    使用51单片机控制LCD1602液晶显示屏的程序资料免费下载

    本文档的主要内容详细介绍的是使用51单片机控制LCD1602液晶显示屏的程序资料免费下载。
    发表于 01-08 08:00 33次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>控制<b class='flag-5'>LCD1602</b><b class='flag-5'>液晶显示</b>屏的程序资料免费下载

    使用51单片机实现LCD1602液晶显示实验的程序免费下载

    本文档的主要内容详细介绍的是使用51单片机实现LCD1602液晶显示实验的程序免费下载。
    发表于 09-18 17:20 16次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>实现<b class='flag-5'>LCD1602</b><b class='flag-5'>液晶显示</b>实验的程序免费下载

    LCD1602的引脚说明和使用51单片机控制1602液晶显示的代码免费下载

    本文档的主要内容详细介绍的是LCD1602的引脚说明和使用51单片机控制1602液晶显示的代码免费下载。
    发表于 07-31 17:35 9次下载
    <b class='flag-5'>LCD1602</b>的引脚说明和使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>控制<b class='flag-5'>1602</b><b class='flag-5'>液晶显示</b>的代码免费下载

    使用51单片机驱动LCD1602液晶显示的程序和电路图免费下载

    本文档的主要内容详细介绍的是使用51单片机驱动LCD1602液晶显示的程序和电路图免费下载。
    发表于 07-10 17:40 11次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>驱动<b class='flag-5'>LCD1602</b><b class='flag-5'>液晶显示</b>的程序和电路图免费下载

    使用51单片机进行LCD1602液晶显示的控制代码程序免费下载

    本文档的主要内容详细介绍的是使用51单片机进行LCD1602液晶显示的控制代码程序免费下载。
    发表于 06-11 17:47 7次下载
    使用<b class='flag-5'>51</b><b class='flag-5'>单片机</b>进行<b class='flag-5'>LCD1602</b><b class='flag-5'>液晶显示</b>的控制代码程序免费下载

    基于AT89C51单片机的电子钟设计(LCD1602液晶显示

    **基于51单片机的电子钟设计(LCD1602液晶显示)设计要求:设计一个用LCD1602液晶显示
    发表于 11-04 14:51 34次下载
    基于AT89C<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的电子钟设计(<b class='flag-5'>LCD1602</b><b class='flag-5'>液晶显示</b>)

    基于51单片机LCD1602显示

    基于51单片机LCD1602显示要在1602显示字符,要大概明白
    发表于 11-11 11:06 14次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b><b class='flag-5'>LCD1602</b><b class='flag-5'>显示</b>

    基于51单片机智能温控风扇LCD1602液晶显示红外遥控设计

    基于51单片机智能温控风扇LCD1602液晶显示红外遥控设计
    发表于 11-13 10:51 38次下载
    基于<b class='flag-5'>51</b><b class='flag-5'>单片机</b>智能温控风扇<b class='flag-5'>LCD1602</b><b class='flag-5'>液晶显示</b>红外遥控设计

    51单片机怎么显示当前时间_(记录)51单片机——LCD1602液晶显示模块

    51单片机怎么显示当前时间_(记录)51单片机——LCD1602
    发表于 11-16 15:06 26次下载
    <b class='flag-5'>51</b><b class='flag-5'>单片机</b>怎么<b class='flag-5'>显示</b>当前时间_(记录)<b class='flag-5'>51</b><b class='flag-5'>单片机</b>——<b class='flag-5'>LCD1602</b><b class='flag-5'>液晶显示</b>模块