基于STC15单片机电子时钟液晶1602串口显示-proteus仿真-源程序

news2024/9/28 13:20:09

一、系统方案
1、本设计采用STC15单片机作为主控器。
2、液晶1602显示电子时钟。
3、串口显示电子时钟。
4、按键控制开启暂停清零。
在这里插入图片描述

二、硬件设计
原理图如下:
在这里插入图片描述

三、单片机软件设计
1、首先是系统初始化
uint count=0;

uint8 strPhoto[8];
uint wendu=0;

P3M0 = 0x00;
P3M1 = 0x00;
lcd_init(); //LCD1602初始化
delay_ms(10); //初始化后延时
DisplayListChar(0, 0, table1); //在LCD1602屏第一行显示table1内容

EA = 1; //开总中断
TMOD = 0X21; //定时器0、工作方式1
ET0 = 1; //开定时器0中断
TR0 = 0; //允许定时器0定时

TH0 = 0X3C;
TL0 = 0XB0;	   //50ms

2、液晶显示程序
/**************************************
功能描述:LCD1602写命令函数
入口参数int8 com
返回值:无
***************************************/
void lcd_wcom(uint8 com)
{
lcd1602_rs=0; //选择指令寄存器
lcd1602_rw=0; //选择写
P0=com; //把命令字送入P0
delay_ms(1); //延时一小会儿,让1602准备接收数据
lcd1602_en=1; //使能线电平变化,命令送入1602的8位数据口
lcd1602_en=0;
}

/**************************************
功能描述:LCD1602写数据函数
入口参数:uint8 dat
返回值:无
***************************************/
void lcd_wdat(uint8 dat)
{
lcd1602_rs=1; //选择数据寄存器
lcd1602_rw=0; //选择写
P0=dat; //把要显示的数据送入P0
delay_ms(1); //延时一小会儿,让1602准备接收数据
lcd1602_en=1; //使能线电平变化,数据送入1602的8位数据口
lcd1602_en=0;
}

/**************************************
功能描述:LCD1602初始化函数
入口参数:无
返回值:无
**************************************/
void lcd_init(void)
{
lcd_wcom(0x38); //8位数据,双列,5
7字形
lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01); //清屏
}

/**************************************
功能描述:LCD1602按指定位置显示一个字符
入口参数:uint8 X, uint8 Y, uint8 DData
返回值:无
***************************************/
void DisplayOneChar(uint8 X, uint8 Y, uint8 DData)
{
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
if (Y) X |= 0x40; //当要显示第二行时地址码+0x40;
X |= 0x80; //算出指令码
lcd_wcom(X); //发命令字
lcd_wdat(DData); //发数据
}

/**************************************
功能描述:LCD1602按指定位置显示一串字符
入口参数:uint8 X, uint8 Y, uint8 DData X代表第X+1列,Y代表第Y+1行
返回值:无
***************************************/
void DisplayListChar(uint8 X, uint8 Y, uint8 code *DData)
{
uint8 ListLength;

ListLength = 0;
Y &= 0x1;
X &= 0xF; //限制X不能大于15,Y不能大于1
while (DData[ListLength]>0x19) //若到达字串尾则退出
{
if (X <= 0xF) //X坐标应小于0xF
{
DisplayOneChar(X, Y, DData[ListLength]); //显示单个字符
ListLength++;
X++;
}
}
}

