单片机设计_实时时钟电路(AT89C51、LCD1602、DS1302)

2023-11-12

单片机实时时钟电路(LCD1602、DS1302)

想要更多项目私wo!!!

一、简介

此电路主要有51单片机、LCD1602模块、DS1302芯片组成,通过LCD1062显示当前时间。

二、运行效果

在这里插入图片描述

三、源文件

main.c

/*想要更多项目私wo!!!*/
#include <reg52.h>
#include <intrins.h>
#include <string.h>
#define uint unsigned int
#define uchar unsigned char

sbit IO = P1^0;
sbit SCLK = P1^1;
sbit RST = P1^2;
sbit RS = P2^0;
sbit RW = P2^1;
sbit EN = P2^2;

uchar *WEEK[]=
{
 	"SUN","***","MON","TUS","WEN","THU","FRI","SAT"
};
uchar LCD_DSY_BUFFER1[]={"DATE 00-00-00    "};
uchar LCD_DSY_BUFFER2[]={"TIME 00:00:00    "};
uchar DateTime[7];

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

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

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

uchar Read_Data(uchar addr)
{
 	uchar dat;
	RST = 0;SCLK=0;RST=1;
   	Write_A_Byte_TO_DS1302(addr);
	dat = Get_A_Byte_FROM_DS1302();
   	SCLK=1;RST=0;
	return dat;
}

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

uchar Read_LCD_State()
{
 	uchar state;
	RS=0;RW=1;EN=1;DelayMS(1);
	state=P0;
	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();
	RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0;	
}

void Write_LCD_Command(uchar cmd)
{
 	LCD_Busy_Wait();
	RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=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 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 main()
{
 	Init_LCD();
	while(1)
	{
	 	GetTime();
		Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5);
		Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8);
		Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11);

		strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]]);

		Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5);
		Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8);
		Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11);

		Display_LCD_String(0x00,LCD_DSY_BUFFER1);
		Display_LCD_String(0x40,LCD_DSY_BUFFER2);
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机设计_实时时钟电路(AT89C51、LCD1602、DS1302) 的相关文章

  • 网络流(入门)-概念

    相关概念介绍 这里的相关概念引用的是yxc大佬的讲解 在这里特别感谢yxc大佬的算法课 让我入了算法竞赛的门 1 1 流网络 G V E 特点 是一个有向图 且可以有环 不考虑反向边 即使有反向边 也可以通过加点来把一条反向边 变成两条单向
  • Candence学习篇(6)使用allegro绘制元器件的PCB封装

    文章目录 前言 一 确定引脚坐标位置 二 新建封装 2 1设置封装的大小 2 2 设置焊盘路径 三 绘制PCB封装 3 1参数设置 3 2放置边框矩形 3 3放置装配层 放置丝印层和1脚指示原点 总结 前言 前面我们讲了 Candence学
  • 一只兔子每三个月生兔子JAVA,兔子生兔子问题

    关于兔子生兔子的算法详解 有一对兔子 从出生后第3个月起每个月都生一对兔子 小兔 子长到第三个月后每个月又生一对兔子 假如兔子都不死 问每个月的兔子总数为多少 分析 第1个月 1对 第2个月 1对 第3个月 原来的1对 新生1对 2对 第4
  • 指针在函数中的传递,搞懂这两幅图指针基础就过关了

    a本身即是char 类型 所以 a是char 类型 strcpy 中里面的参数是地址 adf 前面应该要加 吧 printf输出的是数组 所以用a
  • Git安装操作流程(超超超级详细)

    一 前言 被迫投向程序媛的行列 一切都要白手起家 接下来就以初学者的视角手把手记录 git 教程 由于我体质特殊 过手的普通操作也总能有各类bug 因此教程也会不定期更新我的bug们 二 Git 下载及安装 1 Git 安装 首先去 Git
  • html jwt权限控制,SpringBoot+SpringSecurity+JWT实RESTfulAPI权限控制

    在整合jwt之前 我们首先要在SpringBoot中整合security的模块 来实现基于security的授权控制 用过security的人都知道 它的功能无比的强大比shiro还要强大 但是今天我就介绍security中关于权限控制和是
  • Linux基础与实操_韩顺平mooc知识点笔记

    Linux 目录 Linux 一 介绍 1 1目录结构 二 实操 2 1远程登陆 2 2 vi和vim 2 2 1 三种模式 2 2 2 快捷键 2 3 关机 重启 2 5 用户管理 2 5 1 用户家目录 2 5 2 添加用户 2 5 3
  • java入门到进阶书单

    入门 1 2年 初级 Head First Java 主要讲设计模式 这个是设计思想方面的 我之所以觉得它应该最早学 就是觉得这个对今后你看jdk tomcat源码 看第三方项目源码 以及一些大数据中间源码有所帮助 另外也有一本书叫 大话设
  • Matlab-矩阵

    目录 一 矩阵的操作 1 创建矩阵 1 建立简单矩阵 2 建立特殊矩阵 3 希尔伯特 Hilbert 矩阵 4 托普利兹 Toeplitz 矩阵 5 0 1间均匀分布的随机矩阵 6 标准正态分布随机矩阵 7 魔方矩阵 8 帕斯卡矩阵 9 范

