课程设计-单片机计算器
51单片机计算器课程设计

51单片机计算器课程设计一、课程目标知识目标:1. 让学生掌握51单片机的基本原理及其在计算器中的应用。
2. 使学生理解并掌握计算器程序设计的步骤和要点,包括键盘输入、显示输出、数据处理等。
3. 帮助学生了解并掌握基本的数字逻辑运算,如加、减、乘、除等。
技能目标:1. 培养学生运用51单片机进行计算器硬件设计和程序编写的能力。
2. 培养学生运用Keil等开发工具进行51单片机程序开发的能力。
3. 培养学生通过查阅资料、团队协作解决实际问题的能力。
情感态度价值观目标:1. 激发学生对电子技术和编程的兴趣,培养其主动学习的态度。
2. 培养学生的创新意识和动手能力,使其具备解决问题的信心。
3. 培养学生良好的团队协作精神和沟通能力,提高其综合素质。
课程性质:本课程为实践性较强的课程,注重培养学生的动手能力和实际问题解决能力。
学生特点:学生具备一定的电子技术基础和编程能力,对51单片机有一定了解。
教学要求:结合学生特点,注重理论与实践相结合,以项目为导向,引导学生主动探索、实践和解决问题。
通过课程学习,使学生达到预定的知识目标和技能目标,并培养其情感态度价值观。
在教学过程中,关注学生的学习进度,及时调整教学策略,确保课程目标的实现。
将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 51单片机原理回顾:涉及51单片机的内部结构、工作原理、寄存器等基础知识。
相关教材章节:第一章《51单片机概述》2. 计算器功能设计:介绍计算器的基本功能,如数字输入、运算符选择、结果显示等。
相关教材章节:第二章《51单片机I/O口应用》3. 硬件电路设计:讲解计算器硬件电路的搭建,包括键盘电路、显示电路等。
相关教材章节:第三章《51单片机硬件设计基础》4. 程序设计:分析计算器程序设计的流程,包括程序框架、各功能模块的实现等。
相关教材章节:第四章《51单片机C语言编程》5. 软件开发工具使用:介绍Keil开发环境的使用方法,编译、下载程序到51单片机。
(完整)单片机课程设计——计算器设计

目录一、设计总绪 (1)1。
1设计思想 (1)1.2设计说明 (1)1。
3关键词:矩阵键盘,单片机,数码管显示,汇编语言 (1)1.4设计目的 (1)1。
5设计要求 (2)二、设计方案 (2)2。
1硬件电路设计方案 (2)2.1.1基本结构 (2)2.1。
2系统框架图 (3)2.1。
3工作流程图 (3)2。
1.4单片机主控制模块 (4)2。
2系统功能描述 (6)三、各模块功能介绍 (7)3.1键盘输入模块 (7)3。
1。
1键盘分布图 (7)3。
1.2工作原理 (7)3。
2运算控制模块 (8)3.3显示模块 (8)3.4振荡电路模块 (9)四、仿真电路 (11)仿真运行结果 (11)五、调试过程总结 (13)附录: (14)参考文献: (14)源程序代码 (14)一、设计总绪1。
1设计思想近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新.在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。
计算机在人们的日常生活中是比较常见的电子产品之一.可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89c51单片机、LCD显示器、控制按键为元件来设计的计算器。
利用此设计熟悉单片机微控制器及汇编语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。
掌握应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法此设计是基于单片机技术的简易计算器的方案,本次设计所提出的一种基于单片机技术的简易计算器的方案,采用具有数据处理能力的中央处理器CPU,随机存储器ROM,多种I/O口和中断系统、定时器/计时器等功能集成到一块硅片上构成的一个小而完善的计算机系统-—单片机,配以汇编语言编写的执行程序,能更好的解决计算机计算的问题,随着数字生活的到来,单片机在生活中越来越重要,它能将大量的逻辑功能集成与一个集成电路中,使用起来十分方便。
单片机计算器课程设计报告程序讲解