3、按键程序
void key() //键盘扫描函数
{
if(key10)
{
delay_ms(10);
if(key1
0)
{
while(!key1);
TR0=1;
}
}
if(key20)
{
delay_ms(10);
if(key2
0)
{
while(!key2);
TR0=0;
}
}
if(key30)
{
delay_ms(10);
if(key3
0)
{
while(!key3);
TR0=0;hour=0;minute=0;second=0;
}
}
}
4、核心算法程序
/定时器0中断程序***/
void time0() interrupt 1
{
TH0 = 0X3C;
TL0 = 0XB0; //50ms

count++	;   
  if(count==20)                                                         //20次50毫秒即一秒
    {
            count=0;
            second++;
            if(second==60)                                                  //秒加到60时分进位
            {
                    second=0;
                    minute++;
                    if(minute==60)                                                  //分加到60时时进位
                    {
                            minute=0;
                            hour++;
                            if(hour==24)                                                //时加到24时清0
                            {
                                    hour=0;
                            }      
                        
                    }
                 
            }
                   
    }

}
四、 proteus仿真设计
Proteus软件是一款应用比较广泛的工具,它可以在没有硬件平台的基础上通过自身的软件仿真出硬件平台的运行情况,这样就可以通过软件仿真来验证我们设计的方案有没有问题,如果有问题,可以重新选择器件,连接器件,直到达到我们设定的目的,避免我们搭建实物的时候,如果当初选择的方案有问题,我们器件都已经焊接好了,再去卸载下去,再去焊接新的方案的器件,测试,这样会浪费人力和物力,也给开发者带来一定困惑,Proteus仿真软件就很好的解决这个问题,我们在设计之初,就使用该软件进行模拟仿真,测试,选择满足我们设计的最优方案。最后根据测试没问题的仿真图纸,焊接实物,调试,最终完成本设计的作品。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1026020.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode 332. Reconstruct Itinerary【欧拉回路,通路,DFS】困难

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

怎样获取某个文件的public方法个数

背景&#xff1a;idea 提供的list可以查看所有的构造方法&#xff0c;但是无法直接告诉我准确的数目&#xff0c;于是写了以下一个单独的类 import java.lang.reflect.Method; import java.lang.reflect.Modifier;public class MyPublicMethodCounter {public static void mai…

Cento7 Docker安装Zabbix,定制自定义模板

1.先安装docker环境 yum -y install yum-utils device-mapper-persistent-data lvm2#导入docker安装库 yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo #按指定版本安装好docker yum install docker-ce-20.10.5 docker-ce-cli-20…

vector类(顺序表)

文章目录 1.定义&#xff1a;接口成员函数构造成员函数析构函数赋值 2.迭代器2.1begin&#xff08;&#xff09;和end&#xff08;&#xff09;重点2.1.1应用2.1.1.1函数调用 2.1.1.2用变量接受迭代器 2.2rbegin()和rend()2.2.1应用 3.顺序表的访问&#xff08;增删查检&#x…

Vue的路由使用,Node.js下载安装及环境配置教程 (超级详细)

前言&#xff1a; 今天我们来讲解关于Vue的路由使用&#xff0c;Node.js下载安装及环境配置教程 一&#xff0c;Vue的路由使用 首先我们Vue的路由使用&#xff0c;必须要导入官方的依赖的。 BootCDN - Bootstrap 中文网开源项目免费 CDN 加速服务https://www.bootcdn.cn/ <…

架构核心技术之分布式消息队列

Java全能学习面试指南&#xff1a;https://javaxiaobear.cn 今天我们来学习分布式消息队列&#xff0c;分布式消息队列的知识结构如下图。 主要介绍以下内容&#xff1a; 同步架构和异步架构的区别。异步架构的主要组成部分&#xff1a;消息生产者、消息消费者、分布式消息队列…

Vue路由及Node.js环境搭建

一、Vue路由 1.1 定义 Vue路由是指使用Vue Router插件来管理前端应用程序的导航和页面路由的过程。它允许你在单页面应用程序&#xff08;SPA&#xff09;中定义不同的路由路径&#xff0c;并将每个路径映射到相应的组件。 通过使用Vue路由&#xff0c;你可以根据URL的变化加载…

无涯教程-JavaScript - ASIN函数

描述 ASIN函数返回给定数字的反正弦或反正弦,并返回以弧度表示的Angular,介于-π/2和π/2之间。 语法 ASIN (number)争论 Argument描述Required/OptionalNumberThe sine of the angle you want and must be from -1 to 1.Required Notes 如果您希望ASIN函数返回的Angular以…

HUAWEI华为荣耀猎人游戏本V700 i7独显2060(FRD-WFD9)原装出厂Windows10系统工厂模式(含F10还原)

华为HONOR荣耀笔记本原厂系统镜像包&#xff0c;安装恢复时自动创建F10一键智能还原功能 链接&#xff1a;https://pan.baidu.com/s/1_px_3Fr9qEE6jExz1eKKKg?pwdk6uc 提取码&#xff1a;k6uc 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、华为电脑管家等预装程序…

