【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

news2024/11/26 10:43:52

【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)

Proteus 仿真:Proteus 8.16(有低版本)

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:P04

1. 主要功能:

普中开发板实验设计

本设计旨在设计一个基于51单片机的简易计算器仿真设计。

功能要求:实现加减乘除四则简单运算数码管显示

1、能通过矩阵键盘输入正确键值;

2、能进行简单的四则运算;

3、能以数码管正确显示数值;

4、最大支持运算结果9 9999,超出将蜂鸣器报警;

(目前仅完全适配普中开发板A234,其他普中开发板型号可能需要做代码修改或接线)

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

资料下载链接:

P系列单片机设计下载链接(复制到浏览器打开)

以下为本设计资料展示图:

2. 讲解视频:

讲解视频包含仿真运行讲解、实物运行讲解和代码讲解

【普中】基于51单片机简易计算器仿真+开发板讲解(proteus代码报告)

3. 设计说明书(报告)

img

本次课程设计的主要目标是以51单片机为基础,结合Proteus仿真软件,设计一款简易计算器。这个计算器需要实现加减乘除四则运算功能,并且能够将运算结果通过数码管进行显示。这个任务不仅要求我们掌握单片机的编程技术,还需要我们深入理解数码管显示的工作原理,同时还需要通过Proteus软件进行系统的仿真和调试。

在设计过程中,我们将从硬件电路设计和软件编程两个方面进行。硬件电路设计包括单片机最小系统、输入按键、输出数码管等部分。其中,单片机最小系统是整个系统的核心,它包括了单片机、时钟电路、复位电路等基本部分。输入按键将用于用户输入数字和运算符号,而输出数码管则将用于显示运算结果。

软件编程方面,我们将使用C语言进行编程。首先,我们需要根据设计需求,编写出相应的程序。程序应该能够读取用户的输入,进行四则运算,并根据运算结果驱动数码管进行显示。然后,我们将在Proteus中进行仿真和调试,检查程序的正确性和系统的稳定性。

通过这个课程设计,我们不仅能够更加深入地理解单片机的原理和应用,还能够掌握基本的电路设计和软件编程技能。同时,通过Proteus的仿真和调试功能,我们还可以更好地理解系统的运行过程,提高我们的调试和解决问题的能力。我们期待通过这个课程设计,能够更好地掌握单片机的应用,为未来的学习和工作打下坚实的基础。

4. 仿真

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

img

5. 实物烧录和现象

img

计算结果如下图:

软件准备:

第一次使用务必先安装CH340驱动。

双击打开 STC-ISP.exe。

下载步骤:

0.板子先上电,接电源线到电脑USB口,先不上电,板子无灯光。

1.选择选择单片机型号

2.选择下载器的串口

3.打开编译生成的 HEX 文件

4.点击下载,单片机板子电源键按下接通电源,等待下载完成提示

6. 程序代码

使用keil4或者keil5编译,代码有注释。

核心代码:

#include<reg52.h> //头文件
#include<intrins.h>//头文件
#include<math.h>
#define uint unsigned int //宏定义
#define uchar unsigned char//宏定义
long x=0,y=0,num=0;
uint operators,input,iny=0;
uchar key,k,ff=16;
sbit a0=P2^2;					//138锁存器
sbit a1=P2^3;
sbit a2=P2^4;
sbit beep=P2^5;
sbit led=P3^0;


 uchar code table[]={					 //数码管段选
 0x3f,0x06,0x5b,0x4f,
 0x66,0x6d,0x7d,0x07,
 0x7f,0x6f,0x77,0x7c,
 0x39,0x5e,0x79,0x71,
 0x00,0x40
 };

 //uchar code table1[]={0xfe,0xfd};	   //数码管位选


void delay(uint xms)  //延时
{
	uint xx,yy;
	for (xx=xms;xx>0;xx--)
		for(yy=110;yy>0;yy--);
}