单片机课程设计报告一、内容摘要用单片机做一个四则运算的计算器,首先查资料,了解各个电路的功能,事先须熟悉Keil和Proteus两个软件,及它们的联调,程序和仿真完成,就焊接电路板,焊接完,最后就系统联调,直到得出结果。
二、功能要求利用89c51作为主控器组成一个四则运算的计算器。
三、电路原理图电路图说明:(1)键盘的列扫描接单片机P2口的低4位,行扫描接单片机P1口的低4位;(2)数码管的段选通过单片机的P0口接74LS244来驱动,数码管的位选接单片机的P2口;(3)晶振电路为单片机提供时钟频率;(4)复位电路为单片机提供复位信号。
四、计算器功能说明(1)通过数码管来显示键盘的按键,显示被加数(减数……),加数(……),运算结果;(2)本计算器适合不大于八位整数的加、减、乘、除,要求结果也不大于八位整数,否则出错显示,显示(HELLO);(3)在还没按一个数之前就按下=,+,--,*或/,则显示错误;按下+,--,*或/后,立马按下=,显示错误;(4)若接连好了好几运算符键,实际参与运算的是最后一次按的运算键;(5)本计算器有连加,连减,连乘,连除功能,例如:2+5=7+5=12--5=7*5=35/5=7;(6)减法可以实现负数,除法可以显示小数。
五、软件仿真软件设计时,我是分一个一个模块设计的,设计顺序如下:(1)数码管显示函数void displayljy(void)//"显示"子函数{uchar array3[32]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40,0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x38,0x3e,0x6e,0xbe};uchar *p=array,count=0xfe,i,time,time1;F0=1;while(F0){i=*p;P2=count;P0=array3[i];for(time1=0x0c;time1>0x00;time1--)for(time=0xff;time>0x00;time--);p++;count=_crol_(count,1);if(count==0xfe)F0=0;}}(2)判断是否有键按下子函数void iskeyyou(void)//"判断是否有键按下"子函数{P2=0x00;P1|=0x0f;a=P1;a|=0xf0;}(3)键扫子函数void inkeylove(void)//"判断按下的是什么键"子函数{uchar b=0xfe,c=0x00,d;uchar array4[16]={0x07,0x08,0x04,0x05,0x01,0x02,0x0f,0x00,0x09,0x0a,0x06,0x0b,0x03,0x0c,0x0e,0x0d};F1=0;iskeyyou();if(a!=0xff){displayljy();displayljy(); iskeyyou();if(a!=0xff){F0=1;while(F0){P2=b;P1|=0x0f;if(P10==0){a=0x00;F1=1;}else if(P11==0){a=0x02;F1=1;}else if(P12==0){a=0x04;F1=1;}else if(P13==0){a=0x06;F1=1;}else{a=c;a%=4;if(a==0x01){a=0x07;c+=a;}elsec++;b=_crol_(b,1);if(b&0x10==0){F0=0;a=0xff;}}while(F1){a+=c;a=array4[a];d=a;while(a!=0xff){displayljy();iskeyyou();}a=d;F1=0;F0=0;}}}}}(4)两个变形的子函数void bian1(void)//"将uchar型变量转化为ulong型变量"子函数{uchar i;for(i=7;i>0;i--){if(array[i]==0x10)array[i]=0x00;if(array1[i]==0x10)array1[i]=0x00;}num1=(ulong)array1[7]*10000000;num1+=(ulong)array1[6]*1000000;num1+=(ulong)array1[5]*100000;num1+=(ulong)array1[4]*10000;num1+=(ulong)array1[3]*1000;num1+=(ulong)array1[2]*100;num1+=(ulong)array1[1]*10;num1+=(ulong)array1[0];num2=(ulong)array[7]*10000000;num2+=(ulong)array[6]*1000000;num2+=(ulong)array[5]*100000;num2+=(ulong)array[4]*10000;num2+=(ulong)array[3]*1000;num2+=(ulong)array[2]*100;num2+=(ulong)array[1]*10;num2+=(ulong)array[0];}void bian2(void)//声明"将ulong型变量转化为uchar型变量"子函数{uchar i=7,F0=1;if(num1>99999999)error();else{array[7]=(uchar)(num1/10000000);array[6]=(uchar)(num1%10000000/1000000);array[5]=(uchar)(num1%1000000/100000);array[4]=(uchar)(num1%100000/10000);array[3]=(uchar)(num1%10000/1000);array[2]=(uchar)(num1%1000/100);array[1]=(uchar)(num1%100/10);array[0]=(uchar)(num1%10);while(i>0&&F0){if(array[i]==0x00){array[i]=0x10;i--;}elseF0=0;}}}(5)主函数void main(){uchar r7=0x00,i;while(1){displayljy();inkeylove();if(a!=0xff)//如果有键输入,继续往下执行,否则从新开始{if(a==0x0f) //如果输入的是"清除"键,将显示器清屏,同时清存放运算符号的单元{r7=0x00;for(i=0;i<8;i++){array[i]=0x10;array1[i]=0x10;}}else if(a==0x0e)//如果输入的是"=",继续往下执行,否则从新开始{if(array1[0]==0x10)//如果未按下第二个数之前就按下“=”,则出错显示error();else if(r7==0x0d)//如果r7中存放的是"+",则执行加运算{bian1();jia();bian2();r7=0x00;for(i=0;i<8;i++)array1[i]=0x10;}else if(r7==0x0c)//如果r7中存放的是"-",则执行减运算{bian1();jian();r7=0x00;for(i=0;i<8;i++)array1[i]=0x10;}else if(r7==0x0b)//如果r7中存放的是"*",则执行乘运算{bian1();cheng();bian2();r7=0x00;for(i=0;i<8;i++)array1[i]=0x10;}else if(r7==0x0a)//如果r7中存放的是"÷",则执行除运算{bian1();chu();r7=0x00;for(i=0;i<8;i++)array1[i]=0x10;}elseerror();//如果r7没有存进运算符,则转出错处理}else{if(r7!=0x00)//如果已按过运算键,往下执行,否则转else{if(a>0x09&&a<0x0e)//如果还按下运算键,则后按的取代前面按的r7=a;else if(array1[0]==0x10)//判断是不是输入加数(减数...)的第一个数{for(i=0;i<8;i++)//是的话,将被加数(被减数...)存入array1中array1[i]=array[i];for(i=0;i<8;i++)array[i]=0x10;for(i=7;i>0;i--)//array中存入加数(减数...)array[i]=array[i-1];array[0]=a;}else //不是输入加数(减数...)的第一个数{if(array[7]!=0x10)//如果加数(减数...)已是八位整数,则转出错处理error();else{for(i=7;i>0;i--)//否则将加数左移array[i]=array[i-1];array[0]=a;}}}else//之前还没有运算键按下{if(a>0x09)//有运算键按下{if(array[0]==0x10)//但是在运算键按下之前没有输入被加数,则转出错error();elser7=a;//否则将运算键输入r7中保存}else if(array[7]!=0x10)//如果被加数已是八位整数,则转出错error();else //否则将被加数左移{for(i=7;i>0;i--)array[i]=array[i-1];array[0]=a;}}}}}}(6)加、减、乘、除、出错显示子函数void jia(void)//"加运算"子函数{num1+=num2;}void jian(void)//"减运算"子函数{uchar i;if(num1>num2){num1-=num2;bian2();}else if(num1==num2){for(i=1;i<8;i++)array[i]=0x10;array[0]=0x00;}else{num1=num2-num1;bian2();if(array[7]!=0x10)error();elsearray[7]=0x11;}}void cheng(void)////声明"乘运算"子函数{num1*=num2;}void chu(void)//"除运算"子函数{uchar i,j=0x00,k;double num3;num3=(double)(num1)/(double)(num2);num1=(ulong)(num3);num3-=num1;if(num3==0||num1>9999999)bian2();else{bian2();while(array[7]==0x10){j++;for(i=7;i>0;i--)array[i]=array[i-1];array[0]=0x10;}array[j]+=0x12;k=j-1;while(k>0){num3*=10;num2=(ulong)(num3);num3-=num2;array[k]=(uchar)(num2);k--;}num3*=10;num2=(ulong)(num3);array[0]=(uchar)(num2);while(array[0]==0x00){for(i=0;i<7;i++)array[i]=array[i+1];array[7]=0x10;}}}void error(void)//"出错显示"子函数(出错显示"HELLO") {array[7]=0x10;array[6]=0x10;array[5]=0x10;array[4]=0x1d;array[3]=0x0e;array[2]=0x1c;array[1]=0x1c;array[0]=0x12;}(7)全局变量定义,函数声明等#include <reg52.h>#include <intrins.h>//循环左右移要用该头文件(-cror-(),-crol-())#define uchar unsigned char#define ulong unsigned longuchar array[8]={0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10};uchar array1[8]={0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10};uchar a;ulong num1=0,num2=0;sbit P10=P1^0;sbit P11=P1^1;sbit P12=P1^2;sbit P13=P1^3;sbit F1=PSW^1;//定义一个标志位,F0在头文件里已定义void displayljy(void);//声明"显示"子函数void inkeylove(void);//声明"判断按下的是什么键"子函数void iskeyyou(void);//声明"判断是否有键按下"子函数void bian1(void);//声明"将uchar型变量转化为ulong型变量"子函数void bian2(void);//声明"将ulong型变量转化为uchar型变量"子函数void jia(void);//声明"加运算"子函数void jian(void);//声明"减运算"子函数void cheng(void);//声明"乘运算"子函数void chu(void);//声明"除运算"子函数void error(void);//声明"出错显示"子函数六、系统联调在焊接完板子后,我首先并没有把整个计算器的程序下进去,只是下了个显示的小程序,结果数码管的第四位没显示,首先我想段选肯定不会有错的,检查了程序对应的那个数和程序中位选的设置都没错,我想应该是接线中的位选错了,结果我用万用表检查电路发现也没错,这下我就纠结了,搞不清状况了,可是无意之中我按了板子,发下那个数码管显示了正确的数,但是只是一瞬间的事,我想肯定是我有个地方没焊稳,我就一个地方一个地方的按,最终定位在了单片机,单片机的底座我用的是单排母不是专门配的底座,因为用排母取下放上都比那个专门配的底座容易,我就重新认真的把底座补焊了下,结果就行了,接下来我就把计算器的程序下进去了,成功了,太开心了。
单片机计算器课程设计

