【006】基于51单片机的简易电子计算器Proteus仿真设计

一、压缩包资料内容(私信获取

  • (1)、基于51单片机的简易电子计算器proteus仿真设计一份;
  • (2)、基于51单片机的简易电子计算器proteus仿真设计keli源代码一份;
  • (3)、基于51单片机的简易电子计算器proteus仿真设计参考毕业论文一份;
  • (4)、基于51单片机的简易电子计算器proteus仿真设计视频讲解一份;

二、设计要求

  • (1)、本次电子实训课程要求以STC89C51系列单片机作为主控制芯片,设计一款简易电子计算器;
  • (2)、系统要求采用LCD1602模块显示运算过程以及运算结果;
  • (3)、系统实现简单的加减乘除的四项基本运算;

三、相关资料截图

图1. proteus仿真界面截图

图2. Keil编程界面源代码截图

图3. 基于51单片机的简易电子计算器论文截图

四、视频讲解

私信获取全部内容 

部分源代码

#include<reg51.h>   
#define uint unsigned int 
#define uchar unsigned char

sbit lcden=P3^7; 
sbit rs=P3^5;
sbit rw=P3^6;

char i,j,temp,num,num_1;
long a,b,c;    
float a_c,b_c;
uchar flag,fuhao;


uchar code table[]={
7,8,9,0,
4,5,6,0,
1,2,3,0,
0,0,0,0};
uchar code table1[]={	
7,8,9,0x2f-0x30,	//7,8,9,÷
4,5,6,0x2a-0x30,	//4, 5, 6,×
1,2,3,0x2d-0x30,	//1, 2, 3,-
0x01-0x30,0,0x3d-0x30,0x2b-0x30//C,0,=,+
};
void delay(uchar z) 
{
uchar y;
for(z;z>0;z--)
   for(y=0;y<110;y++);
}
void write_com(uchar com) 
{
	rs=0;
	P1=com;    
	delay(5);lcden=1;delay(5); lcden=0;
}

void write_date(uchar date) 
{
	rs=1; P1=date; delay(5);
	lcden=1; delay(5); lcden=0;
}

void init() //初始化
{
    num=-1;
lcden=1; 
rw=0;
write_com(0x38); 
delay(5); write_com(0x38); 
delay(5); write_com(0x0c); 
delay(1); write_com(0x06); 
delay(1); write_com(0x80); 
delay(1); write_com(0x01); 
num_1=0;
i=0; j=0;
a=0;     
b=0;  
c=0;
flag=0;
fuhao=0; 
}
void keyscan() 
{
	P2=0xfe; 
	if(P2!=0xfe)
	{
	   delay(20);// 延迟20ms
	   if(P2!=0xfe) {  temp=P2&0xf0;
	    switch(temp)
	    {
	     case 0xe0:num=0;   break;	
	     case 0xd0:num=1;   break; 	
	     case 0xb0:num=2;   break;	
	     case 0x70:num=3;   break;	
	    }
	   }   while(P2!=0xfe);
	   if(num==0||num==1||num==2)
	   { 
	       if(j!=0){write_com(0x01); j=0;  }
	       if(flag==0)
		    { a=a*10+table[num];    } 
		    else
		    {    b=b*10+table[num];   }
	   }
	   else
	   {
	    flag=1;
	    fuhao=4;
	   }
	   i=table1[num];     
	   write_date(0x30+i);
	}

	P2=0xfd;
	if(P2!=0xfd)
	{
	   delay(20);
	   if(P2!=0xfd){  temp=P2&0xf0;
	    switch(temp)
	    {
	     case 0xe0:num=4; break; //4
	     case 0xd0:num=5; break; //5
	     case 0xb0:num=6; break; //6
	     case 0x70:num=7; break; //×
	    }
	   }   while(P2!=0xfd);
	   if(num==4||num==5||num==6&&num!=7)//如果按下的是'4','5'或'6'
	   { 
	    if(j!=0){ write_com(0x01);  j=0;   }
	       if(flag==0)
	    { a=a*10+table[num];     }
	    else
	    { b=b*10+table[num];   }
	   }
	   else//如果按下的是'×'
	   {  flag=1;
	      fuhao=3;
	   }
	   i=table1[num];      
	   write_date(0x30+i);
	}

  • 2
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

B站小邓子分享官

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值