【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)
Proteus 仿真:Proteus 8.16(有低版本)
程序编译器:keil 4/keil 5
编程语言:C语言
设计编号:P04
普中开发板实验设计
本设计旨在设计一个基于51单片机的简易计算器仿真设计。
功能要求:实现加减乘除四则简单运算数码管显示
1、能通过矩阵键盘输入正确键值;
2、能进行简单的四则运算;
3、能以数码管正确显示数值;
4、最大支持运算结果9 9999,超出将蜂鸣器报警;
(目前仅完全适配普中开发板A234,其他普中开发板型号可能需要做代码修改或接线)
需注意本设计仿真中51单片机芯片是兼容的,AT89C51,AT89C52是51单片机的具体型号,内核是一样的。相同的原理图里,无论stc还是at都一样,引脚功能都是一样的,程序是兼容的,芯片可以替换为STC89C52/STC89C51/AT89C52/AT89C51等51单片机芯片。
以下为本设计资料展示图:
讲解视频包含仿真运行讲解、实物运行讲解和代码讲解
【普中】基于51单片机简易计算器仿真+开发板讲解(proteus代码报告)
本次课程设计的主要目标是以51单片机为基础,结合Proteus仿真软件,设计一款简易计算器。这个计算器需要实现加减乘除四则运算功能,并且能够将运算结果通过数码管进行显示。这个任务不仅要求我们掌握单片机的编程技术,还需要我们深入理解数码管显示的工作原理,同时还需要通过Proteus软件进行系统的仿真和调试。
在设计过程中,我们将从硬件电路设计和软件编程两个方面进行。硬件电路设计包括单片机最小系统、输入按键、输出数码管等部分。其中,单片机最小系统是整个系统的核心,它包括了单片机、时钟电路、复位电路等基本部分。输入按键将用于用户输入数字和运算符号,而输出数码管则将用于显示运算结果。
软件编程方面,我们将使用C语言进行编程。首先,我们需要根据设计需求,编写出相应的程序。程序应该能够读取用户的输入,进行四则运算,并根据运算结果驱动数码管进行显示。然后,我们将在Proteus中进行仿真和调试,检查程序的正确性和系统的稳定性。
通过这个课程设计,我们不仅能够更加深入地理解单片机的原理和应用,还能够掌握基本的电路设计和软件编程技能。同时,通过Proteus的仿真和调试功能,我们还可以更好地理解系统的运行过程,提高我们的调试和解决问题的能力。我们期待通过这个课程设计,能够更好地掌握单片机的应用,为未来的学习和工作打下坚实的基础。
打开仿真工程,双击proteus中的单片机,选择hex文件路径,然后开始仿真。
计算结果如下图:
软件准备:
第一次使用务必先安装CH340驱动。
双击打开 STC-ISP.exe。
下载步骤:
0.板子先上电,接电源线到电脑USB口,先不上电,板子无灯光。
1.选择选择单片机型号
2.选择下载器的串口
3.打开编译生成的 HEX 文件
4.点击下载,单片机板子电源键按下接通电源,等待下载完成提示
使用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;
}
}
}
资料设计资料包括仿真,程序代码、讲解视频、功能要求、设计报告、软硬件设计框图等。
0、常见使用问题及解决方法–必读!!!!
1、仿真图
2、程序源码
3、功能要求
4、讲解视频
5、烧录工具
6、开题报告
7、设计报告
8、软硬件流程框图
Altium Designer 安装破解
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
普中-2&普中-3&普中-4开发板原理图.pdf
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url