摘要本设计是基于51系列的单片机进行的数字计算器系统设计,能够完成计算器的键盘输入,进行加、减、乘、除6位带符号数字的简单四那么运算,并在LED上相应的显示结果。
设计进程在硬件与软件方面进行同步设计。
硬件方面从功能考虑,第一选择MCS51单片机,输入采纳4×6矩阵键盘。
显示采纳6位8段共阴极LED静态显示。
软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。
编程语言方面从程序整体设计和高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四那么运算算法专门是乘法和除法运算的实现,最终选用WAVE6000集成调试软件,采纳C语言编程。
关键词:MCS51单片机计算器LED静态显示矩阵键盘目录第一章引言 (1)第二章大体原理 (2)2.1 键盘扫描原理简述 (2)2.2 LED显示器原理 (3)2.3 LED 6位数字显示器和4ⅹ6 键盘电路 (4)第三章硬件设计 (6)第四章软件程序设计 (7)4.1 主程序流程图 (7)4.2 原始程序 (8)4.3 改良后的程序 (13)第五章总结 (19)第六章参考文献 (20)第一章引言简易计算器的原理与设计是单片机课程设计课题中的一个。
在完成理论学习和必要的实验后,咱们把握了单片机的大体原理和编程和各类大体功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
单片机课程设计既要让学生巩固讲义学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的明白得,数字计算器原理与硬软件的课程设计主若是通过学生独立设计方案并自己动手用运算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的熟悉,充分发挥学生的个人创新能力,并提高学生对单片机的爱好,同时学习查阅资料、参考资料的方式。
第二章大体原理2.1 键盘扫描原理简述扫描方式:采纳列扫描法识别按键。
单片机课程设计计算器

