基于51单片机电子钟温度计数码显示设计( proteus仿真+程序+设计报告+讲解视频)

news2024/11/26 15:33:00

这里写目录标题

  • ✅1.主要功能:
  • ✅讲解视频:
  • ✅2.仿真设计
  • ✅3. 程序代码
  • ✅4. 设计报告
  • ✅5. 设计资料内容清单&&下载链接
    • ✅[资料下载链接:](https://docs.qq.com/doc/DS0Nja3BaQmVtWUpZ)

基于51单片机电子钟温度检测数码显示设计( proteus仿真+程序+设计报告+讲解视频)

仿真图proteus7.8及以上

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0061

✅1.主要功能:

基于51单片机AT89C51/52(与AT89S51/52、AT89C51/52、STC89C51/52等51内核单片机通用)

1、设备初始化时钟为 23 时 59 分 50 秒。

2、按键 K4 定义为“时钟设置”按键,通过该按键可切换选择待调整的时、分、秒,当前选择的显示单元以 1 秒为间隔亮灭,时、分、秒的调整需注意数据边界属性。

3、按键 K2 定义为“加”按键,在“时钟设置”状态下,每次按下该按键当前选择的单元(时、分或秒)增加 1 个单位。

4、按键 K1 定义为“减”按键,在“时钟设置”状态下,每次按下该按键当前选择的单元(时、分或秒)减少 1 个单位。

5、“时钟显示”状态下,按下 K3 按键,显示温度数据,松开按键,返回“时钟显示”界面。

6、当温度超过 30 摄氏度时指示灯 D1 以 0.2 秒为间隔闪烁。

需注意仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。

✅讲解视频:

仿真讲解+代码讲解

基于51单片机电子钟温度计数码管proteus仿真代码讲解(附下载链接

✅2.仿真设计

开始仿真

打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。

imgimg

✅3. 程序代码

使用keil4或者keil5编译,代码有注释,可以结合报告理解代码含义。

img

主函数main.c代码

#include <reg51.h>
#include"temp.h"

#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long

sbit L1=P2^2;//138引脚
sbit L2=P2^3;
sbit L3=P2^4;

sbit k1=P3^0;	//减
sbit k2=P3^1;	//加
sbit k3=P3^2;	//切换
sbit k4=P3^3;	//设置

sbit led=P2^0; //led
uchar key=0;//按键标志
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9
uchar shuma[8]={0x5b,0x4f,0x40,0x6d,0x6f,0x40,0x6d,0x3f};//时间显存
uchar wendu[3]={0x3f,0x3f,0x39};//温度显存

uchar time=0,miao=50,fen=59,shi=23;	//计时
uchar wen=0;//温度
uchar time0=0,time1=0;//定时变量
uchar mode=0;//模式,设置用

void delay(uint i);//函数声明

void display1()	//显示温度
{
   uchar i;
  for(i=0;i<3;i++)
  {
  P0=0;
  P2=(P2& 0xe3)+(i<<2);
  P0=wendu[2-i];
  delay(50);
  }
}
void display2()	//显示时间
{
  uchar i;
  for(i=0;i<8;i++)
  {
  P0=0;
  P2=(P2& 0xe3)+(i<<2);
  P0=shuma[7-i];
  delay(50);
  }
}
//显示计算
void suan()
{
		shuma[0]=smgduan[shi/10];
		shuma[1]=smgduan[shi%10];
		shuma[3]=smgduan[fen/10];
		shuma[4]=smgduan[fen%10];
		shuma[6]=smgduan[miao/10];
		shuma[7]=smgduan[miao%10];
		wen=Ds18b20ReadTemp();//读取温度
		wendu[0]=smgduan[wen/10];
		wendu[1]=smgduan[wen%10];
}
//按键检测
void key_scan()
{
	if(k1 && k2 && k3 && k4) //按键标志清零
			key=0;
	if(!k4 &&(key!=4))//设置
		{
			key=4;
			if(mode<3)
				mode++;
			else
				mode=0;
		}
		if(!k1 &&(key!=1))//减
		{
			key=1;
			if(mode==1)
			{
				if(shi>0)
					shi--;
				else
					shi=23;
			}
			if(mode==2)
			{
				if(fen>0)
					fen--;
				else
					fen=59;
			}
			if(mode==3)
			{
				if(miao>0)
					miao--;
				else
					miao=59;
			}
			suan();
		}
		if(!k2 &&(key!=2))//加
		{
			key=2;
			if(mode==1)
			{
				if(shi<23)
					shi++;
				else
					shi=0;
			}
			if(mode==2)
			{
				if(fen<59)
					fen++;
				else
					fen=0;
			}
			if(mode==3)
			{
				if(miao<59)
					miao++;
				else
					miao=0;
			}
			suan();
		}
}
//延时
void delay(uint i)
{
	while(i--)
	{
		key_scan();
	}
}
//主函数
void main(void)
{ 	
	TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
	TH0=0X3C;	//给定时器赋初值,定时50ms
	TL0=0Xb0;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器
	
 	while(1)
	{		
		if(mode==0)
		{
			if(k3)		//显示
				display2();//时间显示
			else
				display1();//温度显示
		}
		else//闪烁显示
		{
			if(mode==1)//小时
			{
				if(time<11)
				{
					P0=0;P2=(P2& 0xe3)+(0<<2);P0=shuma[7];delay(50);
					P0=0;P2=(P2& 0xe3)+(1<<2);P0=shuma[6];delay(50);
					P0=0;P2=(P2& 0xe3)+(2<<2);P0=shuma[5];delay(50);
					P0=0;P2=(P2& 0xe3)+(3<<2);P0=shuma[4];delay(50);
					P0=0;P2=(P2& 0xe3)+(4<<2);P0=shuma[3];delay(50);
					P0=0;P2=(P2& 0xe3)+(5<<2);P0=shuma[2];delay(50);
				}
				else
					display2();
			}
			if(mode==2)//分钟
			{
				if(time<11)
				{
					P0=0;P2=(P2& 0xe3)+(0<<2);P0=shuma[7];delay(50);
					P0=0;P2=(P2& 0xe3)+(1<<2);P0=shuma[6];delay(50);
					P0=0;P2=(P2& 0xe3)+(2<<2);P0=shuma[5];delay(50);
					P0=0;P2=(P2& 0xe3)+(5<<2);P0=shuma[2];delay(50);
					P0=0;P2=(P2& 0xe3)+(6<<2);P0=shuma[1];delay(50);
					P0=0;P2=(P2& 0xe3)+(7<<2);P0=shuma[0];delay(50);
				}
				else
					display2();
			}
			if(mode==3)//秒
			{
				if(time<11)
				{
					P0=0;P2=(P2& 0xe3)+(2<<2);P0=shuma[5];delay(50);
					P0=0;P2=(P2& 0xe3)+(3<<2);P0=shuma[4];delay(50);
					P0=0;P2=(P2& 0xe3)+(4<<2);P0=shuma[3];delay(50);
					P0=0;P2=(P2& 0xe3)+(5<<2);P0=shuma[2];delay(50);
					P0=0;P2=(P2& 0xe3)+(6<<2);P0=shuma[1];delay(50);
					P0=0;P2=(P2& 0xe3)+(7<<2);P0=shuma[0];delay(50);
				}
				else
					display2();
			}
		}
		
	}
}
//定时器0中断
void Timer0() interrupt 1
{
	
if((time0<4)&&(wen>30))//led闪烁
  {
  	time0=0;
	led=!led;
  }
else
	led=1;
if(time<20)//计时
	time++;
else
	{
	time=0;
	if(mode==0)	//模式0正常计时
	{
	if(miao<59)
		miao++;
	else
		{
		miao=0;
		if(fen<59)
			fen++;
		else
			{
			fen=0;
			if(shi<23)
				shi++;
			else
			{
				shi=0;
			}
			}		
		}
		suan();//显示计算
	}
	}
	TH0=0X3C;	//给定时器赋初值,定时50ms
	TL0=0Xb0;
}

✅4. 设计报告

5001字设计报告,内容包括硬件设计、软件设计、软硬件框图、调试、结论等

img

✅5. 设计资料内容清单&&下载链接

资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。

0、常见使用问题及解决方法–必读!!!!

1、仿真图

2、程序源码

3、功能要求

4、元器件清单

5、开题报告

6、软硬件流程框图

7、设计报告

8、讲解视频

Altium Designer 安装破解

KEIL+proteus 单片机仿真设计教程

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

相关数据手册

答辩技巧

设计报告常用描述

鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

img

资料下载链接:

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

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

相关文章

企业为什么要做软文营销推广

数字化时代的来临使企业推广方式发生变化&#xff0c;软文营销推广成为企业推广的常用方式之一&#xff0c;今天媒介盒子就来和大家聊聊&#xff0c;为什么企业需要做软文营销推广。 一、 第三视角传播品牌&#xff0c;提升受众接受度 传统广告的叙事方式是企业站出来&#x…

μC/OS-II---Task管理2(os_task.c)

目录 改变Task优先级Task挂起Task恢复Task信息获取Task调度器上锁&#xff08;os_core.c&#xff09;Task调度器开锁&#xff08;os_core.c&#xff09; 改变Task优先级 #if OS_TASK_CHANGE_PRIO_EN > 0u INT8U OSTaskChangePrio (INT8U oldprio,INT8U newprio) { #if (…

Hazelcast系列(九):Map(一)加载和存储

系列文章 Hazelcast系列(一)&#xff1a;初识hazelcast Hazelcast系列(二)&#xff1a;hazelcast集成&#xff08;嵌入式&#xff09; Hazelcast系列(三)&#xff1a;hazelcast集成&#xff08;服务器/客户端&#xff09; Hazelcast系列(四)&#xff1a;hazelcast管理中心 …

3. 【自动驾驶和机器人中的SLAM技术】实现基于预积分和图优化的GNSS+IMU+Odom的融合定位系统

目录 1. 公式推导2. GNSSIMUOdom融合定位3. 利用数值求导工具&#xff0c;验证本书实验中的雅可比矩阵的正确性4. 也欢迎大家来我公众号读书--“过千帆” 1. 公式推导 2. GNSSIMUOdom融合定位 程序实现以及运行效果&#xff1a; ①首先是在预积分程序中记录了预积分积累的IMU数…

竞赛 题目:基于python的验证码识别 - 机器视觉 验证码识别

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于pyt…

超详细!必看!!STM32--时钟树原理

一、什么是时钟&#xff1f; 时钟是单片机的脉搏&#xff0c;是系统工作的同步节拍。单片机上至CPU&#xff0c;下至总线外设&#xff0c;它们工作时序的配合&#xff0c;都需要一个同步的时钟信号来统一指挥。时钟信号是周期性的脉冲信号。 二、什么是时钟树&#xff1f; S…

Pikachu(皮卡丘靶场)初识XSS(常见标签事件及payload总结)

目录 1、反射型xss(get) 2、反射性xss(post) 3、存储型xss 4、DOM型xss 5、DOM型xss-x XSS又叫跨站脚本攻击&#xff0c;是HTML代码注入&#xff0c;通过对网页注入浏览器可执行代码&#xff0c;从而实现攻击。 ​ 1、反射型xss(get) Which NBA player do you like? 由…

【Mycat2实战】一、Mycat简介

1. 什么是Mycat 什么是Mycat Mycat是数据库中间件&#xff0c;所谓中间件数据库中间件是连接Java应用程序和数据库中间的软件。 为什么要用Mycat 遇到问题&#xff1a; Java与数据库的紧耦合高访问量高并发对数据库的压力读写请求数据不一致 2. Mycat与其他中间件区别 目前的…

全面解读Asana项目管理软件:功能、成本与顶级国内替代方案

Asana好用吗&#xff1f;Asana作为一款办公软件的话&#xff0c;其应用范围和受众范围是极为有限。支持这款软件的人把它夸上天&#xff0c;认为其他同类型产品根本不值一提&#xff1b;不支持这款软件的人又把它“束之高阁”&#xff0c;根本不想再用它。 Asana正是近些年具有…

玩转ChatGPT:ARIMA模型定制GPT-1.0

一、写在前面 好久不更新咯&#xff01; OpenAI又推出了GPT的一系列重大更新&#xff0c;其中GPTs深得我心啊。 GPTs允许用户创建自定义的ChatGPT版本&#xff0c;以满足自己各种特定需求。其核心理念在于&#xff0c;用户可以为不同的场景和任务创建定制化的ChatGPT。这意味…

为什么数据安全很重要?哪些措施保护数据安全?

数据安全很重要的原因是因为数据是现代社会的重要财产之一。很多组织和企业依赖数据来做出商业决策&#xff0c;管理客户关系&#xff0c;进行财务规划等等。如果这些数据泄露或遭到黑客攻击&#xff0c;那么就会影响企业的经济利益&#xff0c;甚至影响到个人的隐私和安全。此…

接口测试需要验证数据库么?

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

Git用pull命令后再直接push有问题

在gitlab新建一个项目&#xff0c;然后拉取到本地&#xff0c;用&#xff1a; git init git pull <远程主机名> 然后就是在本地工作区增加所有文件及文件夹。再添加、提交&#xff0c;都没问题&#xff1a; 但是&#xff0c;git push出问题&#xff1a; 说明本地仓库和…

解密图像处理中的利器——直方图与均衡化

直方图与均衡化是数字图像处理中常用的重要工具&#xff0c;它们能够帮助我们更好地理解和改善图像的亮度分布。本文将首先介绍直方图的基本概念以及其在图像处理中的意义&#xff0c;接着详细阐述直方图均衡化的原理和算法。同时&#xff0c;文章将探讨直方图均衡化在图像增强…

在 Android 上简单安全地登录——使用凭证管理器和密钥

我踏马很高兴地听说&#xff0c; Credential Manager的公开版本将于 11 月 1 日开始提供。Credential Manager 为 Android 带来了身份验证的未来&#xff0c;简化了用户登录应用程序和网站的方式&#xff0c;同时使其更加安全。 登录可能具有挑战性 - 密码经常使用&#xff0c…

【无线网络技术】——无线传输技术基础(学习笔记)

目录 &#x1f552; 1. 无线传输媒体&#x1f558; 1.1 地面微波&#x1f558; 1.2 卫星微波&#x1f558; 1.3 广播无线电波&#x1f558; 1.4 红外线&#x1f558; 1.5 光波 &#x1f552; 2. 天线&#x1f558; 2.1 辐射模式&#x1f558; 2.2 天线类型&#x1f564; 2.2.1 …

react Antd3以下实现年份选择器 YearPicker

项目antd版本低&#xff0c;没有直接可使用的年份选择器&#xff0c;参考此篇&#xff08;使用antd实现年份选择器控件 - 掘金&#xff09; 一开始在state里设置了time&#xff1a; this.state {isopen: false,time: null } 在类似onChange事件里this.setState({time: valu…

Linux系统软件安装方式

Linux系统软件安装方式 1. 绿色安装2. yum安装3. rpm安装3.1 rpm常用命令 4. 源码安装4.1 安装依赖包4.2 执行configure脚本4.3 编译、安装4.4 安装4.5 操作nginx4.6 创建服务器 1. 绿色安装 Compressed Archive压缩文档包&#xff0c;如Java软件的压缩文档包&#xff0c;只需…

图形学中的噪声

1 value noise 四个点取随机数然后做插值。 float random (in vec2 st) {return fract(sin(dot(st.xy,vec2(12.9898,78.233)))* 43758.5453123); }float noise (in vec2 st) {vec2 i floor(st);vec2 f fract(st);float a random(i);float b random(i vec2(1.0, 0.0));fl…

centralwidget 不能布局

必须要在QT ui中添加一个任意的子控件&#xff08;比如添加了一个pushButton&#xff09;&#xff0c;然后在centralwidget 才能右键设置布局&#xff0c;成功去掉centralwidget 右下角的红色的标记。