void display() //显示函数,数码管动态扫描
{
    uchar wan,qian,bai,shi,ge;	
	wan=num/10000;
	qian=num%10000/1000;
	bai=num%1000/100;
	shi=num%100/10;							//num求摸  数码管显示十位
	ge=num%10;							//num求余  数码管显示个位

    P0=0x00;					//数码管全关
	P0=table[ff];			  //端选给P0
	a0=0;						   //位选
	a1=0; 
	a2=0;
	delay(3);				  //延时
	
	P0=0x00;				
	P0=table[ge];//段选显示个位数
	a0=0;
	a1=0;
	a2=0;		//选中第一位
	delay(3);

	P0=0x00;				
	P0=table[shi];//段选显示十位数
	a0=1;
	a1=0;
	a2=0;		//选中第二位
	delay(3);
	
	P0=0x00;
	P0=table[bai];
	a0=0;
	a1=1;
	a2=0;		//选中第三位
	delay(3);
	
	P0=0x00;
	P0=table[qian];//段选显示千位数
	a0=1;
	a1=1;
	a2=0;		//选中第四位
	delay(3);
	
	P0=0x00;
	P0=table[wan];//段选显示万位数
	a0=0;
	a1=0;
	a2=1;		//选中第五位
	delay(3);
	
 							 
}

  
 /**********算术运算函数*************/
void arithmetic()
{
	if (iny){
		switch(operators)
		{
			case 1:							//加法运算
			x=x+y;
			num=x;

			if(num<100000&&num>-100000)			 //正常范围
			{
			  TR0=0;
			}
			else							   //超出范围,报警
			TR0=1;

			break;

			case 2:						   //减法运算
			x=x-y;
			num=x;
			if(num<0)
			{
			  num=num*(-1);
			  ff=17;
			}
			else
			ff=16;
			if(num<100000&&num>-100000)
			{
			  TR0=0;
			}
			else
			TR0=1;

			break;

			case 3:
			x=x*y;						  //乘法运算
			num=x;

			if(num<100000&&num>-100000)
			{
			  TR0=0;
			}
			else
			TR0=1;
			break;

			case 4:						  //除法运算
			x=x/y;
			num=x;
			if(y!=0)					 //除数不为0
			{
			  //TR0=0;
			  led=1;
			}
			else					  //除数为0	报警
			//TR0=1;
			  led=0;
			}
		}
}

 /***********符号处理函数*************/

void fuhao() 
{
	if(key<=9&&key>=0)      //判断按下的键是否为数值
	{
	num=num*10+(key-0);
	if (operators>0)
		{
		y=num;
		iny=1;
		}
	else
		{
		x=num;
		if(num<100000&&num>-100000)
		{
		  TR0=0;
		}
		else
		TR0=1;



		}
	}
else
	{
	switch(key)						  //按键判断
		{
		case 'c':
					//x=0;
					//y=0;
					//num=0;
					if(operators==0)
					{
					  x=x/10;	 			 //一位一位删除
					  num=x;			  
					  iny=0;
					}
					if(operators>0)
					{
					  y=y/10;		//一位一位删除
					  num=y;		
					}			  
					//iny=0;
					//operators=0;
					//display();
					break;
		case '=':
					arithmetic();
					iny=0;
					operators=0;
					//num=0;
					break;
		case '+':
				    if (operators)
					arithmetic();
					operators=1;
					num=0;
					break;
		case '-':
				    if (operators)
					arithmetic();
					operators=2;
					num=0;
					break;
		case '*':
				    if (operators)
					arithmetic();
					operators=3;
					num=0;
					break;
		case '/':
					if (operators)
					arithmetic();
					operators=4;
					num=0;
					break;
		}
	}
}

7. 设计资料内容清单

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

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

1、仿真图

2、程序源码

3、功能要求

4、讲解视频

5、烧录工具

6、开题报告

7、设计报告

8、软硬件流程框图

Altium Designer 安装破解

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

KEIL安装破解

