基于AT89C51单片机四位加法计算器的设计

1.设计任务

利用AT89C51单片机为核心控制元件,设计一个四位加法计算器,设计的系统实用性强、操作简单,实现了智能化、数字化。

1)、通过4*4矩阵键盘输入数字及运算符;

2)、可以进行4位十进制数以内的加法算。如果计算结果超出四位数,则全部显示“E ”LED灯亮起

3)、可以进行加所有运算;

4)、添加其他功能。

2. 设计要求

2.1系统方案论证

根据设计任务,分析设计系统的组成,给出实现设计任务的几种方案,分析比较几种设计方案的优略,本着尽量以软件代替硬件,同时力求电路简单,工作可靠的原则,确定总体设计方案。

2.2系统硬件电路设计

根据系统设计方案进行软、硬件的分配,软、硬件设计分别进行。硬件设计包括单片机最小系统和扩展接口及配置,硬件结构在设计时要选择合适的元器件,硬件电路要简洁、工作可靠,需用Proteus绘制整个系统的电路仿真原理图。

2.3软件设计

根据该系统要求的功能进行软件设计,简述软件的功能,并根据每个模块的功能绘制软件流程图,根据流程图编写程序并汇编调试通过;列出软件清单,软件清单要求加以注释。

2.4 软硬件系统仿真

将编译后的程序软件加载到Proteus软件仿真的单片机ROM中,运行系统,实现软件程序对单片机系统的硬件电路的控制,并调试仿真结果,直至与设计任务相符。