随机推荐

  • IT中文技术站十大网站收藏

    1 CSDN www csdn net CSDN Chinese Software Developer Network 创立于1999年 是中国的IT社区和服务平台 为中国的软件开发者和IT从业者提供知识传播 职业发展 软件开发等全生命周期
  • 六种线程状态详解

    1 线程状态概述 线程从创建到运行到结束是一个线程的生命周期 当线程被创建到结束过程中 不是一直处于运行状态的 下面来介绍一下线程从运行到结束所有的状态 线程状态 导致状态发生条件 NEW 新建 线程刚被创建 没有启动 也就是还没调用sta
  • LeetCode 841.钥匙和房间 - C++ - 小结

    钥匙和房间 有 N 个房间 开始时你位于 0 号房间 每个房间有不同的号码 0 1 2 N 1 并且房间里可能有一些钥匙能使你进入下一个房间 在形式上 对于每个房间 i 都有一个钥匙列表 rooms i 每个钥匙 rooms i j 由 0
  • python制作模型排放清单_四川省人为源大气污染物排放清单及特征

    大气污染源排放清单是污染源在一定时间跨度和空间区域内排放到大气中的各种污染物的数量列表 在支持空气质量管理决策的技术体系中 构建准确 完整和更新及时的大气污染物排放清单是识别污染来源的基础环节 也是制订污染控制策略的根本依据 同时也对大气污
  • 【论文笔记】Interventional Few-Shot Learning

    概述 目前流行的meta learning fine tuning等小样本学习方法都利用外部知识进行预训练 以使模型在小样本上有好的效果 而预训练知识很可能会成为影响样本特征与标签之间的关系的混杂因素 使模型得到错误的结果 本文从因果的角度
  • error while loading shared libraries: libssl.so.6

    执行 scripts mysql install db user mysql 安装mysql的时候报错 bin my print defaults error while loading shared libraries libssl so
  • synchronized、volatile底层原理详解

    文章目录 一 synchronized 1 监视器Monitor monitor结构及原理 监视器Monitor有两种同步方式 互斥与协作 2 Mutex lock mutex的工作方式 3 java对象头 java对象布局 4 无锁 偏向
  • PCL 安装

    1 安装pcl 1 1下载文件 地址链接 Release PCL 1 11 1 PointCloudLibrary pcl GitHub 下载的文件 PCL 1 11 1 AllInOne msvc2019 win64 exe pcl 1
  • 使用groupingcomparator求同一订单中最大金额的订单

    有如下订单数据 现在需要求出每一个订单中成交金额最大的一笔交易 订单id 商品id 成交金额 Order 0000001 Pdt 01 222 8 Order 0000001 Pdt 05 25 8 Order 0000002 Pdt 03
  • Linux内存精确统计工具

    1 ps mem介绍 ps mem是一个可以帮助我们精确获取 Linux 中各个程序核心内存使用情况的简单python脚本 它会分别计算一个程序私有内存总量和共享内存总量 并以更准确的方式给出了总的内存使用量 2 安装方式 包管理器 pip
  • qq 浏览器不支持java_各种浏览器开启JavaScript脚本方法

    随着网站设计技术的发展 为了用户友好体验 大部分网站使用了JavaScript脚本设计 如果您的浏览器禁用或关闭的JavaScript支持 那么可能造成网站体验差或网站部分功能无法使用 下面提供10种浏览器如何开启JavaScript的方法
  • 电商平台项目------首页

    目录 Mock swiper seiper的基本使用 swiper在vue中的问题 组件通讯的方式 props 父给子通讯 自定义事件 子给父通讯 父组件通过ref获取子组件数据 全局事件总线 bus 全能 作用域插槽 vuex paren
  • Perl中变量值交换

    示例 a 1 b 2 print a a b b a print a
  • empty ajax,php - Javascript Array empty not empty (Ajax) - Stack Overflow

    I m trying to retrieve the address that API google send me into an array The problem is that I just received an array em
  • Android12 HttpCanary系统证书安装 Magisk模块movecert

    手机 pixel 6 系统 Android 12 HttpCanary高级版 想要无限制使用高级功能的可以参照我的这篇文章实战 逆向最新黄鸟抓包软件 HttpCanary证书的安装 之前我一直使用的Android 8 证书可以直接通过Htt
  • Golang-如何判断一个 interface{} 的值是否为 nil ?

    引用 起初我会下意识的回答 直接 v nil 进行判断不就好了吗 然后翻阅了很多资料终于大致搞定里面的道道 例子 请看下面这段代码 可以先猜测一下输出的结果 package main import fmt func main var a s
  • python复数类型-Python 复数属性和方法操作实例

    复数是由一个实数和一个虚数组合构成 表示为 x yj 一个复数时一对有序浮点数 x y 其中 x 是实数部分 y 是虚数部分 Python 语言中有关复数的概念 1 虚数不能单独存在 它们总是和一个值为 0 0 的实数部分一起构成一个复数
  • datax->hdfsreader->orc文件读取出错ArrayIndexOutOfBoundsException: 6

    Exception in thread main java lang ArrayIndexOutOfBoundsException 6 at org apache orc OrcFile WriterVersion from OrcFile
  • bash: pip3: command not found

    问题描述 当使用命令pip3 install XXX 出现错误 bash pip3 command not found 错误原因 pip3还没有安装 解决方法 安装 pip3 sudo apt install python3 pip
  • 单片机设计_实时时钟电路(AT89C51、LCD1602、DS1302)

    单片机实时时钟电路 LCD1602 DS1302 想要更多项目私wo 一 简介 此电路主要有51单片机 LCD1602模块 DS1302芯片组成 通过LCD1062显示当前时间 二 运行效果 三 源文件 main c 想要更多项目私wo i