Proteus元器件查找

Proteus安装

Proteus简易使用教程

单片机学习资料

普中-2&普中-3&普中-4开发板原理图.pdf

相关数据手册

答辩技巧

设计报告常用描述

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

img

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

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

相关文章

台灯选用什么类型好?精选适合考研党使用的护眼台灯

台灯可以说是我们日常办公、学习必不可少的一盏桌面照明工具&#xff0c;因为他能够给我们带来充足的光线。不过大多数时候&#xff0c;我们只关注到了台灯的亮度是否足够&#xff0c;以为只要光线够亮就不会上眼镜&#xff0c;但实际上我们大多数实力下降的原因就和光线有很大…

大数据技术之 Kettle(PDI)

Kettle 第一章 Kettle概述1.1、ETL简介1.2、Kettle简介1.3、作业 和 转换 概念1.4、核心组件1.5、下载安装 第二章 控件使用2.1、初体验&#xff1a;csv 转换 excel 示例2.2、转换2.2.1、输入控件2.2.1.1、表输入 2.2.2、输出控件2.2.2.1、表输出2.2.2.2、更新&插入/更新2.…

前后端传参:掌握FormData并解决form-data类型传参问题

目录 第一章 解决问题过程 第二章 对form-data的理解 2.1 使用场景 2.2 了解formData对象的创建与使用 2.3 formData常用方法 2.3.1 构造函数 2.3.2 获取数据 2.3.3 添加数据 2.3.4 修改数据 2.3.5 检查是否有该数据 2.3.6 删除数据 2.3.7 遍历formData里的键值对…

极狐GitLab DevSecOps 之容器镜像安全扫描

容器镜像安全 现状 最近某银行遭受供应链攻击的事件传的沸沸扬扬&#xff0c;安全又双叒叕进入了人们的视野。安全确实是一个非常重要&#xff0c;但是又最容易被忽略的话题。但是现在到了一个不得不人人重视安全&#xff0c;人人为安全负责的时代。尤其以现在非常火爆的云原…

Mybatis概述和快速入门

文章目录 Mybatis概述Mybatis概念JDBC 缺点Mybatis 优化 Mybatis快速入门 Mybatis概述 Mybatis概念 &#xff08;1&#xff09;Mybatis是一个半ORM&#xff08;对象关系映射&#xff09;框架&#xff0c;它内部封装了JDBC&#xff0c;开发时只需要关注SQL语句本身&#xff0c…

电脑上怎么录屏?教你3种方法,轻松搞定!

在数字时代&#xff0c;电脑录屏已经成为各行各业的普遍需求&#xff0c;无论是制作教学视频、记录操作步骤&#xff0c;还是制作工作报告。可是很多人不知道电脑上怎么录屏&#xff0c;本文将详细介绍电脑上三种常见的录屏方法&#xff0c;通过这些工具&#xff0c;您可以轻松…

houdini 神经网络

实现个神经网络的3D可视化&#xff0c;美爆了&#xff01;-腾讯云开发者社区-腾讯云 https://vimeo.com/stefsietz GitHub - julrog/nn_vis: A project for processing neural networks and rendering to gain insights on the architecture and parameters of a model throu…

Linux驱动(中断、异步通知):红外对射,并在Qt StatusBus使用指示灯进行显示

本文工作&#xff1a; 1、Linux驱动与应用程序编写&#xff1a;使用了设备树、中断、异步通知知识点&#xff0c;实现了红外对射状态的异步信息提醒。 2、QT程序编写&#xff1a;自定义了一个“文本指示灯”类&#xff0c;并放置在QMainWidget的StatusBus中。 3、C与C混合编程与…

详细教程 - 从零开发 Vue 鸿蒙harmonyOS应用 第五节 (基于uni-app封装鸿蒙接口请求库)