单片机课程设计 计算器一、课程目标知识目标:1. 学生能理解单片机的基本原理和功能,掌握计算器的设计流程。
2. 学生能运用所学知识,设计并实现一个具有基本运算功能的单片机计算器。
3. 学生了解并掌握单片机编程的基本语法和逻辑结构。
技能目标:1. 学生掌握使用单片机开发工具进行程序编写、调试和下载的方法。
2. 学生具备分析问题、设计算法和解决问题的能力,能运用单片机技术解决实际计算问题。
3. 学生能够通过小组合作,进行项目设计和实践,提高团队协作能力。
情感态度价值观目标:1. 学生培养对单片机技术及电子工程的兴趣,激发创新意识和探索精神。
2. 学生通过动手实践,体验成功解决问题的喜悦,增强自信心和自主学习能力。
3. 学生在学习过程中,树立正确的价值观,认识到科技发展对社会进步的重要性。
课程性质:本课程为实践性较强的课程,要求学生在理论学习的基础上,动手实践,完成单片机计算器的设计与制作。
学生特点:学生处于高年级阶段,已具备一定的电子技术基础和编程能力,具备独立思考和解决问题的能力。
教学要求:结合学生特点,注重理论与实践相结合,引导学生通过小组合作,完成课程任务,达到课程目标。
同时,关注学生的个性差异,提供个性化的辅导和支持。
在教学过程中,注重培养学生的创新能力、实践能力和团队协作能力,为后续学习打下坚实基础。
二、教学内容根据课程目标,教学内容分为以下三个部分:1. 理论知识学习:- 单片机原理与结构:讲解单片机的组成、工作原理及性能特点,对应教材第1章。
- 编程语言基础:介绍单片机编程的基本语法、逻辑结构和编程规范,对应教材第2章。
2. 实践技能培养:- 硬件设计与连接:学习如何选用合适的元器件,设计计算器硬件电路,对应教材第3章。
- 软件编程与调试:掌握单片机程序编写、调试和下载的方法,对应教材第4章。
3. 项目实践:- 计算器设计与实现:结合所学知识,分组进行计算器项目设计,包括硬件选型、电路设计、程序编写和调试等,对应教材第5章。
单片机计算器课程毕业设计

单片机课程设计一、课程设计的目的通过本课程设计使学生进一步巩固单片机原理与技术的基本概念、基本理论,分析问题的基本方法;增强学生的软件编程实现能力和解决实际问题的能力,使学生能有效地将理论和实际紧密结合,拓展学生在工程实践方面的专业知识和相关技能。
二、总体设计根据功能和指标要求,本系统选用MCS-51系列单片机为主控机。
通过扩展必要的外围接口电路,实现对计算器的设计。
具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD 显示数据和结果。
(2)另外键盘包括数字键(0~9)、符号键(+、-、×、÷)、清除键和等号键,故只需要16 个按键即可,设计中采用集成的计算键盘。
(3)执行过程:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。
(4)错误提示:当计算器执行过程中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上出现错误显示“”。
系统模块图:三、硬件设计(一)、总体硬件设计本设计选用AT89C51单片机为主控单元。
显示部分:采用LCD 静态显示。
总体设计效果如下图:(二)、键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。
矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。
这样键盘上按键的个数就为4×4个。
这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。
单片机计算器课程设计报告