基于springboot高校场馆预订系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

(并查集) 1971. 寻找图中是否存在路径 ——【Leetcode每日一题】

❓ 1971. 寻找图中是否存在路径 难度&#xff1a;简单 有一个具有 n 个顶点的 双向 图&#xff0c;其中每个顶点标记从 0 到 n - 1&#xff08;包含 0 和 n - 1&#xff09;。图中的边用一个二维整数数组 edges 表示&#xff0c;其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 …

select in ()的时候,MySQL会自动按主键自增排序,要是按IN中给定的顺序来取,如何实现呢?

select * from table_name where id in ()的时候&#xff0c;MySQL会自动按主键自增排序&#xff0c;要是按IN中给定的顺序来取&#xff0c;如何实现呢&#xff1f; 比如下面这个查询结果&#xff0c;mysql会默认使用主键id的ASC自增排序结果集&#xff1a; 那么&#xff0c;…

RHEL 8.8 安装部署 Zabbix 6.4 详细过程

文章目录 前言1. 关闭系统防火墙2. 禁用 SELinux 模块3. 配置本地 YUM 源4. 配置 Zabbix 下载源5. 切换 PHP 模块版本6. 安装 Zabbix Server && Frontend && Agent7. 安装配置 MariaDB 数据库8. 为 Zabbix Server 配置数据库9. 启动 Zabbix Server 和 Agent 服…

【Java 基础篇】Java 中的 `wait` 与 `notify` 方法详解

在 Java 中&#xff0c;wait 与 notify 方法是用于线程之间通信的重要工具。它们被用于实现线程的等待与唤醒&#xff0c;以及线程之间的协作。本节将深入介绍这两个方法的使用方式、作用以及一些注意事项。 wait 方法 wait 方法是 java.lang.Object 类的一个实例方法&#x…

知识图谱(4)图算法

基于图有很多任务&#xff0c;比如&#xff1a; 节点分类&#xff1a;预测哪些网站是诈骗网站&#xff1b;关系预测&#xff1a;判断图中两个节点的关系&#xff1b;图分类&#xff1a;分子性质预测&#xff1b;聚类&#xff1a;社交网络分析&#xff0c;将相似用户聚类在一起…

如何选择合适的官文转录供应商

为什么质量不应该是唯一的考虑因素 官文记录必须准确无误——很多重要的程序&#xff08;包括法庭案件审判、严重欺诈调查和尸检调查&#xff09;成功得出结论&#xff0c;可能都依赖于记录的准确性。但是&#xff0c;在选择转录供应商时&#xff0c;还必须考虑更多因素。 官文…

2023Q2全球可穿戴腕带出货量达 4400 万台

全球可穿戴设备市场在2023年第二季度继续保持增长态势&#xff0c;总出货量达到了4400万台&#xff0c;同比增长了6%。这一增长得益于消费者对于可穿戴设备的需求不断增加&#xff0c;以及不同细分市场的需求反弹。 根据市场研究机构 Canalys 的最新报告&#xff0c;全球可穿戴…

阿里测开面试大全(一)附答案完整版

万字长文&#xff0c;建议收藏 1 什么是POM&#xff0c;为什么要使用它&#xff1f; POM是Page Object Model的简称&#xff0c;它是一种设计思想&#xff0c;而不是框架。大概的意思是&#xff0c;把一个一个页面&#xff0c;当做一个对象&#xff0c;页面的元素和元素之间操…

VM虚拟机CentOS7.9x64 LVM硬盘扩容

软件版本&#xff1a;VMWare Workstation14 虚拟机CentOS 7.9X64位 GParted 0.33.0 一、虚拟机安装gparted软件 sudo yum install epel-release sudo yum install gparted sudo yum install yum-utils git gnome-common gcc-c sudo yum-builddep gparted 二、关闭虚拟机&a…

【Java 基础篇】Java Condition 接口详解

Java 提供了一种更灵活和高级的线程协作机制&#xff0c;通过 Condition 接口的使用&#xff0c;你可以更精细地控制线程的等待和唤醒&#xff0c;实现更复杂的线程同步和通信。本文将详细介绍 Java 的 Condition 接口&#xff0c;包括它的基本概念、常见用法以及注意事项。 什…