#include <reg51.h>
typedef unsigned char uint8;
typedef unsigned int uint16;sbit rw=P2^5;
sbit rs=P2^6;
sbit e=P2^7;
sbit led=P2^0;
sbit beep=P2^1;
unsigned char key,num,ei,eii,p;unsigned char dat1[]={1,2,3,0x2b-0x30, 4,5,6,0x2d-0x30, 7,8,9,0x2a-0x30,0,0x01-0x30,0x3d-0x30,0x2b-0x30 };//保存显示的数据
unsigned char dat2[]="9999 revo rewsna";
unsigned char dat3[]="Hi welcome into";
unsigned char dat4[]="counter by yumo";
void delay(unsigned int i);
void lcdwrc(unsigned char c);//写入命令	
void lcdwrd(unsigned char dat);//写入数据
void lcdinit();//LCD初始化show();
void keyscan();
void do_beep();
void do_led(int x);									
void main()
{led=0;lcdinit();show();//个性化界面while(1){		keyscan();	}
}									void delay(unsigned int i)
{while(i--);
}
void lcdwrc(unsigned char c)//写入命令
{delay(1000);rs=0;//选择发送命令rw=0;//选择写入e=0;//使能P0=c;//放入命令e=1;//写时序delay(1000);//保持时间e=0;
}
void lcdwrd(unsigned char dat)//写入数据
{delay(1000);rs=1;//选择输入数据rw=0;//选择写入e=0;P0=dat;//写入数据e=1;//写入时序delay(1000);e=0;rs=0;
}void lcdinit()//LCD初始化
{delay(1500);lcdwrc(0x38);delay(500);lcdwrc(0x38);delay(500);lcdwrc(0x38);delay(500);lcdwrc(0x38);lcdwrc(0x08);lcdwrc(0x01);lcdwrc(0x06);lcdwrc(0x0c);key=0;num=0;flag=0;fuhao=0;a=0;b=0;c=0;d=0;}show()
{for(eii=0;eii<15;eii++){lcdwrd(dat3[eii]);}	lcdwrc(0xc0);//写命令函数使其到第二行第一个字符for(p=0;p<15;p++){lcdwrd(dat4[p]);}	return 1;
}
void keyscan()
{P1=0xfe;   //令第一行为0,然后判断是哪一列按下if(P1!=0xfe){delay(1000);if(P1!=0xfe){key=P1&0xf0;switch(key){case 0xe0: num=0;break;	  //1case 0xd0: num=1;break;	  //2case 0xb0: num=2;break;	  //3case 0x70: num=3;break;	  //加}}while(P1!=0xfe);if(num==0||num==1||num==2)	 //确认第一行的数1,2,3{if(flag==0)	 //没有按下符号键{a=a*10+dat1[num];do_led(a);}else{delay(1000);b=b*10+dat1[num];do_led(b);}		}if(num==3){flag=1;fuhao=1;//加号+	运行}lcdwrd(0x30+dat1[num]);}P1=0xfd;				//令第二行为0,判断是哪一列按下if(P1!=0xfd){delay(1000);if(P1!=0xfd){key=P1&0xf0;switch(key){case 0xe0: num=4;break;	  //4case 0xd0: num=5;break;	  //5case 0xb0: num=6;break;	  //6case 0x70: num=7;break;	  //违规}	}while(P1!=0xfd);if(num==4||num==5||num==6){if(flag==0)	 //没有按下符号键{a=a*10+dat1[num];do_led(a);				}else{b=b*10+dat1[num];do_led(b);}			}if(num==7){flag=1;do_beep();}lcdwrd(0x30+dat1[num]);}P1=0xfb;		 //令第三行为0,判断哪一列按下if(P1!=0xfb){delay(1000);if(P1!=0xfb){key=P1&0xf0;switch(key){case 0xe0: num=8;break;	  //7case 0xd0: num=9;break;	  //8case 0xb0: num=10;break;  //9case 0x70: num=11;break;  //违规}	}while(P1!=0xfb);if(num==8||num==9||num==10){if(flag==0)	 //没有按下符号键{a=a*10+dat1[num];do_led(a);				}else{	b=b*10+dat1[num];do_led(b);}			}else if(num==11){flag=1;do_beep();}lcdwrd(0x30+dat1[num]);}P1=0xf7;		 //令第四行为0,判断哪一列按下if(P1!=0xf7){delay(1000);if(P1!=0xf7){key=P1&0xf0;switch(key){case 0xe0: num=12;break;  //0case 0xd0: num=13;break;  //清除rstcase 0xb0: num=14;break;  //等号=case 0x70: num=15;break;  //违规}	}while(P1!=0xf7);switch(num){case 12: if(flag==0)	 //没有按下符号键{			a=a*10+dat1[num];do_led(a);lcdwrd(0x30);	}else{b=b*10+dat1[num];do_led(b);lcdwrd(0x30);}break;			case 13: lcdwrc(0x01);	//清屏指令			a=0;b=0;c=0;flag=0;fuhao=0;break;case 15:flag=1;do_beep();break;					case 14: 					//如果是等于号if(fuhao==1)//加{lcdwrc(0x4f+0x80);lcdwrc(0x04);//设置光标左移,屏幕不移动c=a+b;if(c==0){lcdwrc(0x4f+0x80);lcdwrc(0x04);lcdwrd(0x30);}while((c!=0)&&(c<=9999))	 //一位一位显示{lcdwrd(0x30+c%10);//显示结果的最后一位在0x4f的位置c=c/10;//取前面的结果数据	}						if(c>9999){for(ei=0;ei<=16;ei++){lcdwrd(dat2[ei]);			}			}						lcdwrd(0x3d); //显示等于号=a=0;b=0;c=0;flag=0;fuhao=0;//全部清除为0}					break;}}
}
void do_beep()
{beep = 0;				//蜂鸣器报警delay(100000);beep = 1;
}
void do_led(int x)
{if(x>9999){led=1;}
}

完整代码点开链接私信获取。

【iBot机器人工作室的个人空间-哔哩哔哩】 https://b23.tv/ryUWVKa

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyEclipse控制台console不停的自动跳动控制台界面,解决方案

有时候Eclipse启动&#xff0c;控制台console不会自动跳出来&#xff0c;需要手工点击该选项卡才行&#xff0c;按下面的设置&#xff0c;可以让它自动跳出来(或不跳出来)&#xff1a;方法&#xff1a; 一、windows -> preferences -> run/debug -> consol…

【shell】正则表达式和AWK

一.正则表达式 通配符匹配文件&#xff08;而且是已存在的文件&#xff09; 基本正则表达式扩展正则表达式 可以使用 man 手册帮助 正则表达式&#xff1a;匹配的是文章中的字符 通配符&#xff1a;匹配的是文件名 任意单个字符 1.元字符&#xff08;字符匹配&…