随着鸿蒙系统的兴起,越来越多的app会采用鸿蒙开发。而鸿蒙开发必不可少的就是调用各种接口服务。为了简化接口的调用流程,我们通常会做一层封装。今天就来讲解一下,如何用uni-app封装鸿蒙的接口请求库。 一、新建项目 首先我们要新建一个鸿蒙项目啦&#xff01;当然选择第一个…

音频ncm格式转mp3格式

做个笔记&#xff0c;ncm格式转mp3格式 参考&#xff1a;传送门 import os import json import base64 import struct import logging import binascii from glob import glob from tqdm.auto import tqdm from textwrap import dedent from Crypto.Cipher import AES from mu…

批量移除dom上注册的事件

目录 一、问题 二、解决方法 三、总结 一、问题 1.在window上注册了事件&#xff0c;想要批量移除注册的事件&#xff0c;发现移除不了&#xff08;也不知道什么时候会被自动移除__) 二、解决方法 1.添加事件时增加同一个AbortController生成的 signal标识。使用AbortCon…

物流实时数仓:数仓搭建(DWD)二

系列文章目录 物流实时数仓&#xff1a;采集通道搭建 物流实时数仓&#xff1a;数仓搭建 物流实时数仓&#xff1a;数仓搭建&#xff08;DIM&#xff09; 物流实时数仓&#xff1a;数仓搭建&#xff08;DWD&#xff09;一 物流实时数仓&#xff1a;数仓搭建&#xff08;DWD&am…

【赠书第11期】Unity 3D游戏开发

文章目录 前言 1 Unity 3D简介 2 Unity 3D基本概念 2.1 场景&#xff08;Scene&#xff09; 2.2 游戏对象&#xff08;Game Object&#xff09; 2.3 组件&#xff08;Component&#xff09; 2.4 资源&#xff08;Asset&#xff09; 3 Unity 3D重要组件 3.1 物理引擎 …

基于SSM的图书馆预约座位系统的设计与实现(部署+源码+LW)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SSM的图书馆预约座位…

如何使用JavaScript 将数据网格绑定到 GraphQL 服务

前言 作为一名前端开发人员&#xff0c;GraphQL对于我们来说是令人难以置信的好用。它可以用来简化数据访问&#xff0c;这让我们的工作变得更加容易。 什么是 GraphQL&#xff1f;它是一个抽象层&#xff0c;位于任意数量的数据源之上&#xff0c;并为您提供一个简单的 API …

【深度学习】注意力机制(三)

本文介绍一些注意力机制的实现&#xff0c;包括EMHSA/SA/SGE/AFT/Outlook Attention。 【深度学习】注意力机制&#xff08;一&#xff09; 【深度学习】注意力机制&#xff08;二&#xff09; 【深度学习】注意力机制&#xff08;四&#xff09; 【深度学习】注意力机制&a…

PCB设计规则中的经验公式_笔记

PCB设计规则中的经验公式 规则1 - 临界长度规则2 - 信号带宽与上升时间规则3- 时钟信号带宽规则4-信号传输速度规则5- 集肤 (效应) 深度规则6 - 50Ω传输线电容规则7 - 50Ω传输线电感规则8 - 回流路径电感规则9 - 地弹噪声规则10- 串行传输比特率与信号带宽规则11- PCB走线直流…

HR人才测评,招聘企业中高层管理的岗位胜任力测评方案

不管是哪一个企业&#xff0c;中高层管理都是企业的核心层&#xff0c;在对这部分人才进行测评方案制定的时候&#xff0c;则要更加细致谨慎一些&#xff0c;避免出现人才录用失误的情况。 中高层管理人员是公司的支柱&#xff0c;需要具备的素质主要偏向于管理能力、综合素质…

CyclicBarrier学习一

一、定义 CyclicBarrier 字面意思回环栅栏&#xff08;循环屏障&#xff09;&#xff0c;通过它可以实现让一组线程等待至某个状态&#xff08;屏障点&#xff09;之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后&#xff0c;CyclicBarrier可以被重用。 CyclicB…