单片机课程设计课题名称:单片机简易计算器课程设计姓名:XXXX 学号:XXXXXX 年级专业班级:XXXXXXX学院:XXXX设计时间:XXXXXXX设计地点:XXXXXX指导老师:**目录一、单片机课程设计实习目的 (2)1、增进对单片机的感性认识,加深对单片机理论方面的理解; (2)2、掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O口等; (2)3、了解和掌握单片机应用系统的软硬件设计过程及实现方法。
(2)二、实习课题任务 (2)1、课题:简易计算器的设计 (2)2、设计基本要求: (2)利用单片机试验箱的键盘模块以及显示模块实现百位以内加减乘除。
(2)任选一种显示方式:即中文液晶显示屏、LED数码管可任选一种。
(2)3、功能实现: (2)4、设计任务 (2)5、设计思路 (2)三、系统分析 (4)四、硬件系统设计 (5)1、键盘接口电路 (5)2、数码管显示电路 (6)五、软件系统设计 (6)六、调试结果 (7)1)10以内计算器 (7)2)100以内计算器 (7)七、结论 (8)八、体会与收获 (8)九、附件(程序): (9)1、程序一:只能进行两位数与两位数格式的四则运算 (9)2、程序二:能进行百位以内的四则运算,但一位与两位数运算结果调试不对 (18)一、单片机课程设计实习目的1、增进对单片机的感性认识,加深对单片机理论方面的理解;2、掌握单片机的内部功能模块的应用,如定时器/计数器、中断、存贮器、I/O 口等;3、了解和掌握单片机应用系统的软硬件设计过程及实现方法。
二、实习课题任务1、课题:简易计算器的设计2、设计基本要求:利用单片机试验箱的键盘模块以及显示模块实现百位以内加减乘除。
任选一种显示方式:即中文液晶显示屏、LED数码管可任选一种。
3、功能实现:计算器将完成的功能有两位数以内加、减、乘、除功能,并通过LED数码管显示输入值及结果。
4、设计任务1.扩展4*4键盘,其中10个数字,5个功能键,1个清零2.使用五位数码管接口电路3.完成十进制的四则运算(加、减、乘、除);4.实现低于三位小于255数字的连续运算;5.使用keil C软件编写程序;6.最后用ptoteus仿真;7.具有较强的抗干扰能力;8.体积小、功耗低,便于嵌入其他系统。
单片机计算器课程设计