API管理:smart-doc 与 新版 torna 集成

使用 docker-compose 搭建 torna 环境 torna 介绍 项目地址&#xff1a;https://gitee.com/durcframework/torna torna 是一个企业接口文档解决方案&#xff0c;目标是让文档管理变得更加方便、快捷。Torna采用团队协作的方式管理和维护项目API文档&#xff0c;将不同形式的文…

发现一个好用的搜索引擎【非凡搜索】无广告

# 非凡搜索&#xff0c;小众、无广告、简洁。号称“不收集、不传播任何个人信息”。 非凡搜索 作为一个程序员&#xff0c;经常需要搜索一下技术资料&#xff0c;在国内大部分搜索引擎中搜索时&#xff0c;往往夹带各种广告或目的不明确的结果&#xff0c;这个搜索引擎无疑是一…

chrome vue devTools安装

安装好后如下图所示&#xff1a; 一&#xff1a;下载vue devTools 下载链接https://download.csdn.net/download/weixin_44659458/13192207?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-download-2%7Edefault%7ECTRLIST%7EPaid-1-13192207…

Clickhouse Join

ClickHouse中的Hash Join, Parallel Hash Join, Grace Hash Join https://www.cnblogs.com/abclife/p/17579883.html https://clickhouse.com/blog/clickhouse-fully-supports-joins-full-sort-partial-merge-part3 总结 本文描述并比较了ClickHouse中基于内存哈希表的3种连接…

申请免费的域名SSL证书

1.&#xff0c;选择SSL证书提供商 首先&#xff0c;您需要选择一个提供免费SSL证书的可信赖服务提供商。比如JoySSL就提供了永久免费版本的SSL证书。 2&#xff0c; 注册账户并登录 在选择了JoySSL&#xff0c;您需要在网站上注册一个账户。完成注册后&#xff0c;使用您的账…

uniapp微信小程序实现地图展示控件

最终实现效果&#xff1a; 地图上展示控件&#xff0c;并可以点击。 目录 一、前言 二、在地图上展示控件信息 点击后可进行绘制面图形 1.使用cover-view将控件在地图上展示 2.设置控件样式&#xff0c;使用好看的图标 3.控件绑定点击事件 一、前言 原本使用的是control…

Linux:服务器管理工具宝塔(bt)安装教程

一、简介 bt宝塔Linux面板是提升运维效率的服务器管理软件&#xff0c;支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等多项服务的管理功能 二、安装 使用 SSH 连接工具&#xff0c;如堡塔SSH终端连接到您的 Linux 服务器后&#xff0c;挂载磁盘&#xff0c;根据系统执…

【EasyExcel】导出excel并支持自定义设置数据行背景颜色等

需求背景&#xff1a; 根据查询条件将列表数据导出&#xff0c;并筛选出满足某个条件的数据&#xff0c;将满足条件的数据的背景颜色设置成黄色。 &#xff08;本文例子如&#xff1a;name出现的次数大于等于2&#xff0c;将相关数据背景颜色都设置为黄色&#xff09; …

智慧机场视频监控系统方案:AI智能助力机场智慧运营

一、方案背景 随着人们生活物质水平的上升&#xff0c;人们对机场的需求也日益增多&#xff0c;在民航新建、迁建、扩建机场项目猛增的同时&#xff0c;也需同步配备相应的安防监控系统&#xff0c;以满足民航机场安全管理要求和机场运营业务的高速发展。 二、方案概述 智慧机…

C++学习之路(十四)C++ 用Qt5实现一个工具箱(增加一个Base64图片编码预览功能)- 示例代码拆分讲解

上篇文章&#xff0c;我们用 Qt5 实现了在小工具箱中添加了《Base64加解密功能》功能。为了继续丰富我们的工具箱&#xff0c;今天我们就再增加一个平时经常用到的功能吧&#xff0c;就是「 Base64图片编码预览 」功能。下面我们就来看看如何来规划开发一个这样的小功能并且添加…