单片机 十进制计算器
C51单片机和12864液晶显示制作十位简易计算器C源码
#include <reg51.h>#include<intrins.h>#include<math.h>#include<stdlib.h>sbit RS=P2^0;sbit RW=P2^1;sbit E=P2^2;sbit BUZZER=P1^0;#define unchar unsigned char#define unint unsigned intvoid delay(unsigned int t){unsigned int i,j;for(i = 0;i < t;i ++)for(j = 0;j < 120;j ++);}void busy() //判断忙状态{RS=0;RW=1;E=1;P0=0xff;while((P0&0X80)==0x80);_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();}void write_com( unsigned char com){ _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();busy();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();RS=0;RW=0;E=1;P0=com;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();E=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();}void write_date(unchar date){ _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();busy();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();RS=1;RW=0;E=1;P0=date;E=0;}void init() //液晶初始化{write_com(0x30); //选择基本指令,选择8位数据流_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();write_com(0x0c); //开显示(无游标,不反白)0x0e显示游标_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();write_com(0x01); //清除显示,并且设定地址指针为00H_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();write_com(0x06);// 设定游标移动方向}void sendaddr(unchar n,unchar m) //送地址{switch(n){case 1:write_com(0x80+m);break;case 2:write_com(0x90+m);break;case 3:write_com(0x88+m);break;case 4:write_com(0x98+m);break;}}void display(unchar n,unchar m,unchar *s) //显示字符串{sendaddr(n,m);while(*s>0){write_date(*s);s++;}void clearscreen() //清屏{write_com(0x01);}void tishi(){clearscreen();display(1,0,"超出计算范围");display(2,0,"请按复位键");display(3,0,"并重新输入");display(4,0,"否则会出现错误");}void displayshu(unchar n,unchar m, long rzt) //显示字符串{ unchar i,j,k,x,p;unchar t[10]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};unsigned char array[10];array[9]=(int)rzt%10;array[8]=((int)rzt/10)%10;array[7]=((int)rzt/100)%10;array[6]=((int)rzt/1000)%10;array[5]=((int)rzt/10000)%10;array[4]=((int)rzt/100000)%10;array[3]=((int)rzt/1000000)%10;array[2]=((int)rzt/10000000)%10;array[1]=((int)rzt/100000000)%10;array[0]=(int)rzt/1000000000;sendaddr(n,m);for(i=0;i<10;i++){if(array[i]==0)p=i;elsebreak;}for(j=p+1;j<10;j++){t[k]=array[j] ;k++;}while(t[x]!=0xff)write_date(t[x]+0x30);x++;}}void main(void){unchar i,j,opt,p;long b,c,rzt;start:init();delay(20);i=0;j=0;rzt=0;b=0;c=0;write_com(0x80);while(1) //输入第一个数{P3=0xfe;if(P3!=0xfe){delay(40);if(P3!=0xfe){switch(P3&0xf0){case0x70:BUZZER=0;delay(80);BUZZER=1;write_date(0+0x30);b=b*10+0;i++;if(i==11)tishi(); break;case0xb0:BUZZER=0;delay(80);BUZZER=1;write_date(1+0x30);b=b*10+1;i++;if(i==11)tishi(); break;case0xd0:BUZZER=0;delay(80);BUZZER=1;write_date(2+0x30);b=b*10+2;i++;if(i==11)tishi(); break;case0xe0:BUZZER=0;delay(80);BUZZER=1;write_date(3+0x30);b=b*10+3;i++;if(i==11)tishi(); break;}if(P3!=0xfe);delay(30);while(P3!=0xfe);}}P3=0xfd;if(P3!=0xfd){delay(40);if(P3!=0xfd){switch(P3&0xf0){case0x70:BUZZER=0;delay(80);BUZZER=1;write_date(4+0x30);b=b*10+4;i++;if(i==11)tishi(); break;case0xb0:BUZZER=0;delay(80);BUZZER=1;write_date(5+0x30);b=b*10+5;i++;if(i==11)tishi(); break;case0xd0:BUZZER=0;delay(80);BUZZER=1;write_date(6+0x30);b=b*10+6;i++;if(i==11)tishi(); break;case0xe0:BUZZER=0;delay(80);BUZZER=1;write_date(7+0x30);b=b*10+7;i++;if(i==11)tishi(); break;}if(P3!=0xfd);delay(30);while(P3!=0xfd);}}P3=0xfb;if(P3!=0xfb){delay(40);if(P3!=0xfb){switch(P3&0xf0){case0x70:BUZZER=0;delay(80);BUZZER=1;write_date(8+0x30);b=b*10+8;i++;if(i==11) tishi(); break;case0xb0:BUZZER=0;delay(80);BUZZER=1;write_date(9+0x30);b=b*10+9;i++;if(i==11) tishi(); break;case0xd0:BUZZER=0;delay(80);BUZZER=1;p=1;write_com(0x97);write_date(0x2b);opt=10; goto two; break;case0xe0:BUZZER=0;delay(80);BUZZER=1;p=1;write_com(0x97);write_date(0x2d);opt=11; goto two; break;}if(P3!=0xfb);delay(30);while(P3!=0xfb);}}P3=0xf7;if(P3!=0xf7){delay(40);if(P3!=0xf7){switch(P3&0xf0){case0x70:BUZZER=0;delay(80);BUZZER=1;p=1;write_com(0x97);write_date(0x2a);opt=12; goto two; break;case0xb0:BUZZER=0;delay(80);BUZZER=1;p=1;write_com(0x97);write_date(0x2f);opt=13; goto two; break;case 0xd0:BUZZER=0;delay(80);BUZZER=1; clearscreen();goto start;break;case 0xe0:BUZZER=0;delay(80);BUZZER=1; clearscreen();goto start;break;}if(P3!=0xf7);delay(30);while(P3!=0xf7);}}}two:write_com(0x88);while(1) //输入第二个数{P3=0xfe;if(P3!=0xfe){delay(40);if(P3!=0xfe){switch(P3&0xf0){case0x70:BUZZER=0;delay(80);BUZZER=1;write_date(0+0x30);c=c*10+0;j++;if(j==11)tishi(); break;case0xb0:BUZZER=0;delay(80);BUZZER=1;write_date(1+0x30);c=c*10+1;j++;if(j==11)tishi(); break;case0xd0:BUZZER=0;delay(80);BUZZER=1;write_date(2+0x30);c=c*10+2;j++;if(j==11)tishi(); break;case0xe0:BUZZER=0;delay(80);BUZZER=1;write_date(3+0x30);c=c*10+3;j++;if(j==11)tishi(); break;}if(P3!=0xfe);delay(30);while(P3!=0xfe);}}P3=0xfd;if(P3!=0xfd){delay(40);if(P3!=0xfd){switch(P3&0xf0){case0x70:BUZZER=0;delay(80);BUZZER=1;write_date(4+0x30);c=c*10+4;j++;if(j==11)tishi();brea k;case0xb0:BUZZER=0;delay(80);BUZZER=1;write_date(5+0x30);c=c*10+5;j++;if(j==11)tishi();brea k;case0xd0:BUZZER=0;delay(80);BUZZER=1;write_date(6+0x30);c=c*10+6;j++;if(j==11)tishi();brea k;case0xe0:BUZZER=0;delay(80);BUZZER=1;write_date(7+0x30);c=c*10+7;j++;if(j==11)tishi();break ;}if(P3!=0xfd);delay(30);while(P3!=0xfd);}}P3=0xfb;if(P3!=0xfb){delay(40);if(P3!=0xfb){switch(P3&0xf0){case0x70:BUZZER=0;delay(80);BUZZER=1;write_date(8+0x30);c=c*10+8;j++;if(j==11)tishi(); break;case0xb0:BUZZER=0;delay(80);BUZZER=1;write_date(9+0x30);c=c*10+9;j++;if(j==11)tishi(); break;case0xd0:BUZZER=0;delay(80);BUZZER=1;if(p==0){ write_com(0x97); write_date(0x2b);} break;case0xe0:BUZZER=0;delay(80);BUZZER=1;if(p==0){ write_com(0x97); write_date(0x2d);} break;}if(P3!=0xfb);delay(30);while(P3!=0xfb);}}P3=0xf7;if(P3!=0xf7){delay(40);if(P3!=0xf7){switch(P3&0xf0){case0x70:BUZZER=0;delay(80);BUZZER=1;if(p==0){ write_com(0x97); write_date(0x2a);} break;case0xb0:BUZZER=0;delay(80);BUZZER=1;if(p==0){ write_com(0x97); write_date(0x2f);} break;case 0xd0:BUZZER=0;delay(80);BUZZER=1;goto answer;break;case 0xe0:BUZZER=0;delay(80);BUZZER=1; clearscreen();goto start;break;}if(P3!=0xf7);delay(30);while(P3!=0xf7);}}}answer:write_com(0x98);write_date(0x3d);if(c==0&&opt==13) //错误处理{display(2,0,"分母不能为零");clearscreen();goto start;}switch(opt){case 10:rzt=(b+c);displayshu(4,2,rzt);break;case 11:rzt=(b-c);if(rzt<0){rzt=c-b;write_date(0x2d);} displayshu(4,2,rzt);break;case 12:rzt=(b*c);displayshu(4,2,rzt);break;case 13:rzt=(b/c);if((int)b%(int)c==0)displayshu(4,2,rzt);elserzt=rzt*1000;displayshu(4,2,rzt);break;}//错误处理与显示if(rzt>9999999999){clearscreen();display(2,1,"超出计算范围");delay(1000);goto start;}while(1){P3=0xf7;if(P3!=0xf7){delay(40);if(P3!=0xf7){if((P3&0xf0)==0xe0){goto start;}if(P3!=0xf7);delay(30);while(P3!=0xf7);}}}}。
基于AT89C51单片机的十进制计算器系统设计
基于AT89C51单片机的十进制计算器系统设计本设计是基于AT89C51 举行的十进制计算器系统设计,可以完成计算器的键盘输入,举行加、减、乘、除4 位无符号数字的容易四则运算,并在上相应的显示结果。
硬件方面从功能考虑,首先挑选内部存储资源丰盛的AT89C51 单片机,输入采纳4×4 矩阵键盘。
显示采纳4 位7 段共阳极LED 动态显示。
软件方面从分析计算器功能、流程图设计,再到程序的编写举行系统设计。
引言本系统采纳AT89C51 单片机作为控制器,用来实现实现四位数的“+”,“-”,“*”,“/”运算,运算结果通过数码管显示,并具有有清零功能。
AT89C51 具有如下特点:40 个引脚,4k BytesFlash 片内程序存储器,128 bytes 的随机存取数据存储器(RAM),32 个外部双向输入/ 输出(I/O)口,5 个中断优先级2层中断嵌套中断,2 个16 位可编程定时计数器,2 个全双工串行通信口,(WDT),片内时钟。
1 总体设计计划1.1 系统组成与工作原理本系统以51 单片机为主控核心,与矩阵键盘、晶振、LED 显示管模块一起组合而成。
其工作过程为:首先存储单元初始化,显示初始值和键盘扫描,推断按键位置,得出按键值,单片机则对数据举行储存与相应的处理转换,之后送入数码管动态显示。
将运算结果送入数码管动态显示。
本设计只能举行结果不超过四位数的运算,其功能如下:(1)数字键“0”到“9”用数码管显示。
(2)加法运算:加数与被加数均不能超过9999,加法终于结果不能超过9999.(3)减法运算:减法运算正常规律为大的数值减去小的数值,本计算器亦如此,只能举行正常规律的运算,如为小的数值减去大的数值,则将得到的负数与535 相加,得到相应的结果,即假如想举行小数减大数的运算,则把得到的结果减去535 即得到负数的正确结果。
(4)乘法运算:与上述办法一样,计算结果不能超出9999,如溢出则显示结果惟独后三位。
单片机计算器
单片机计算器关键信息项:1、产品名称:单片机计算器2、功能描述:具备基本的四则运算、存储功能等3、技术规格:处理器型号、内存容量等4、质量标准:符合相关行业标准5、交付时间:具体日期6、价格及付款方式:总价、预付款比例等7、售后服务:保修期限、维修方式等8、知识产权归属:明确相关权利归属9、保密条款:对涉及技术、商业秘密的保护约定1、产品概述11 本协议所涉及的单片机计算器是一款专为特定需求设计的计算设备。
111 该计算器采用先进的单片机技术,具备高效、准确的计算能力。
112 其外观设计简洁,操作方便,适用于多种应用场景。
2、功能与性能21 单片机计算器应具备以下基本功能:211 加法、减法、乘法和除法四则运算。
212 具备存储功能,能够保存一定数量的计算结果。
213 支持小数和整数的计算。
22 性能方面,应满足以下要求:221 计算响应速度快,结果准确无误。
222 在连续使用过程中,性能稳定,无卡顿现象。
3、技术规格31 所采用的单片机型号为具体型号。
32 内存容量不少于具体容量。
33 显示屏分辨率为具体分辨率。
4、质量标准41 产品应符合国家和行业相关的质量标准。
42 经过严格的测试和检验,确保无质量缺陷。
5、交付与验收51 交付时间为具体日期。
52 交付地点为具体地点。
53 验收标准包括功能完整性、性能稳定性等。
6、价格与付款方式61 产品总价为具体金额。
62 付款方式如下:621 签订协议后,需支付预付款预付款比例。
622 在产品交付验收合格后,支付剩余款项。
7、售后服务71 提供保修期限的免费保修服务。
72 在保修期内,非人为原因导致的故障,负责免费维修或更换。
73 保修期满后,提供有偿维修服务,收费标准合理公正。
8、知识产权归属81 产品所涉及的相关知识产权归归属方所有。
82 未经授权,任何一方不得擅自使用或转让相关知识产权。
9、保密条款91 双方应对在协议履行过程中知悉的对方技术、商业秘密予以保密。
单片机十进制加法计算器设计
单片机十进制加法计算器设计设计概述:1.输入部分设计为了实现数字输入功能,可以采用4x4矩阵键盘作为输入设备。
通过扫描键盘矩阵,可以检测用户按下的按键,并将相应的按键字符存储在单片机内部的缓冲区中。
键盘扫描需要使用外部中断或定时器中断,在按键被按下时触发中断程序进行扫描和存储。
2.计算部分设计为了进行数字加法运算,需要在单片机中定义变量来存储输入的数字,并使用适当的算法进行加法运算。
加法运算可以通过逐位相加的方式实现,先对个位数进行加法运算,再对十位数进行加法运算,以此类推,直到最高位数。
3.显示部分设计为了显示运算结果,可以使用数码管来显示数字。
数码管的选型可以选择共阳极或共阴极的数码管,具体选择要根据实际的需求和电路设计来确定。
单片机需要通过IO口控制数码管的显示,将运算结果转化为相应的数码管段码,并通过IO口输出给数码管进行显示。
4.输出部分设计为了实现结果的输出,可以选择将结果通过串口发送给上位机,或者通过并行接口输出给其他设备。
具体的接口选择要根据实际的需求和电路设计来确定。
设计步骤:1.确定硬件平台和单片机型号,根据单片机的外设资源选择合适的输入、输出和显示设备。
2.进行电路设计,包括键盘输入电路、按键检测电路、数码管显示电路和外部接口电路。
3.编写单片机的初始化程序,包括IO口初始化、定时器中断初始化和中断服务程序编写。
4.编写键盘扫描程序,实现对键盘输入的检测和字符存储。
5.编写数字加法运算程序,实现输入数字的加法运算和结果的存储。
6.编写数码管显示程序,将加法运算结果转化为数码管的段码并进行显示。
7.编写输出程序,将结果通过串口或并行接口输出给上位机或其他设备。
8.进行调试和测试,优化程序和电路设计,确保计算器的稳定性和准确性。
9.编写用户界面程序,实现菜单、输入和输出操作的交互。
设计思路:利用单片机的运算和控制能力来实现数字加法的功能,以实现单片机十进制加法计算器的设计。
通过键盘输入,将数字存储在单片机内部的变量中,并采用逐位相加的算法实现数字加法运算。
课程设计-十进制加法计算器设计
课程设计(论文)任务书电气学院电力系统专业12(1 )班一、课程设计(论文)题目:十进制加法计算器设计二、课程设计(论文)工作自2015年1 月12 日起至2015 年1月16 日止。
三、课程设计(论文) 地点: 电气学院机房10-303四、课程设计(论文)容要求:1.课程设计的目的(1)综合运用单片机原理及应用相关课程的理论知识和实际应用知识,进行单片机应用系统电路及程序设计,从而使这些知识得到进一步的巩固,加深和发展;(2)熟悉和掌握单片机控制系统的设计方法,汇编语言程序设计及proteus 软件的使用;(3)通过查阅图书资料、以及书写课程设计报告可提高综合应用设计能力,培养独立分析问题和解决问题的能力。
2.课程设计的容及任务课程设计容:利用单片机及一些外围电路设计一个简易的十进制加法计算器,硬件电路设计大概主要包括:键盘电路,显示电路以及复位电路和晶振电路。
软件方面的设计主要包括:LED显示程序设计、数值送显示缓存程序设计、读键子程序设计、运算程序的设计。
课程设计任务:设计一个键盘显示装置,键盘上除了定义0~9共10个数字键外,还要相应的功能健,其它键不定义无响应。
利用此系统可分别输入十进制被加数和加数,实现两个数相加并将结果以十进制形式显示出来。
3.课程设计说明书编写要求(1)设计说明书用A4纸统一规格,论述清晰,字迹端正,应用资料应说明出处。
(2)说明书容应包括(装订次序):题目、目录、正文、设计总结、参考文献等。
应阐述整个设计容,要重点突出,图文并茂,文字通畅。
(3)报告容应包括方案分析;方案对比;整体设计论述;硬件设计(电路接线,元器件说明,硬件资源分配);软件设计(软件流程,编程思想,程序注释,)调试结果;收获与体会;附录(设计代码放在附录部分,必须加上合理的注释)(4)学生签名:2015年1月16 日课程设计(论文)评审意见(1)总体方案的选择是否正确;正确()、较正确()、基本正确()(2)程序仿真能满足基本要求;满足()、较满足()、基本满足()(3)设计功能是否完善;完善()、较完善()、基本完善()(4)元器件选择是否合理;合理()、较合理()、基本合理()(5)动手实践能力;强()、较强()、一般()(6)学习态度;好()、良好()、一般()(7)基础知识掌握程度;好()、良好()、一般()(8)回答问题是否正确;正确()、较正确()、基本正确()、不正确()(9)程序代码是否具有创新性;全部()、部分()、无()(10)书写整洁、条理清楚、格式规;规()、较规()、一般()总评成绩优()、良()、中()、及格()、不及格()评阅人:年月日摘要随着社会科技的发展和进步,计算器因其功能强大而早已成为人们日常生活中必不可少的工具,最简单的计算器就能实现简单的加减乘除运算,这让人们免去了复杂的计算过程,大大提高了工作效率。
基于单片机的简单计算器
基于单片机的简单计算器计算器是我们日常生活中常用的工具之一,用于进行各种数学运算。
在计算机科学领域,我们可以利用单片机来制作一个简单的计算器,以满足计算需求。
本文将介绍基于单片机的简单计算器的实现过程和相关原理。
一、项目概述我们将利用单片机的计算能力和显示功能来制作这个简单计算器。
用户可以通过按键来输入数字和运算符,计算器将会实时显示计算结果。
在本项目中,我们将使用8051系列单片机和LCD显示屏来实现这个计算器。
二、系统设计1.硬件设计本项目所需的硬件主要包括单片机、键盘和显示屏。
我们可以使用8051系列的单片机,例如AT89C52、键盘可以通过矩阵键盘来实现,显示屏采用16x2字符型LCD显示屏。
2.软件设计在单片机上实现计算器功能,我们需要编写相应的软件程序。
该程序主要包括以下几个部分:(1)初始化设置:设置单片机的IO口模式和状态,初始化LCD显示屏。
(2)键盘扫描:通过轮询方式检测键盘输入,获取用户按键信息。
(3)数字显示:将用户输入的数字显示在LCD屏幕上。
(4)运算处理:根据用户输入的数字和运算符进行相应的运算操作。
(5)结果显示:将运算结果显示在LCD屏幕上。
三、主要功能模块介绍1.初始化设置在初始化设置模块中,我们需要设置单片机的IO口模式和状态,将其中的一组IO口作为输入端口用于键盘扫描,另一组IO口作为输出端口用于LCD显示屏控制。
同时需要初始化LCD显示屏,使其处于工作状态。
2.键盘扫描键盘扫描模块需要使用IO口作为输入端口来检测键盘输入。
通过按下不同的按键,会在IO口上产生不同的信号。
我们可以使用轮询方式来检测IO口的状态,获取用户按键信息。
3.数字显示在数字显示模块中,我们需要将用户输入的数字显示在LCD屏幕上。
可以使用LCD显示屏的库函数来实现这个功能。
我们可以将用户输入的数字存储在内存中,并通过LCD库函数将其显示在屏幕上。
4.运算处理运算处理模块需要根据用户输入的数字和运算符进行相应的运算操作。
基于单片机的计算器设计与十进制计数与数字显示电路的设计与仿真
基于单片机的计算器设计与十进制计数与数字显示电路的设计与仿真电子与信息学院课程设计设计报告学院电子与信息学院课程名称电子电路课程设计设计题目数字显示式光电计数电路的制作专业班级姓名学号指导教师时间数字显示式光电计数电路◆1设计任务和要求1.1设计任务:实现数字显示式光电计数器的功能,当用遮挡物挡住光电开关一下,它就自动计数一个,按一下SB就复位清零。
可实现0~99的计数显示。
1.2设计要求:在电源输入端输入7-9V电压,经稳压调幅成6V左右在电压,经过光电输入电路、计数脉冲形成电路、显示电路组成和显示计数部分完成电路功能。
◆2总体设计方案2.1方案一:图1、光电显示电路原理:如图所示电路,当光敏三极管VT1接收到红外发光二极管射来的红外光线时,VT1导通,比较器IC2-B的反相输入端6脚为低电平,7脚输出高电平,加到比较器IC2-A的反相输入端,使1脚输出低电平,则光电耦合器4N35内的发光管点亮,对应的光敏管导通,三极管VT2也导通,VT2集电极输出低电平。
当有物体通过红外发光二极管VD1和接收管VT1之间,红外线被挡住,VT1截止,IC2-A的1脚输出高电平,4N35截止,VT2截止,VT2集电极输出高电平,故当有物体通过VT1时,便在VT2集电极上输出计数脉冲信号,该信号送到十进制计数器,再送到译码显示电路,显示出相应的数据。
缺点:输入电源需要220V较大,连接不好容易烧坏原件2.2方案二:图2光电数字显示电路原理:该电路有光电输入电路(VD,3DU12),脉冲形成电路(IC1A,IC1B组成电压比较器;光电耦合器;晶体管开关电路)和记数与显示电路等组成. 当光敏三极管VD接收到红外发光二极管射来的红外光线时,3DU12中VT1导通,比较器IC1-A 的反相输入端为低电平,输出高电平,加到比较器IC1-B的反相输入端,使输出低电平,则光电耦合器4N35内的发光管点亮,对应的光敏管导通,三极管也导通,集电极输出低电平。
十进制计数器的制作与调试
任务 十进制计数器的制作与调试
3. 同步RS触发器的主要特点
(1)时钟控制。在CP=1期间接收输入 信号,CP=0时状态保持不变,与基本RS 触发器相比,对触发器状态的转变增加了 时钟控制。
(2)R、S之间有约束条件。不能允许出 现R和S同时为1的情况,否则会使触发器 处于不确定的状态。
任务 十进制计数器的制作与调试
(一) 二进制译码器
二进制译码器是将输入的二进制代码“翻译”成 为其原来所对应信息的组合逻辑电路。它有n个输入端, 2n个输出端。一般称为n线-2n线译码器,且对应于输 入代码的每一种状态,2n个输出中只有一个为1(或为 0),其余全为0(或为1)。图4-2所示为3线-8线译码器 74LS138的引脚排列及惯用图形符号。
图4-8 74LS48与共阴极数码管相连
任务 十进制计数器的制作与调试
活动
小组成员讨论译码 电路的实现方法,以译 码器74LS248为例来制 作一个0~9一位数字的 显示电路。首先了解 74LS248芯片的结构和 功能,其惯用图形符号 如图4-9所示。
图4-9 74LS248的惯用图形符号
任务 十进制计数器的制作与调试
任务 十进制计数器的制作与调试
共阴极显示译码器有7448、74LS48和74C48等,其特点是: 有效高电平输出;内部有升压电阻,因而无须外部电阻;试灯输 入;前、后沿零灭灯控制;显示译码器有灯光调节能力;输出最 大电压为 5.5 V,吸收电流为6 mA。共阳极显示译码器7446的引 脚排列及惯用图形符号如图4-5所示。其功能表见表4-3。从表中 可以看到,当输入信号DCBA为0000~1001时,分别显示0~9数 字信号;当输入1010~1110时,显示非数字信号,当输入1111时, 7个显示段全暗。
单片机十进制加法计算器设计
单片机十进制加法计算器设计单片机是一种微型计算机,它包含了CPU、RAM、ROM、I/O接口等基本组件,用于控制电子器件的运行。
在本文中,我们将设计一个十进制加法计算器,使用单片机来实现。
设计理念和思路如下:1.输入和输出:-输入:我们将使用开发板上的按钮作为输入,来输入两个十进制数。
-输出:我们将使用开发板上的数码管显示器作为输出,来显示计算结果。
2.算法:-我们将使用最常见的十进制加法算法来实现加法功能。
-首先,将两个十进制数的个位数相加,并将结果存储在一个变量中。
-接下来,将两个十进制数的十位数相加,并将结果与上一步的结果相加,再将结果存储在同一变量中。
-以此类推,直到将所有位数相加完毕。
3.硬件连接:-我们将使用数码管显示器来显示计算结果。
数码管需要与单片机的I/O接口相连接。
-开发板上的按钮将作为输入,通过单片机的GPIO接口进行控制。
4.软件实现:-我们将使用C语言编写单片机程序,使用单片机的GPIO接口进行输入和输出控制。
-首先,初始化I/O接口,配置按钮为输入,配置数码管为输出。
-然后,通过查询按钮状态,获取输入的两个十进制数。
-接下来,进行加法计算,并将结果显示在数码管上。
下面是一个示例的C语言程序,用于实现十进制加法计算器:```#include <reg51.h>sbit Button1 = P1^0; // 定义按钮1连接的引脚sbit Button2 = P1^1; // 定义按钮2连接的引脚sbit Seg1 = P2^0; // 定义数码管显示第1位的引脚sbit Seg2 = P2^1; // 定义数码管显示第2位的引脚...sbit Seg7 = P2^6; // 定义数码管显示第7位的引脚void Delay(unsigned int t) //延时函数unsigned int i, j;for(i=0;i<t;i++)for(j=0;j<123;j++);void Display(unsigned int num) //数码管显示函数//将每个位的数字显示在相应的数码管上...Seg7 = num / 1 % 10;unsigned int Add(unsigned int a, unsigned int b) //加法计算函数unsigned int sum = a + b;return sum;void mainwhile(1)//查询按钮状态,获取输入的两个十进制数unsigned int num1 = Button1;unsigned int num2 = Button2;//进行加法计算unsigned int result = Add(num1, num2);//显示计算结果在数码管上Display(result);}```这是一个简单的十进制加法计算器的设计和实现过程。
单片机课程设计-计算器
未来发展方向
智能化:引入人工 智能技术,实现语 音识别、图像识别 等功能
便携化:设计更小、 更轻、更薄的计算 器,方便携带和使 用
网络化:实现计算 器与互联网的连接 ,实现远程控制和 数据传输
环保化:采用环保 材料和节能设计, 降低能耗和污染
感谢您的观看
汇报人:
计算器模式:支持科学计算器模式和普 通计算器模式
错误提示:当
体积小:单片机计算器体积小,便于携带和使用 功耗低:单片机计算器功耗低,可以长时间使用 功能强大:单片机计算器功能强大,可以进行各种复杂的计算 可编程:单片机计算器可编程,可以根据需要进行功能扩展和修改
显示模块
液晶显示屏:用 于显示计算结果 和操作提示
驱动电路:控制 液晶显示屏的显 示效果
接口电路:连接 液晶显示屏与单 片机
背光控制:调节 液晶显示屏的亮 度和对比度
输入模块
键盘输入:通过键盘输入数字 和运算符号
液晶显示:显示输入结果和操 作提示
电源模块:提供稳定的电源供 应
复位模块:用于系统复位和初 始化
弦等
算法设计:采 用模块化设计, 每个功能模块 对应一个算法
算法实现:使 用C语言编写算 法,实现计算
器功能
测试与调试:编 写测试程序,对 算法进行测试和 调试,确保算法 正确性和稳定性
中断服务程序
功能:处理突发事件,如按键、定时器等 结构:包括中断请求、中断响应、中断处理、中断返回等步骤 特点:速度快、实时性强、效率高 应用:广泛应用于各种单片机系统中,如计算器、遥控器等
存储模块
存储容量:根据计算器功能 需求选择合适的存储容量
存储芯片:用于存储计算器 程序和数据
存储方式:采用静态存储或 动态存储方式
51单片机实现的简易计算器
51单片机实现的简易计算器1. 4X4键盘输入,点阵字符型液晶显示。
2. 由于所采用的浮点程序库的限制(MCU平台只找到这个……),浮点运算采用3字节二进制补码表示,有效数字6位。
对于输入输出,采用3字节BCD码浮点数格式,有效数字只有4位,因此最终有效数字只有4位。
3. 可进行连续输入,例如:1.23+4.56*8.23/234.8 ,但是运算结果为从左到右,这也是8位简易计算器的方式。
4. 可进行错误判断,溢出、除零等错误将显示一个字符E 。
5. 由于键盘只有16个按键,安排如下:+---------------+| 7 | 8 | 9 | + || 4 | 5 | 6 | - || 1 | 2 | 3 | * || 0 | . | = | / |+---------------+6. 按键的缺少导致取消了一些特殊函数,即开根号,三角函数(sin, cos, tan, ctg)的实现,由于这些函数在浮点程序库中均已提供,如果硬件允许,在原来的框架上添加这些附加功能是很容易的(可以看作和+, -, *, /等价的按键操作,调用不同的子程序进行运算即可)7. 按两次= 等于清灵。
因为按键实在太少,才采用了这个做法。
8. 相应举例:按键结果说明- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -123+= 123 按下等号而没有第二个操作数,保留第一个操作数并认为此次运算结束(等号的功能)123+321/111 4.0 等价于(123+321) / 1112.3+5.4=/0.1+ 77 等号后直接按 / ,则将前面的运算结果作为第一个操作数1/0= E 错误显示9. 不足使用3字节的浮点数表示,不可避免的带来了数表示的不精确,加上有效数字比较少,因此计算结果很容易产生误差,尤其是进行连续多次运算后,结果和精度较高的科学计算器的误差会很快达到0.01以上,当然这个差距和所测试的用例也有关系,4位有效数字导致了数字123456只能表示为123400,最后两位有效数字被摒弃了。
微机原理6位十进制四则整数运算计算器
数学与计算机学院微型计算机原理及应用实验报告年级2007级学号2007430092 姓名张新莹成绩专业计算机科学与技术实验地点主楼528 指导教师王龙江实验项目6位十进制四则整数运算计算器实验日期2010-6-25一、实验目的1、实现6位十进制四则整数运算计算器。
2、进一步学习使用8279芯片。
3、理解和掌握计算机硬件系统、底层基础软件的知识和设计。
4、理解和掌握计算机软硬件系统的整体和软硬件系统是如何协调工作的原理和设计与编程等方面知识。
二、实验原理及内容Intel 8279可用作单片机的可编程通用键盘和显示器接口。
利用它能完成键盘输入和显示控制两种功能。
键盘部分提供一种扫描方式,可与64个按键的矩阵键盘连接,能对键盘不断扫描,自动消抖,自动识别按下的键并给出编码。
8279的键盘格式为:实验设定扫描信号连接键盘的列线,回复信号连接键盘的行线,所以,D5 D4 D3表示按下键所在的列号,D2 D1 D0表示按下的键所在的行号。
显示输出时,它有一个16×8位显示RAM,其内容通过自动扫描,可由8或16位LED 数码管显示。
6位十进制四则整数运算计算器的实现用8279芯片提供的扩展键盘和LED 显示器。
显示屏为6位数码管,只需显示十进制整数值,没有小数及负数。
显示器的段选码由OUTA口和OUTB口输出,经74LS244驱动后送给共阴极LED。
显示器的位扫描信号经74LS138译码、75451驱动后提供给LED的公共极。
有效数字前不显示零和没有有效数字时只显示一个零。
比如当3/2时,结果为1.5,但只显示1;当1/2时,结果为0.5,但只显示0。
在输入一位有效数字后,显示的数字都向左移一位。
比如输入13时,先输入1,再输入3,1左移,3进入1左移后空出的位置。
键盘包含:0 ~ 9、+、-、x、/、=、C(清零)共十六个键(不能使用PC机的键盘),有计算结果溢出显示,在显示器上显示特殊字符E。
单片机-十进制计算器
单片机实验报告 四姓名 学号时间 2015.05.14 地点 B526 实验题目 简易十进制计算器一、实验目的1. 掌握单片机编程和调试方法。
2. 掌握键盘、LED 显示接口工作原理及编程方法。
二、实验内容利用MCS-51单片机,设计一个简易十进制计算器,完成一位十进制有符号数的加、减、乘、除运算。
16个按键的安排:10个数字键(0-9),用于输入运算的数字;5个功能键:+、-、×、÷、=、清零(符号选择)。
本实验要求显示:输入的十进制数字及符号,正数不显示符号,负数在数的前面显示“-”;运算符显示(显示字形自定);运算结果显示,包括数字和符号。
三、实验电路连线P0 P1评 阅四、实验说明本实验采用动态显示电路,即6个数码管分时循环工作,刷新频率≥25Hz。
键盘采用矩阵式电路,L1-L4作为输出,H1-H4作为输入。
(详细工作原理请参考教材第10章)。
要求所有的程序预先在WA VE仿真调试通过,达到设计要求后下载程序到单片机芯片在实验板上实际运行。
程序的下载由实验室提供编程器统一烧写,单片机芯片由实验室提供,调试完成后交回。
五、实验仪器和设备PC机、WA VE软件、仿真器、实验板、编程器、电源等。
六、程序流程图及程序YJ EQU 50H ;结果存放YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放ORG 00HSTART: MOV R3,#0 ;初始化显示为空MOV GONG,#0MOV 32H,#00HMOV 33H,#00HMOV 34H,#00HMLOOP: CALL DISP ;调显示子程序WAIT: CALL TESTKEY ;判断有无按键JZ WAITCALL GETKEY ;读键INC R3 ;按键个数CJNE A,#0,NEXT1 ;判断是否数字键LJMP E1 ;转数字键处理NEXT1: CJNE A,#1,NEXT2LJMP E1NEXT2: CJNE A,#2,NEXT3LJMP E1NEXT3: CJNE A,#3,NEXT4LJMP E1NEXT4: CJNE A,#4,NEXT5LJMP E1NEXT5: CJNE A,#5,NEXT6LJMP E1NEXT6: CJNE A,#6,NEXT7LJMP E1NEXT7: CJNE A,#7,NEXT8LJMP E1NEXT8: CJNE A,#8,NEXT9LJMP E1NEXT9: CJNE A,#9,NEXT10LJMP E1NEXT10: CJNE A,#10,NEXT11 ;判断是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#11,NEXT12LJMP E2NEXT12: CJNE A,#12, NEXT13LJMP E2NEXT13: CJNE A,#13,NEXT14LJMP E2NEXT14: CJNE A,#14,NEXT15LJMP E2NEXT15: LJMP E3 ;判断是否清除键E1: CJNE R3,#1,N1 ;判断第几次按键LJMP E11 ;为第一个数字N1: CJNE R3,#2,N2LJMP E12 ;为第二个数字N2: CJNE R3,#3,N3LJMP E13 ;为第三个数字N3: LJMP E3 ;第四个数字转溢出E11: MOV R4,A ;输入值暂存R4MOV 34H,A ;输入值送显示缓存MOV 33H,#00HMOV 32H,#00HLJMP MLOOP ;等待再次输入E12: MOV R7,A ;个位数暂存R7MOV B,#10MOV A,R4MUL AB ;十位数ADD A,R7MOV R4,A ;输入值存R4MOV 32H,#00H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE13: MOV R7,AMOV B,#10MOV A,R4MUL ABJB OV,E3 ;输入溢出ADD A,R7JB CY,E3 ;输入溢出MOV R4,AMOV 32H,33H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE3: MOV R3,#0 ;按键次数清零MOV R4,#0 ;输入值清零MOV YJ,#0 ;计算结果清零MOV GONG,#0 ;功能键设为零MOV 32H,#00H ;显示清空MOV 33H,#00HMOV 34H,#00HLJMP MLOOPE2: MOV 34H,#00HMOV 33H,#00HMOV 32H,#00HMOV R0,GONG ;与上次功能键交换MOV GONG,AMOV A,R0CJNE A,#10,N21 ;判断功能键LJMP JIA ;"+"N21: CJNE A,#11,N22LJMP JIAN ;"-"N22: CJNE A,#12,N23LJMP CHENG ;"*"N23: CJNE A,#13,N24LJMP CHU ;"/"N24: CJNE A,#0,N25LJMP FIRST ;首次按功能键N25: LJMP DEN ;"="N4: LJMP E3FIRST: MOV YJ,R4 ;输入值送结果MOV R3,#0 ;按键次数清零LJMP DISP1 ;结果处理JIA: MOV A,YJ ;上次结果送累加器ADD A,R4 ;上次结果加输入值JB CY,N4 ;溢出MOV YJ,A ;存本次结果MOV R3,#0 ;按键次数清零LJMP DISP1JIAN: MOV A,YJSUBB A,R4 ;上次结果减输入值JB CY,N4 ;负数溢出MOV YJ,AMOV R3,#0LJMP DISP1CHENG: MOV A,YJMOV B,AMOV A,R4MUL AB ;上次结果乘输入值JB OV,N4 ;溢出MOV YJ,ALJMP DISP1CHU: MOV A,R4MOV B,AMOV A,YJDIV AB ;上次结果除输入值MOV YJ,AMOV R3,#0LJMP DISP1DEN: MOV R3,#0LJMP DISP1DISP1: MOV B,#10MOV A,YJ ;结果送累加器DIV AB ;结果除10MOV YJ1,A ;暂存"商"MOV A,B ;取个位数MOV 34H,A ;个位数送显示缓存MOV A,YJ1JZ DISP11MOV B,#10MOV A,YJ1DIV ABMOV YJ1,AMOV A,BMOV 33H,A ;十位送显示缓存MOV A,YJ1JZ DISP11 ;结果是否为二位数MOV 32H,A ;百位数送显示缓存DISP11: LJMP MLOOPDISP: MOV R0,#34HDIR1: MOV DPTR,#SEGTABMOV A,@R0MOVC A,@A+DPTRMOV P0,ACJNE R0,#34H,DIR2SETB P2.0CALL D1MSCLR P2.0DEC R0SJMP DIR1DIR2: CJNE R0,#33H,DIR3SETB P2.1CALL D1MSCLR P2.1DEC R0SJMP DIR1DIR3: SETB P2.2CALL D1MSCLR P2.2RETD1MS: MOV R7,#02HDMS: MOV R6,#0F0HDJNZ R6,$DJNZ R7,DMSRETSEGTAB: DB 0C0H, 0F9H, 0A4H, 0B0HDB 99H, 92H, 82H, 0F8HDB 80H, 90H, 88H, 83HDB 0C6H, 0A1H, 86H, 8EHTESTKEY:ACALL DISPMOV P1,#0FH ;读入键状态MOV A,P1CPL AANL A,#0FH ;高四位不用RETKEYTABLE:DB 0EEH,0EDH,0DDH,0BDH ;键码定义DB 0EBH,0DBH,0BBH,0E7HDB 0D7H,0B7H,0DEH,0BEHDB 07EH,07DH,07BH,077HGETKEY: MOV R6,#10 ;读键子程序ACALL DELAYMOV P1,#0FHMOV A,P1CJNE A,0FH,K12LJMP MLOOPK12: MOV B,AMOV P1,#0EFHMOV A,P1CJNE A,#0EFH,K13MOV P1,#0DFHMOV A,P1CJNE A,#0DFH,K13MOV P1,#0BFHMOV A,P1CJNE A,#0BFH,K13MOV P1,#07FHMOV A,P1CJNE A,#07FH,K13LJMP MLOOPK13: ANL A,#0F0HORL A,BMOV B,AMOV R1,#16MOV R2,#0MOV DPTR,#KEYTABLEK14: MOV A,R2MOVC A,@A+DPTRCJNE A,B,K16MOV P1,#0FHK15: MOV A,P1CJNE A,#0FH,K15MOV R6,#10ACALL DELAYMOV A,R2RETK16: INC R2DJNZ R1,K14AJMP MLOOPDELAY: MOV R7,#10TS1: MOV R6,#0FFHTS2: NOPNOPDJNZ R6,TS2DJNZ R7,TS1RETEND七、实验报告1、硬件电路设计(画出电路图),分析电路工作原理;矩阵键盘的工作原理:计算器的键盘布局如图所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。
基于51单片机的六位十进制计数器论文教材
序号:学号: 10446234C H A N GZ HO U U N I VER SI T Y实 习 报 告实习课程名称: 硬 件 综 合 设 计 学 生 姓 名: 朱京 学 院(系): 信息科学与工程 专 业 班 级: 电子102班 校内指导教师: 周炯如 专业技术职务: 高级实验师 _ 实 习 单 位: 信息科学与工程学院实验中心 校外指导教师: 职务/职称:实习时间: 2013 年 6 月 14 日 2013 年 6 月 28 日硬件实习任务书一、设计题目六位十进制计数器设计(LED显示计数值)二、设计背景七段LED显示屏在很多场合有着广泛的应用,LED显示产品的使用存在于社会的各个角落。
如银行利率电子显示屏,价格表电子显示屏,车站班次时刻表,安全天数电子显示屏等。
了解LED 显示技术及其相关的电路组成和显示控制方法非常重要,在很多智能化仪表中,键盘和显示器是不可能缺少的一部分。
三、设计内容及目的设计内容:利用8255键盘显示接口电路,设计一个十进制计数器,对外部脉冲进行计数,计满即清0,用小键盘设置计数值及计数器的启、停.显示器由右向左为个,十,百,千,万。
1、C键:清零.2、A键:开始计数,3、D键:停止计数,4、B键:设置计数值。
5、E键:程序退出。
设计目的:1.进一步撑握8255键盘显示电路的编程方法。
2.进一步撑握定时器的使用和编程方法。
3.进一步撑握中断处理程序的编程方法。
四、进度安排周次工作内容预定目标第1周周一选题,图书馆查阅相关资料写出该题的过去、现在、未来及应用场合第1周周二系统硬件设计及软件设计书面画出系统框图、软件框图并上交第1周周三设计成果检查及指导组长汇报方案,完善设计方案第1周周四、周五完善硬件及软件设计;画出系统硬件原理图、软件详细框图第2周一至周二完成硬件静态测试、软件调试调试好系统,写出硬件实习报告第2周三周至四完成实习任务;完善实习报告。
第2周五答辩并验收实习报告答辩并上交实习报告五、设计时间:12 年 4 月20 到12 年6 月20 日通信工程系指导教师:周炯如1. 前言 (1)1.1 设计背景 (1)2. 设计要求 (1)2.1 设计内容 (1)2.2 硬件实习的目的 (1)3. 硬件设计 (1)3.1 设计方案 (1)3.2 芯片介绍 (2)3.2.1 MCS-51芯片介绍 (2)3.2.2 8255可编程芯片 (3)3.2.3 74LS138译码器 (5)3.2.4 74LS373锁存器 (6)3.3 硬件原理图设计 (8)3.3.1 并行I/O口扩展 (8)3.3.2 LED数码管驱动及显示设计 (8)3.3.3 键盘接口 (11)3.3.4 最小系统图 (11)4. 软件设计 (13)4.1 程序流程图设计 (13)4.2程序代码分析 (14)4.2.1汇编程序代码分析 (14)4.2.2 C语言代码分析 (23)5. 系统调试及分析 (29)6. 实物图 (29)7.心得体会 (30)8.参考文献 (30)1. 前言1.1 设计背景七段LED显示屏在很多场合有着广泛的应用,LED显示产品的使用存在于社会的各个角落。
单片机设计性实验-简易的16键计算器
成绩实验报告实验名称单片机设计性实验___实验班级姓名学号(后两位)指导教师实验日期单片机设计实验一、实验目的1、掌握单片机定时器、中断、键盘扫描、动态显示及数值计算的综合运用能力;2、掌握编程的运用能力;3、设计一只简易的16键计算器。
二、实验内容图5-1 简易16键计算器编程实现图5-1的简易16键4位十进制整数计算器的功能。
要求:1.设计4*4的键盘,其10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C”2.设计4位LED接口电路或LCD显示电路3.实现2位数的简单运算三、系统硬件设计电路图四、设计框图和程序:程序源代码:DISPBUF EQU 30H ;主程序的入口地址 ORG 0000H;4个数码管显示"0000"字形数据 START:MOV DISPBUF,#0C0H MOV DISPBUF+1,#0C0H MOV DISPBUF+2,#0C0H MOV DISPBUF+3,#0C0H MOV 37H,#00H ;数值初始化 MOV 27H,#00H MOV 26H,#00H MOV 25H,#00H MOV 24H,#00H MOV 23H,#00H MOV R3,#00H MOV R5,#00H MOV R4,#00H ;调用键盘扫描子程序 LOOP: LCALL KEY MOV R6,27HCJNE R6,#00H,START ;清除键判断 MOV R6,26H;显示数据转换子程序选择 CJNE R6,#00H,FA;调用数码管显示数据转换子程序LCALL CONV ;调用数码管动态显示子程序 FA:LCALL DISPSCAN SJMP LOOPKEY:MOV P2,#0FH ;键盘扫描子程序 MOV A,P2 ANL A,#0FH CJNE A,#0FH,K10 RETK10:JB P2.0,K20 K11:MOV P2,#0EFH JB P2.0,K12 CJNE R5,#00H,L1 MOV R4,#00H INC R5 MOV R3,#1H L1:LJMP CEND K12: MOV P2,#0DFH JB P2.0,K13CJNE R5,#00H,L2 MOV R4,#00HINC R5MOV R3,#2HL2:LJMP CENDK13: MOV P2,#0BFH JB P2.0,K14CJNE R5,#00H,L3 MOV R4,#00HINC R5MOV R3,#3HL3:LJMP CENDK14: MOV P2,#7FH JB P2.0,KILCJNE R5,#00H,L4 MOV R4,#00HINC R5MOV R3,#4HKIL:LJMP KENDL4:LJMP CENDK20:JB P2.1,K30K21:MOV P2,#0EFH JB P2.1,K22LJMP DYUK22:MOV P2,#0DFH JB P2.1,K23MOV 25H,#3H LJMP OPRK23:MOV P2,#0BFH JB P2.1,K24MOV 25H,#6H LJMP OPRK24:MOV P2,#7FH JB P2.1,cctvMOV 25H,#9H LJMP OPRcctv:ljmp kendK30:JB P2.2,K40 K31: MOV P2,#0EFH JB P2.2,K32MOV 25H,#0HLJMP OPRK32:MOV P2,#0DFH JB P2.2,K33MOV 25H,#2HLJMP OPRK33:MOV P2,#0BFH JB P2.2,K34MOV 25H,#5HLJMP OPRK34:MOV P2,#7FHJB P2.2,KENDMOV 25H,#8HLJMP OPRK40:JB P2.3,KENDK41: MOV P2,#0EFH JB P2.3,K42INC 27HLJMP KENDK42:MOV P2,#0DFH JB P2.3,K43MOV 25H,#1HLJMP OPRK43:MOV P2,#0BFH JB P2.3,K44MOV 25H,#4HLJMP OPRK44:MOV P2,#7FHJB P2.3,KENDMOV 25H,#7HLJMP OPROPR: ;键值存储INC R4CJNE R5,#00H,CHANG CJNE R4,#2H,KBK ZHI:MOV A,20HMOV B,#0AHMUL ABMOV 20H,25HADD A,20HCJNE R5,#00H,CZHMOV 23H,ALJMP KENDCZH:MOV 24H,ALJMP KENDKEND:MOV P2,#0FH MOV A,P2ANL A,#0FHCJNE A,#0FH,KENDRETCHANG:CJNE R4,#2H,HONG AJMP ZHIHONG:JNC CENDINC R5MOV 20H,25HMOV 24H,25HLJMP CENDKBK:JNC CENDMOV 20H,25HMOV 23H,25HLJMP CENDDYU: ;结果计算MOV R5,#00HMOV R4,#00HMOV 25H,#00HCJNE R3,#1H,SMOV A,23HADD A,24HMOV 23H,ASJMP CENDS:CJNE R3,#2H,S1 CLR CMOV A,23HCJNE A,#00H,JIANFA MOV 23H,#0EH SJMP CEND JIANFA:SUBB A,24H MOV 23H,ASJMP CENDS1:CJNE R3,#3H,S2 MOV A,23HMOV B,24HMOV A,23HMUL ABMOV R6,BCJNE R6,#00H,CHENG MOV 23H,ASJMP CENDS2:CJNE R3,#4,CEND MOV A,24HCJNE A,#00H,ZY MOV A,#00HSJMP CENDZY:MOV A,23HMOV B,24HDIV ABMOV 23H,ACEND:MOV P2,#0FH MOV A,P2ANL A,#0FHCJNE A,#0FH,CEND RETCHENG:MOV R3,B MOV B,#64HDIV ABMOV 36H,AMOV A,BMOV B,#0AHDIV ABMOV 35H,AMOV 34H,BMOV DPTR,#TABLE XIAN:MOV A,34HADD A,#6HMOV B,#0AHDIV ABMOV 25H,AMOV 34H,BMOV A,BMOVC A,@A+DPTR MOV DISPBUF,A MOV A,35HADD A,#5HADD A,25HMOV B,#0AHDIV ABMOV 25H,AMOV 35H,BMOV A,BMOVC A,@A+DPTR MOV DISPBUF+1,A MOV A,36HADD A,#2HADD A,25HMOV B,#0AHDIV ABADD A,37HMOV 37H,AMOVC A,@A+DPTR MOV DISPBUF+3,A MOV 36H,BMOV A,BMOVC A,@A+DPTR MOV DISPBUF+2,A DJNZ R6,XIAN MOV 26H,#1H AJMP CENDCONV: ;数码管显示数据转换子程序CJNE R5,#02H,BEIMOV A,24HAJMP JINGBEI:MOV A,23HJING:MOV B,#64HDIV ABMOV DPTR,#TABLEMOVC A,@A+DPTRMOV DISPBUF+2,AMOV A,BMOV B,#0AHDIV ABMOVC A,@A+DPTRMOV DISPBUF+1,AMOV A,BMOVC A,@A+DPTRMOV DISPBUF,ARET;数码管动态显示子程序DISPSCAN:MOV R0,#DISPBUF MOV R2,#4HMOV A,#1HSC:PUSH ACCMOV A,@R0MOV P1,APOP ACCMOV P0,ALCALL DELAY1MOV P0,#00HRL AINC R0DJNZ R2,SCMOV P0,#1HRETDEL12:MOV R6,#1EHDEL2:MOV R7,#64H DEL1:DJNZ R7,DEL1 DJNZ R6,DEL2RETDELAY1:MOV R6,#70D2:MOV R7,#100 DJNZ R7,$ DJNZ R6,D2RET;------字符表------TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90HDB 88H,83H,0C6H,0A1H,86HDB 8EHEND五、实验总结。
十进制计数器 ppt课件
2020/12/27
23
集成同步十进制计数器74160
Q3 Q2Q1 Q0 :计数输出; C:进位输出; LD:置数信号(同步); D3 D2D1 D0 :置数输入;
Rd:异步复位信号; S1S2:功能选择信号; CP:计数脉冲输入端。
2020/12/27
24
74160 时 序 图
2020/12/27
25
同步十进制可逆计数器74190:
D/U:加/减控制信号(down/up); LD:置数信号(异步); EN:计数使能信号; RCO: 行波时钟输出。加计数计数值达到最大(1001)或减计数计数值
最小 (0000)时输出低电位,否则输出高电位。 MAX/MIN:加计数计数值达到最大(1001)或减计数计数值最小(0000)
笨,没有学问无颜见爹娘 ……” • “太阳当空照,花儿对我笑,小鸟说早早早……”
4
同步时序逻辑电路分析的一般步骤:
(1) 由给定的逻辑电路,写出电路的输出方程、和各触发 器的驱动方程。
(2) 由驱动方程写出各触发器的状态方程。
(3) 根据电路方程,求出输入变量取不同值时,电路的次态 和输出;即 作出电路的状态转换表和 状态转换图,必 要时作出时序图(波形图)。
11
十进制计数器的电路设计
状态转换图
S0
S1
S2
S3
1
S9
S4
S8
S7
S6
S5
练习:
2020/12/27
12
状态分配表
2020/12/27
13
状态转换表
总卡诺图
2020/12/27
14
Q3卡诺图
2020/12/27
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名学号时间 2015.05.14 地点 B526实验题目简易十进制计算器一、实验目的1. 掌握单片机编程和调试方法。
2. 掌握键盘、LED显示接口工作原理及编程方法。
二、实验内容利用MCS-51单片机,设计一个简易十进制计算器,完成一位十进制有符号数的加、减、乘、除运算。
16个按键的安排:10个数字键(0-9),用于输入运算的数字;5个功能键:+、-、×、÷、=、清零(符号选择)。
本实验要求显示:输入的十进制数字及符号,正数不显示符号,负数在数的前面显示“-”;运算符显示(显示字形自定);运算结果显示,包括数字和符号。
三、实验电路连线P0P1P2.0-P2.3四、实验说明本实验采用动态显示电路,即6个数码管分时循环工作,刷新频率≥25Hz 。
键盘采用矩阵式电路,L1-L4作为输出,H1-H4作为输入。
(详细工作原理请参考教材第10章)。
要求所有的程序预先在WA VE 仿真调试通过,达到设计要求后下载程序到单片机芯片在实验板上实际运行。
程序的下载由实验室提供编程器统一烧写,单片机芯片由实验室提供,调试完成后交回。
五、实验仪器和设备PC 机、WA VE 软件、仿真器、实验板、编程器、电源等。
六、程序流程图及程序P2.4-P2.7YJ EQU 50H ;结果存放YJ1 EQU 51H ;中间结果存放GONG EQU 52H ;功能键存放ORG 00HSTART: MOV R3,#0 ;初始化显示为空MOV GONG,#0MOV 32H,#00HMOV 33H,#00HMOV 34H,#00HMLOOP: CALL DISP ;调显示子程序WAIT: CALL TESTKEY ;判断有无按键JZ WAITCALL GETKEY ;读键INC R3 ;按键个数CJNE A,#0,NEXT1 ;判断是否数字键LJMP E1 ;转数字键处理NEXT1: CJNE A,#1,NEXT2LJMP E1NEXT2: CJNE A,#2,NEXT3LJMP E1NEXT3: CJNE A,#3,NEXT4LJMP E1NEXT4: CJNE A,#4,NEXT5LJMP E1NEXT5: CJNE A,#5,NEXT6LJMP E1NEXT6: CJNE A,#6,NEXT7LJMP E1NEXT7: CJNE A,#7,NEXT8LJMP E1NEXT8: CJNE A,#8,NEXT9LJMP E1NEXT9: CJNE A,#9,NEXT10LJMP E1NEXT10: CJNE A,#10,NEXT11 ;判断是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#11,NEXT12LJMP E2NEXT12: CJNE A,#12, NEXT13LJMP E2NEXT13: CJNE A,#13,NEXT14LJMP E2NEXT14: CJNE A,#14,NEXT15LJMP E2NEXT15: LJMP E3 ;判断是否清除键E1: CJNE R3,#1,N1 ;判断第几次按键LJMP E11 ;为第一个数字N1: CJNE R3,#2,N2LJMP E12 ;为第二个数字N2: CJNE R3,#3,N3LJMP E13 ;为第三个数字N3: LJMP E3 ;第四个数字转溢出E11: MOV R4,A ;输入值暂存R4MOV 34H,A ;输入值送显示缓存MOV 33H,#00HMOV 32H,#00HLJMP MLOOP ;等待再次输入E12: MOV R7,A ;个位数暂存R7MOV B,#10MOV A,R4MUL AB ;十位数ADD A,R7MOV R4,A ;输入值存R4MOV 32H,#00H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE13: MOV R7,AMOV B,#10MOV A,R4MUL ABJB OV,E3 ;输入溢出ADD A,R7JB CY,E3 ;输入溢出MOV R4,AMOV 32H,33H ;输入值送显示缓存MOV 33H,34HMOV 34H,R7LJMP MLOOPE3: MOV R3,#0 ;按键次数清零MOV R4,#0 ;输入值清零MOV YJ,#0 ;计算结果清零MOV GONG,#0 ;功能键设为零MOV 32H,#00H ;显示清空MOV 33H,#00HMOV 34H,#00HLJMP MLOOPE2: MOV 34H,#00HMOV 33H,#00HMOV 32H,#00HMOV R0,GONG ;与上次功能键交换MOV GONG,AMOV A,R0CJNE A,#10,N21 ;判断功能键LJMP JIA ;"+"N21: CJNE A,#11,N22LJMP JIAN ;"-"N22: CJNE A,#12,N23LJMP CHENG ;"*"N23: CJNE A,#13,N24LJMP CHU ;"/"N24: CJNE A,#0,N25LJMP FIRST ;首次按功能键N25: LJMP DEN ;"="N4: LJMP E3FIRST: MOV YJ,R4 ;输入值送结果MOV R3,#0 ;按键次数清零LJMP DISP1 ;结果处理JIA: MOV A,YJ ;上次结果送累加器ADD A,R4 ;上次结果加输入值JB CY,N4 ;溢出MOV YJ,A ;存本次结果MOV R3,#0 ;按键次数清零LJMP DISP1JIAN: MOV A,YJSUBB A,R4 ;上次结果减输入值JB CY,N4 ;负数溢出MOV YJ,AMOV R3,#0LJMP DISP1CHENG: MOV A,YJMOV B,AMOV A,R4MUL AB ;上次结果乘输入值JB OV,N4 ;溢出MOV YJ,ALJMP DISP1CHU: MOV A,R4MOV B,AMOV A,YJDIV AB ;上次结果除输入值MOV YJ,AMOV R3,#0LJMP DISP1DEN: MOV R3,#0LJMP DISP1DISP1: MOV B,#10MOV A,YJ ;结果送累加器DIV AB ;结果除10MOV YJ1,A ;暂存"商"MOV A,B ;取个位数MOV 34H,A ;个位数送显示缓存MOV A,YJ1JZ DISP11MOV B,#10MOV A,YJ1DIV ABMOV YJ1,AMOV A,BMOV 33H,A ;十位送显示缓存MOV A,YJ1JZ DISP11 ;结果是否为二位数MOV 32H,A ;百位数送显示缓存DISP11: LJMP MLOOPDISP: MOV R0,#34HDIR1: MOV DPTR,#SEGTABMOV A,@R0MOVC A,@A+DPTRMOV P0,ACJNE R0,#34H,DIR2SETB P2.0CALL D1MSCLR P2.0DEC R0SJMP DIR1DIR2: CJNE R0,#33H,DIR3SETB P2.1CALL D1MSCLR P2.1DEC R0SJMP DIR1DIR3: SETB P2.2CALL D1MSCLR P2.2RETD1MS: MOV R7,#02HDMS: MOV R6,#0F0HDJNZ R6,$DJNZ R7,DMSRETSEGTAB: DB 0C0H, 0F9H, 0A4H, 0B0HDB 99H, 92H, 82H, 0F8HDB 80H, 90H, 88H, 83HDB 0C6H, 0A1H, 86H, 8EHTESTKEY:ACALL DISPMOV P1,#0FH ;读入键状态MOV A,P1CPL AANL A,#0FH ;高四位不用RETKEYTABLE:DB 0EEH,0EDH,0DDH,0BDH ;键码定义DB 0EBH,0DBH,0BBH,0E7HDB 0D7H,0B7H,0DEH,0BEHDB 07EH,07DH,07BH,077HGETKEY: MOV R6,#10 ;读键子程序ACALL DELAYMOV P1,#0FHMOV A,P1CJNE A,0FH,K12LJMP MLOOPK12: MOV B,AMOV P1,#0EFHMOV A,P1CJNE A,#0EFH,K13MOV P1,#0DFHMOV A,P1CJNE A,#0DFH,K13MOV P1,#0BFHMOV A,P1CJNE A,#0BFH,K13MOV P1,#07FHMOV A,P1CJNE A,#07FH,K13LJMP MLOOPK13: ANL A,#0F0HORL A,BMOV B,AMOV R1,#16MOV R2,#0MOV DPTR,#KEYTABLE K14: MOV A,R2MOVC A,@A+DPTRCJNE A,B,K16MOV P1,#0FHK15: MOV A,P1CJNE A,#0FH,K15MOV R6,#10ACALL DELAYMOV A,R2RETK16: INC R2DJNZ R1,K14AJMP MLOOP DELAY: MOV R7,#10TS1: MOV R6,#0FFHTS2: NOPNOPDJNZ R6,TS2DJNZ R7,TS1RETEND七、实验报告1、硬件电路设计(画出电路图),分析电路工作原理;矩阵键盘的工作原理:计算器的键盘布局如图所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。
2、总结刚开始接到这个计算器的课程设计任务时,因为以前做过类似的题目,于是在脑海中初步构建了编写程序的一些控制程序。
但在编写程序的过程中,遇到了很多问题,因为以前用的是熟悉的C语言,而这次用的是汇编语言,使我发现自己以前学习上存在的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。
还有就是显示符号这个功能没有做出来,还得多多学习单片机知识。