测试结果:计算 器功能正常,运 算结果准确无误
内存优化:增加内存容量, 提高数据存储和处理能力
处理器选择:选择更高性能 的处理器,提高计算速度
接口优化:优化接口设计, 提高数据传输速度和稳定性
电源优化:优化电源管理, 提高电源效率和稳定性
优化算法:提高计 算速度,降低功耗
优化界面:简化操 作流程,提高用户 体验
入或关机等
驱动程序功能:控制显示器显示内容 驱动程序结构:包括初始化、显示、刷新等模块 驱动程序实现:使用C语言编写,调用硬件接口 驱动程序优化:提高显示速度,降低功耗
输入驱动程序:用于接收和处理用户输入的程序 输入设备:键盘、鼠标等 输入处理:将用户输入转换为计算机可以理解的格式 输入验证:检查用户输入是否符合预期格式和范围 输入反馈:向用户显示输入结果或错误信息 输入驱动程序设计原则:简单、易用、高效、安全
优化算法:提高计算速度, 减少计算误差
改进硬件:提高硬件性能, 减少硬件故障
优化界面:提高用户友好度, 减少用户操作错误
单片机计算器设计过程 遇到的问题和解决方案 设计成果和性能评估 未来改进方向和展望
单片机计算器将更加便携化, 体积更小,重量更轻
单片机计算器将更加智能化, 实现语音识别、图像识别等功 能
1990年代,ARM公司推出ARM架构,成为现代 智能手机、平板电脑等设备的核心处理器
2000年代,RISC-V架构出现,成为开源硬件运 动的重要组成部分
2010年代,物联网技术的兴起,单片机在智能 家居、工业自动化等领域得到广泛应用
工业控制:用于自动化生产线、机器人等 智能家居:用于智能家电、智能门锁等 医疗设备:用于医疗仪器、医疗机器人等 汽车电子:用于汽车电子系统、自动驾驶等 消费电子:用于手机、平板电脑等 航空航天:用于航天器、无人机等
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计-单片机计算器广东工业大学课程设计任务书题目名称单片机计算器(上机)/ 单片机应用系统设计(理论设计)学生学院自动化专业班级网络工程姓名XXX学号一、课程设计的内容1.巩固和加深对《单片机原理》课程内容的认识和理解,提高应用水平。
2、完成对单片机应用系统的理论设计。
3.掌握MCS-51汇编语言程序的编制方法。
4.熟悉键盘控制和七段数码管的使用。
具体设计包括系统设计和上机编程两个部分。
二、课程设计的要求与数据一.(一)上机编程上机编程要求和内容已附页给出。
二.(二)系统设计内容要求:系统中具备输入设备(如键盘,键数不限)、输出设备(如LED数码显示管)。
具体内容可自己设计、网上搜索应用例、参考书中例。
非自己设计的应用系统应理解消化,可修改(如增加或减少某些功能部件)。
在系统设计中说明其出处以及自己做的修改部分。
三、课程设计应完成的工作三.(一)上机编程完成符合规定要求的程序并上机调试成功。
(二)系统设计内容1.设计一个单片机应用系统的硬件电路。
2. 选择所需元件,并对每个元件的管脚做简单说明。
3.用35×50cm方格纸作图,画出详细的系统连接图。
撰写课程设计报告四、课程设计进程安排五、应收集的资料及主要参考文献[1] 李广弟、朱月秀、王秀山.单片机基础.(M).北京航空航天大学出版社.2001[2] 何立民,单片机高级教程.(M).北京航空航天大学出版社, 2000[3] 许兴存、曾琪琳微型计算机接口技术(M).北京电子工业出版社,2003[4] 朱宇光,单片机应用新技术教程(M).北京电子工业出版社,2000发出任务书日期:2010年 9 月 10 日指导教师签名:计划完成日期: 2010 年 9 月 25 日基层教学单位责任人签章:主管院长签章:摘要随着经济的发展,带动汽车行业快速发展,出租车日益普遍,了解在出租车上应用的计费系统,对我们日常生活也有帮助。
而使用单片机实现该系统,是深化单片机应用的良好途径。
本系统设计由单片机AT89S51为核心控制器和一些外围模块组成,使得其操作简单,显示明了,功能丰富。
使用8段数码管做为显示器,可以显示单价、总金额和路程,可以随时作切换,使系统信息一目了然;本系统除了里程统计和费用计算以外,还具有时钟功能。
本方案充分发挥稳定、冗余的特点,,配合AT24c02掉电存储芯片,保障信息的安全,使整个出租车计价系统更稳定。
目录摘要 (1)目录 (4)单片机计算器设计 (6)一.编程要求和硬件电路6二.流程图8三.程序10单片机应用系统设计——出租车计价器 (24)一.系统功能介绍24二.系统设计说明251.系统基本设计框图 (25)2.芯片的功能及说明 (25)三.连接图4四.软件设计43.主程序的流程图 (4)4.计价流程图 (7)5.单价时间调整流程图 (8)五.设计心得及建议8主要参考文献 (9)单片机计算器设计四.编程要求和硬件电路五.流程图六.程序1.编写程序在四位LED上显示15FC.ORG 0000HLJMP MAINORG 1000HMAIN: MOV 53H,#01HMOV52H,#05HMOV51H,#0FHMOV50H,#0CHDIS:MOV A,#03HMOV DPTR,#7F00HMOVX@DPTR,ASTART:MOV R0,#50HMOVR3,#0F7HMOV A,R3AGAIN: MOV DPTR,#7F02HMOVX@DPTR,AMOVA,@R0MOV DPRT,#DDEGMOVC A,@A+DPTRMOV DPTR,#7F01HMOVX@DPTR,AACALLDL1MSINC R0MOV A,R3JNB ACC.0, STARTRR AMOV R3,AAJMP AGAINDDEG:DB 0FCH,60H,0DAH,0F2 H,66H,0B6H,0BEH,0E 0H,0FEH,0F6H,0EEH, 3EH,9CH,7AH,9EH,8 EHDL1MS: MOV R7,#01HDL0:MOV R6,#0FFH DL1:DJNZ R6,DL1 DJNZ R7,DL0RETEND2.将8个键按实验室要求定义键值,按任意键在显示器上显示对应键值,要求显示值能左移。
当k0=0时,第一排键为98AF,第二排键为EB32.;当k0=1时,第一排键为17CD,第二排键为5604.ORG 0000HLJMP MAINORG 1000HMAIN: MOV 53H,#00HMOV 52H,#00HMOV 51H,#00HMOV50H,#50H KEYSUB:MOV A,#03HMOV DPTR,#7F00HMOVX@DPTR,ABEGIN: ACALL DISACALL CLEARACALL CCSCANJNZINK1AJMP BEGININK1: ACALL DISACALL DL1MSACALL DL1MSACALL CLEARACALL CCSCANJNZINK2AJMP BEGININK2: MOV R2,#0F7HMOVR4,#00HCOLUM: MOV DPTR,#7F02HMOV A,R2MOVX@DPTR,AINC DPTRMOVX A,@DPTRJB ACC.5LONEMOVA,#00HAJMP KCODELONE: JB ACC.4,NEXTMOVA,#04HKCODE: ADD A,R4ACALL LP1ACALL PUTBUFPUSH ACCKON: ACALL DISACALL CLEARACALL CCSCANJNZKONPOPACCNEXT: INC R4MOV A,R2JNB ACC.3,KERRRL AMOV R2, AAJMP COLUMKERR: AJMP BEGINCCSCAN: MOV DPTR,#7F02HMOVA,#00HMOVX@DPTR,AINC DPTRMOVX A,@DPTRCPL AANLA,#30HRET CLEAR: MOV DPTR,#7F01HMOVA,#00HMOVX@DPTR,ARETDIS: PUSH ACCPUSH 00HPUSH 03HMOV A,#03HMOV DPTR,#7F00HMOV R0,#50HMOVR3,#0F7HMOV A,R3 AGAIN: MOV DPTR,#7F02HMOVX@DPTR,AMOVDPTR,#7F03HMOV A,@DPTRJNBACC.0,STEP1MOVDPTR ,#ADDRAJMP STEP2 STEP1: MOV A,@RMOV DPRT,#DDEGAJMP STEP3 STEP2: MOVA,@RSTEP3: MOVC A,@A+DPTRMOV DPTR,#7F01HMOVX@DPTR,AACALLDL1MSINC R0MOV A,R3JNB ACC.0,OUTRR AMOV R3,AAJMP AGAINOUT: POP 03HPOP 00HPOP ACCRET DDEG: DB 9EH,3EH,0F2H,0DAH0F6H,0FEH,0EEH,8E HADDR: DB 0B6H,0BEH,0FCH,66 H,60H,0E0H,9CH,7AHDL1MS: MOV R7,#01HDL0: MOV R6,#0FFHDL1 DJNZ R6,DL1DJNZR7,DL0RETPUTBUF: PUSH 00HMOV R7,A MOV A,52H MOV 53H,A MOV A,51H MOV 52H,A MOV A,50H MOV 51H,A MOV A,R7 MOV 50H,A POP 00H RETEND3.a).定义键盘按键,5个数字键E4689 ,3个功能键:乘号x,减号-,等号=;b).可进行三位10进制减法运算;c).可进行两位16进制乘法运算ORG 0000HLJMP MAINORG 0100H DDEG:DB3FH,06H,5BH,4FH,66 H,DB6DH,7DH,07H,7FH,6FH, DB77H,7CH,39H,5EH,79 H,71HORG 1000H MAIN:MOV 52H,#00H MOV 53H,#00H MOV 51H,#00HMOV 50H,#00H MOV 37H,#00H MOV 38H,#04H MOV 39H,#01H MOV 40H,#00H MOV 41H,#00H MOV 42H,#00H MOV 43H,#00H MOV 44H,#00H MOV 45H,#00H MOV 46H,#00H MOV 47H,#00H MOV R5,#50H KEYSUB: MOV A,#03HMOVDPTR,#7F00H MOVX @DPTR,A BEGIN: ACALL DIS ACALL CLEAR ACALL CCSCAN JNZ INK1AJMP BEGIN INK1:ACALL DIS ACALL DL1MS ACALL DL1MS ACALL CLEAR ACALL CCSCAN JNZ INK2AJMP BEGININK2:MOV R2,#0FEH MOV R4,#00HCOLUM:MOVDPTR,#7F02H MOV A,R2 MOVX @DPTR,A MOVDPTR,#7F03H MOVX A,@DPTRJB ACC.5,LONE MOV A,#00H AJMP KCODE LONE:JB ACC.4,NEXT MOV A,#04H KCODE: ADD A,R4 ////////////////////////// CJNEA,#00H,NOT00 MOV A,#09H AJMP NEXT0 NOT00: CJNE A,#01H,NOT01 MOV A,#11H AJMP NEXT0 NOT01: CJNE A,#02H,NOT02 MOV A,#10H AJMP NEXT0 NOT02: CJNE A,#03H,NOT03MOV A,#12H AJMP NEXT0 NOT03: CJNE A,#04H,NOT04 MOV A,#08H AJMP NEXT0 NOT04: CJNE A,#05H,NOT05 MOV A,#06H AJMP NEXT0 NOT05: CJNE A,#06H,NOT06 MOV A,#04H AJMP NEXT0 NOT06:CJNEA,#07H,NOT07 MOV A,#0EH NEXT0: NOP NOT07:ACALL PUTBUF PUSH ACCKON:ACALL DIS ACALL CLEAR ACALL CCSCAN JNZ KONPOP ACC NEXT:INC R4MOV A,R2JNB ACC.3,KERR RL AMOV R2,A AJMP COLUM KERR:AJMP BEGIN CCSCAN:MOVDPTR,#7F02H MOV A,#00H MOVX @DPTR,A MOVDPTR,#7F03HMOVX A,@DPTR CPL AANL A,#30HRETCLEAR:MOVDPTR,#7F01H MOV A,#00H MOVX @DPTR,A RETDIS:PUSH ACC PUSH 00H PUSH 03HMOV A,#0DH MOVDPTR,#7F00H MOVX @DPTR,A MOV R0,#50H MOV R3,#0F7H MOV A,R3 AGAIN:MOVDPTR,#7F02H MOVX @DPTR,A MOV A,@R0 MOVDPTR,#DDEG MOVCA,@A+DPTRMOVDPTR,#7F01H MOVX @DPTR,A ACALL DL1MS INC R0MOV A,R3JNB ACC.5,OUT RR AMOV R3,A AJMP AGAIN OUT:POP 03HPOP 00HPOP ACCRETDL1MS: MOVR7,#01HDL0: MOVR6,#0FFHDL1: DJNZ R6,DL1 DJNZ R7,DL0RET PUTBUF:PUSH 00HPUSH ACCMOV A,R5MOV R0,APOP ACCPUSH ACCXRL A,#12HJZ NOTNUMBER POP ACCPUSH ACCXRL A,#10HJZ NOTNUMBER POP ACCPUSH ACCXRL A,#11HJZ NOTNUMBER POP ACCACALL CHANGE MOV @R0,APOP 00HRET NOTNUMBER:NOP KONA:ACALL DIS ACALL CCSCAN JNZ KONAPOP ACCPOP 00HCJNEA,#12H,MULSUBNU MACALL CAL MULSUBNUM:CJNE A,#10H,SUBNUM ACALL MULCALL SUBNUM: CJNE A,#11H,DONE ACALL SUBCALL DONE: RET CHANGE:MOV 53H,52H MOV 52H,51H MOV 51H,50H RETCAL:PUSH 00H PUSH ACC MOV A,39H JZ RESET1 MOV 47H,50H MOV 46H,51H MOV 45H,52H MOV 44H,53H ACALL CLEARSCRMOV A,37H JNZ ISSUB//乘法MOV A,42H MOV 0F0H,#10H MUL ABADDC A,43H PUSH ACC MOV A,46H MOV 0F0H,#10H MUL ABADDC A,47H MOV 0F0H,A POP ACCMUL ABPUSH ACCANL A,#0FH MOV 43H,A POP ACC PUSH ACCANL A,#0F0HRR ARR ARR ARR AMOV 42H,A POP ACCPUSH ACCMOV 48H,B MOV R0,#48H MOV A,@R0 ANL A,#0FH MOV 41H,A POP ACCMOV A,BANL A,#0F0HRR ARR ARR ARR AMOV 40H,A AJMP CALDONE RESET1:AJMPRESET//减法ISSUB:MOV R2,#04H MOV R0,#43H MOV R1,#47H NEXT4:MOV A,@R0 SUBB A,@R1ANL A,#0FH CJNEA,#0AH,NEXTC AJMP NEXT3 NEXTC:JNC NEXT3 CLR CAJMP NEXTD NEXT3: SUBB A,#06HSETB C NEXTD: MOV @R0,ADEC R0DEC R1DJNZ R2,NEXT4 AJMP CALDONE CALDONE:MOV 39H,#00HMOV 50H,43H MOV 51H,42H MOV 52H,41H MOV 53H,40H AJMP CALEND RESET: ACALL CLEARSCRMOV 39H,#01H CALEND:POP ACCPOP 00HRET MULCALL:MOV 43H,50HMOV 42H,51H MOV 41H,52HMOV 40H,53H ACALL CLEARSCR MOV 37H,#00H RET SUBCALL:MOV 43H,50HMOV 42H,51H MOV 41H,52H MOV 40H,53H ACALL CLEARSCR MOV 37H,#01H RET CLEARSCR:MOV 50H,#00HMOV 51H,#00H MOV 52H,#00H MOV 53H,#00H RETEND单片机应用系统设计——出租车计价器一.系统功能介绍1.可以实现在不同条件下,收费标准不同:白天/晚上/途中等待超过10min收费。