基于51单片机简易计算器毕业论文

1.求基于AT89C51单片机的简易计算器设计

单片机计算器基本功能介绍:简单的加减乘除的运算。

时间显示功能,而且能实现计算器模块和时间模块之间的任意切换。按键音却换功能。

原理;多功能单片机计算器是一个实现加减乘除的和时间功能的计算器,主要的硬件组成由,一个AT89s52单片机芯片,一个LED液晶(1602液晶),一个4*4键盘,和4个特殊功能按键。一个时钟芯片(DS1302),一个蜂鸣器。

单个硬件模块个的介绍AT89S52:主要控制芯片,它是由8kflash,256BRAM,6个中断源,详情参考AT89S52的技术文档.1602液晶1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”,而且可以实现一些复杂的字符操作:1:清显示,光标复位到地址00H位置,2:光标和显示模式设置 光标移动方向,高电平右移,低电平左移,屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 3:显示开关控制,控制整体显示的开与关,高电平表示开显示,低电平表示关显示,控制光标的开与关,高电平表示有光标,低电平表示无光标,控制光标是否闪烁,高电平闪烁,低电平不闪烁4:光标或显示移位,高电平时移动显示的文字,低电平时移动光标5:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符(高低电平在相应的指令上实现),详情可参考1602的技术文档。

1602采用标准的16脚接口: 第1脚:VSS为地电源第2脚:VDD接5V正电源第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。

当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7为8位双向数据线。 第15~16脚:空脚。

1602液晶和单片机的接法4*4键盘,和4个特殊功能按键K(切换键) No(复位键)(时间设置键) C(清除键) +1 2 3 —4 5 6 *7 8 9 %(除)—/+ 0 。 =前4个为特殊功能键,后十六个采用键盘扫描接法,扫描原理:首先给p3口赋11111110(0xfe),然后再读取p3口的值,如果为11101110(0xee)说明是第一排第一个被按下,如果是11011110(0xde)说明是第一排第二个被按下,如果是10111110(0xbe)说明是第一排第三个被按下,如果是0111110(0x7e)说明是第一排第四个被按下,判断二三四排的按键,都采用同样的方法,只要分别给P3口赋不同的值即可,在读取p3口的值,在判断。

用这样的方法即可实现4*4键盘的扫描,只要有键按下,就可以知道是那个键按下,通过这种方法可大大节省单片机的io口的资源。详情可参考网上的键盘扫描原理时钟芯片(DS1302)DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM 指示决定采用24 或12 小时格式DS1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 RES 复位2 I/O 数据线3 SCLK串行时钟时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力(详情可参考DS1302的技术文档管脚描述X1 X2 32.768KHz 晶振管脚GND 地RST 复位脚I/O 数据输入/输出引脚SCLK 串行时钟Vcc1,Vcc2 电源供电管脚计算器工作大概流程。

2.基于51单片机的简易计数器设计

原发布者:puti0808

基于单片机的简易计算器设计摘要3关键字:80C51LCD16024*4矩阵键盘计算器3第一章绪论41.1系统开发背景41.2系统开发意义41.3设计目的41.4设计任务4第二章单片机发展现状52.1目前单片机的发展状况52.1.1单片机的应用场合52.2计算器系统现状62.3简易计算器系统介绍6第三章系统硬件设计及说明73.1系统组成及总体框图83.2AT89S52单片机介绍83.3其它器件介绍及说明113.3.1LCD1602液晶显示113.3.24*4矩阵扫描按键14第四章PROTEUS模拟仿真15第五章系统硬件设计及说明17第六章软件设计186.1汇编语言和C语言的特点及选择186.2源程序代码18摘要近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计主要以80C51单片机为控制芯片,用C语言进行编程实现,通过4*4矩阵键盘控制,输出用液晶屏LCD1602显示,该计算器可以实现一般的加减乘除四则混合运算。关键字:80C51LCD16024*4矩阵键盘计算器第1章绪论1.1

3.怎样设计一个基于51单片机的简易计算器

单片机计算器 基本功能介绍:简单的加减乘除的运算。

时间显示功能,而且能实现计算器模块和时间模块之间的任意切换。按键音却换功能。

原理;多功能单片机计算器是一个实现加减乘除的和时间功能的计算器,主要的硬件组成由,一个at89s52单片机芯片,一个led液晶(1602液晶),一个4*4键盘,和4个特殊功能按键。一个时钟芯片(ds1302),一个蜂鸣器。

单个硬件模块个的介绍 at89s52:主要控制芯片,它是由8kflash,256bram,6个中断源,详情参考at89s52的技术文档.1602液晶1602液晶模块内部的字符发生存储器(cgrom)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,我们就能看到字母“a”,而且可以实现一些复杂的字符操作:1:清显示,光标复位到地址00h位置,2:光标和显示模式设置 光标移动方向,高电平右移,低电平左移,屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 3:显示开关控制,控制整体显示的开与关,高电平表示开显示,低电平表示关显示,控制光标的开与关,高电平表示有光标,低电平表示无光标,控制光标是否闪烁,高电平闪烁,低电平不闪烁4:光标或显示移位,高电平时移动显示的文字,低电平时移动光标5:功能设置命令 dl:高电平时为4位总线,低电平时为8位总线 n:低电平时为单行显示,高电平时双行显示 f: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符(高低电平在相应的指令上实现),详情可参考1602的技术文档。

1602采用标准的16脚接口: 第1脚:vss为地电源第2脚:vdd接5v正电源第3脚:v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度第4脚:rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:rw为读写信号线,高电平时进行读操作,低电平时进行写操作。

当rs和rw共同为低电平时可以写入指令或者显示地址,当rs为低电平rw为高电平时可以读忙信号,当rs为高电平rw为低电平时可以写入数据。第6脚:e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:d0~d7为8位双向数据线。 第15~16脚:空脚。

1602液晶和单片机的接法4*4键盘,和4个特殊功能按键 k(切换键) no(复位键) (时间设置键) c(清除键) +1 2 3 —4 5 6 *7 8 9 %(除) —/+ 0 。 = 前4个为特殊功能键,后十六个采用键盘扫描接法,扫描原理:首先给p3口赋11111110(0xfe),然后再读取p3口的值,如果为11101110(0xee)说明是第一排第一个被按下,如果是11011110(0xde)说明是第一排第二个被按下,如果是10111110(0xbe)说明是第一排第三个被按下,如果是0111110(0x7e)说明是第一排第四个被按下,判断二三四排的按键,都采用同样的方法,只要分别给p3口赋不同的值即可,在读取p3口的值,在判断。

用这样的方法即可实现4*4键盘的扫描,只要有键按下,就可以知道是那个键按下,通过这种方法可大大节省单片机的io口的资源。详情可参考网上的键盘扫描原理 时钟芯片(ds1302) ds1302 是dallas 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态ram ,通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过am/pm 指示决定采用24 或12 小时格式ds1302 与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线1 res 复位2 i/o 数据线3 sclk串行时钟时钟/ram 的读/写数据以一个字节或多达31 个字节的字符组方式 实时时钟具有能计算2100 年之前的秒分时日日期星期月年的能力还有闰年调整的能力(详情可参考ds1302的技术文档 管脚描述 x1 x2 32.768khz 晶振管脚 gnd 地 rst 复位脚 i/o 数据输入/输出引脚 sclk 串行时钟 vcc1,vcc2 电源供电管脚 计算器工作大概流程。

4.51单片机键盘接口电路的计算器的实现的毕业设计及开题报告

51单片机计算器的设计(开题报告实物论文)

目 录

1.课程设计的目的………………………………………………3

2.课程设计题目描述和要求……………………………………3

3.单片机发展简史………………………………………………4

4.MCS-51单片机系统简介………………………………………6

5.MCS-51单片机内部定时器/计数器简介……………………7

6.理论设计………………………………………………………8

7.主要电路分析…………………………………………………8

8.硬件设计………………………………………………………10

9.软件设计………………………………………………………11

10.程序代码……………………………………………………12

11.设计总结……………………………………………………18

12.参考文献……………………………………………………20

随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了。

计算器在人们的日常中是比较的常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算器,基于这样的理念,本次设计是用单片机来设计的四位数计算器。该设计系统是以AT89S51为单片机, P3口作为输入端,外接4X4的键盘,通过键盘扫描来对输入数的控制,在P1口,P2口接了驱动电路。用来保证LED的工作正常。计算器将完成的功能有加,减,乘,除等功能。

功能:

完成0~9999整数的一次加/减/乘/除运算,

减法运算结果可以实现计算结果的负数显示,

除法运算结果为0~999并保留两位小数,

按键音,

设有清零键,

首位零不显示,

其它的显示"E"

按键排布为:

清零/确认/除/乘

减/加/9/8

7/6/5/4

3/2/1/0

5.基于AT89C51制作简易计算器

以下是我编的简易计算器程序,基本成功 //4*4键盘检测程序,按下键后相应的代码显示在液晶屏上 //显示5位后,第6次显示操作符号 //再显示下一个数 // 键值与功能对应表 //键值 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 //功能 0 1 2 3 4 5 6 7 8 9 + - * ÷ = 清零 #include sbit beep=P2^3; sbit lcden=P3^4; sbit rs=P3^5; sbit rw=P3^6; #define uint unsigned int #define ulint unsigned long int #define uchar unsigned char #define lcddata P0 ulint bb,dd,ee,ff; uchar d,flag1; uchar fd1,fd2; uchar b1=16,b2=16,b3=16,b4=16,b5=16; uchar d1=16,d2=16,d3=16,d4=16,d5=16; uchar f1=16,f2=16,f3=16,f4=16,f5=16,f6=16,f7=16,f8=16,f9=16,f10=16; uchar key,keyval,c,temp; void Delay1ms(uint i) //1ms延时程序 { uint j; for(;i>0;i--) { for(j=0;j<125;j++) {;} } } void write_com(uchar com) { lcddata=com; rs=0; rw = 0; lcden=0; Delay1ms(10); lcden=1; Delay1ms(10); lcden=0; } void write_date(uchar date) { lcddata=date; rs=1; rw=0; lcden=0; Delay1ms(10); lcden=1; Delay1ms(10); lcden=0; } void init2() { rw=0; write_com(0x38); Delay1ms(10); write_com(0x0f); Delay1ms(10); write_com(0x06); Delay1ms(10); write_com(0x01); Delay1ms(10); } void display1(uchar A1,uchar A2,uchar A3,uchar A4,uchar A5) //第1个数显示程序 { init2(); write_com(0x80);//第1行,第1字 Delay1ms(10); write_date(0x30+A1); Delay1ms(10); write_date(0x30+A2); Delay1ms(10); write_date(0x30+A3); Delay1ms(10); write_date(0x30+A4); Delay1ms(10); write_date(0x30+A5); Delay1ms(10); } void display2(uchar A1,uchar A2,uchar A3,uchar A4,uchar A5) //第2个数显示程序 { write_com(0x88);//第1行,第1字 Delay1ms(10); write_date(0x30+A1); Delay1ms(10); write_date(0x30+A2); Delay1ms(10); write_date(0x30+A3); Delay1ms(10); write_date(0x30+A4); Delay1ms(10); write_date(0x30+A5); Delay1ms(10); } void display3(uchar a) //操作符号显示程序 { write_com(0x86);//第1行,第1字 Delay1ms(10); switch(a) { case 10: write_date('+'); Delay1ms(10); case 11: write_date('-'); Delay1ms(10); case 12: write_date('x'); Delay1ms(10); case 13: write_date('/'); Delay1ms(10); } } void display4(uchar A1,uchar A2,uchar A3,uchar A4,uchar A5,uchar A6,uchar A7,uchar A8,uchar A9,uchar A10,uchar A11,uchar A12) //结果显示程序 { write_com(0x80+0x40);//第2行,第1字 Delay1ms(10); if (flag1==0) { write_date('-'); } else write_date('+'); Delay1ms(10); write_date(0x30+A1); Delay1ms(10); write_date(0x30+A2); Delay1ms(10); write_date(0x30+A3); Delay1ms(10); write_date(0x30+A4); Delay1ms(10); write_date(0x30+A5); Delay1ms(10); write_date(0x30+A6); Delay1ms(10); write_date(0x30+A7); Delay1ms(10); write_date(0x30+A8); Delay1ms(10); write_date(0x30+A9); Delay1ms(10); write_date(0x30+A10); Delay1ms(10); write_date('.'); Delay1ms(10); write_date(0x30+A11); Delay1ms(10); write_date(0x30+A12); Delay1ms(10); } uchar keyscan() { key=16; P3=0xef;//P3.7输出1个低电平 temp=P3; //读取 temp=temp&0x0f;//屏蔽高4位 if(temp!=0x0f) { Delay1ms(10); if(temp!=0x0f) { temp=P3; switch(temp) { case 0xee: key=0; break; case 0xed: key=4; break; case 0xeb: key=8; break; case 0xe7: key=12; break; } while(temp!=0x0f) { temp=P3; temp=temp&0x0f; beep=0; } beep=1; } } P3=0xdf; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { Delay1ms(10); if(temp!=0x0f) { temp=P3; switch(temp) { case 0xde: key=1; break; case 0xdd: key=5; break; case 0xdb: key=9; break; case 0xd7: key=13; break; } while(temp!=0x0f) { temp=P3; temp=temp&0x0f; beep=0; } beep=1; } } P3=0xbf; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { Delay1ms(10); if(temp!=0x0f) { temp=P3; switch(temp) { case 0xbe: key=2; break; case 0xbd: key=6; break; case 0xbb: key=10; break; case 0xb7: key=14; break; } while(temp!=0x0f) { temp=P3; temp=temp&0x0f; beep=0; } beep=1; } } P3=0x7f; temp=P3; temp=temp&0x0f; if(temp!=0x0f) { Delay1ms(10); if(temp!=0x0f) { temp=P3; switch(temp) { case 0x7e: key=3; break; case 0x7d: key=7; break; case 0x7b: key=11; break; case 0x77: key=15; break; } while(temp!=0x0f) { temp=P3; temp=temp&0x0f; beep=0; } beep=1; } } return(key); } void main() { while(1) { c=1; while(c<6)//输入第1个5 位数 { keyval=keyscan(); if(keyval<10) { switch(c) { case 1:b1=keyval; break; case 2:b2=keyval; break; case 3:b3=keyval; break; case 4:b4=keyval; break; case 5:b5=keyval; break; } c++; } display1(b1,b2,b3,b4,b5); } while(c==6) //输入计算符号 { keyval=keyscan(); if((keyval>=10)&&(keyval<14)) //可去一层括号,因逻辑运算优先级较低 { d=keyval; } c=1; 。

6.用单片机设计简易计算器

给你些子程序,自己看着凑吧。

呵呵。有了这些,写出来应该不难了。

;@@@@@@@@@双字节整数运算@@@@@@@@@@@@@@@@@@;***********双字节无符号加法**************;入口:R6(H),R7,R4(H),R5,出口:和R6(H),R7(L)UADD: MOV A,R7 ADD A,R5 MOV R7,A MOV A,R6 ADDC A,R4 MOV R6,A RET;***********双字节无符号减法**************;入口:被减数R6(H),R7(L),减数R4(H),R5(L),出口:差R6(H),R7(L) CLR C MOV A,R7 SUBB A,R5 MOV R7,A MOV A,R6 SUBB A,R4 MOV R6,A RET;***********双字节无符号乘法**************;入口:R6(H),R7(L),R4(H),R5(L),出口:积R6(H),R7(L)UMUL: MOV A,R7 MOV B,R5 MUL AB MOV R0,B XCH A,R7 MOV B,R4 MUL AB ADD A,R0 XCH A,R6 MOV B,R5 MUL AB ADD A,R6 MOV R6,A RET;***********双字节无符号除法*****************;入口:R6(H),R7(L),R4(H),R5(L),出口:商R6(H),R7(L),余R4(H),R5(L);影响:R2,R3,;堆栈需求:1UDIV: CLR C CLR A MOV R2,A MOV R3,A MOV B,#10HMOVBIT: MOV A,R7;R6、R7中数据左移一位到R2、R3中,C到R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A CLR C ;R2R3-R4R5 MOV A,R3 SUBB A,R5 PUSH Acc MOV A,R2 SUBB A,R4 JBC Cy,MOVBIT0;不够减,清C继续左移 MOV R2,A;够减,存回余数并置位C POP Acc MOV R3,A SETB C SJMP MOVBIT1MOVBIT0: POP AccMOVBIT1: DJNZ B,MOVBIT MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R2 MOV R4,A MOV A,R3 MOV R5,A RET (7) 标号: DIVD 功能:双字节二进制无符号数除法入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。

影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节DIVD: CLR C ;比较被除数和除数MOV A,R3 SUBB A,R7MOV A,R2SUBB A,R6JC DVD1SETB OV ;溢出RETDVD1: MOV B,#10H ;计算双字节商DVD2: CLR C ;部分商和余数同时左移一位MOV A,R5RLC AMOV R5,AMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AXCH A,R2RLC AXCH A,R2MOV F0,C ;保存溢出位CLR CSUBB A,R7 ;计算(R2R3-R6R7)MOV R1,AMOV A,R2SUBB A,R6ANL C,/F0 ;结果判断JC DVD3MOV R2,A ;够减,存放新的余数MOV A,R1MOV R3,AINC R5 ;商的低位置一DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5)MOV A,R4 ;将商移到R2R3中MOV R2,AMOV A,R5MOV R3,ACLR OV ;设立成功标志RET。

7.用单片机设计简易计算器

给你些子程序,自己看着凑吧。

呵呵。有了这些,写出来应该不难了。

;@@@@@@@@@双字节整数运算@@@@@@@@@@@@@@@@@@;***********双字节无符号加法**************;入口:R6(H),R7,R4(H),R5,出口:和R6(H),R7(L)UADD: MOV A,R7 ADD A,R5 MOV R7,A MOV A,R6 ADDC A,R4 MOV R6,A RET;***********双字节无符号减法**************;入口:被减数R6(H),R7(L),减数R4(H),R5(L),出口:差R6(H),R7(L) CLR C MOV A,R7 SUBB A,R5 MOV R7,A MOV A,R6 SUBB A,R4 MOV R6,A RET;***********双字节无符号乘法**************;入口:R6(H),R7(L),R4(H),R5(L),出口:积R6(H),R7(L)UMUL: MOV A,R7 MOV B,R5 MUL AB MOV R0,B XCH A,R7 MOV B,R4 MUL AB ADD A,R0 XCH A,R6 MOV B,R5 MUL AB ADD A,R6 MOV R6,A RET;***********双字节无符号除法*****************;入口:R6(H),R7(L),R4(H),R5(L),出口:商R6(H),R7(L),余R4(H),R5(L);影响:R2,R3,;堆栈需求:1UDIV: CLR C CLR A MOV R2,A MOV R3,A MOV B,#10HMOVBIT: MOV A,R7;R6、R7中数据左移一位到R2、R3中,C到R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A CLR C ;R2R3-R4R5 MOV A,R3 SUBB A,R5 PUSH Acc MOV A,R2 SUBB A,R4 JBC Cy,MOVBIT0;不够减,清C继续左移 MOV R2,A;够减,存回余数并置位C POP Acc MOV R3,A SETB C SJMP MOVBIT1MOVBIT0: POP AccMOVBIT1: DJNZ B,MOVBIT MOV A,R7 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R2 MOV R4,A MOV A,R3 MOV R5,A RET (7) 标号: DIVD 功能:双字节二进制无符号数除法入口条件:被除数在R2、R3、R4、R5中,除数在R6、R7中。出口信息:OV=0 时,双字节商在R2、R3中,OV=1 时溢出。

影响资源:PSW、A、B、R1~R7 堆栈需求: 2字节DIVD: CLR C ;比较被除数和除数MOV A,R3 SUBB A,R7MOV A,R2SUBB A,R6JC DVD1SETB OV ;溢出RETDVD1: MOV B,#10H ;计算双字节商DVD2: CLR C ;部分商和余数同时左移一位MOV A,R5RLC AMOV R5,AMOV A,R4RLC AMOV R4,AMOV A,R3RLC AMOV R3,AXCH A,R2RLC AXCH A,R2MOV F0,C ;保存溢出位CLR CSUBB A,R7 ;计算(R2R3-R6R7)MOV R1,AMOV A,R2SUBB A,R6ANL C,/F0 ;结果判断JC DVD3MOV R2,A ;够减,存放新的余数MOV A,R1MOV R3,AINC R5 ;商的低位置一DVD3: DJNZ B,DVD2 ;计算完十六位商(R4R5)MOV A,R4 ;将商移到R2R3中MOV R2,AMOV A,R5MOV R3,ACLR OV ;设立成功标志RET。

8.用51单片机实现一个简单计算器的功能

给你一个参考程序,这个是可行的哦,你看看这个程序#include #include #include #include #define uchar unsigned char#define uint unsigned int uchar operand1[9], operand2[9]; uchar operator; void delay(uint); uchar keyscan(); void disp(void); void buf(uint value); uint compute(uint va1,uint va2,uchar optor); uchar code table[] = {0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90,0xff}; uchar dbuf[8] = {10,10,10,10,10,10,10,10}; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } uchar keyscan() { uchar skey; P1 = 0xfe; while((P1 & 0xf0) != 0xf0) { delay(3); while((P1 & 0xf0) != 0xf0) { switch(P1) { case 0xee: skey = '7'; break; case 0xde: skey = '8'; break; case 0xbe: skey = '9'; break; case 0x7e: skey = '/'; break; default: skey = '#'; } while((P1 & 0xf0) != 0xf0) ; } } P1 = 0xfd; while((P1 & 0xf0) != 0xf0) { delay(3); while((P1 & 0xf0) != 0xf0) { switch(P1) { case 0xed: skey = '4'; break; case 0xdd: skey = '5'; break; case 0xbd: skey = '6'; break; case 0x7d: skey = '*'; break; default: skey = '#'; } while((P1 & 0xf0) != 0xf0) ; } } P1 = 0xfb; while((P1 & 0xf0) != 0xf0) { delay(3); while((P1 & 0xf0) != 0xf0) { switch(P1) { case 0xeb: skey = '1'; break; case 0xdb: skey = '2'; break; case 0xbb: skey = '3'; break; case 0x7b: skey = '-'; break; default: skey = '#'; } while((P1 & 0xf0) != 0xf0) ; } } P1 = 0xf7; while((P1 & 0xf0) != 0xf0) { delay(3); while((P1 & 0xf0) != 0xf0) { switch(P1) { case 0xe7: skey = '$'; break; case 0xd7: skey = '0'; break; case 0xb7: skey = '='; break; case 0x77: skey = '+'; break; default: skey = '#'; } while((P1 & 0xf0) != 0xf0) ; } } return skey; } void main() { uint value1, value2, value; uchar ckey, cut1 = 0, cut2 = 0; uchar operator; uchar i, bool = 0; init: buf(0); disp(); value = 0; cut1 = cut2 = 0; bool = 0; for(i = 0;i < 9;i++) { operand1[i] = '\0'; operand2[i] = '\0'; } while(1) { ckey = keyscan(); if(ckey != '#') { if(isdigit(ckey)) { switch(bool) { case 0: operand1[cut1] = ckey; operand1[cut1+1] = '\0'; value1 = atoi(operand1); cut1++; buf(value1); disp(); break; case 1: operand2[cut2] = ckey; operand2[cut2+1] = '\0'; value2 = atoi(operand2); cut2++; buf(value2); disp(); break; default: break; } } else if(ckey=='+'||ckey=='-'||ckey=='*'||ckey=='/') { bool = 1; operator = ckey; buf(0); dbuf[7] = 10; disp(); } else if(ckey == '=') { value = compute(value1,value2,operator); buf(value); disp(); while(1) { ckey = keyscan(); if(ckey == '$') goto init; else { buf(value); disp(); } } } else if(ckey == '$') { goto init;} } disp(); } } uint compute(uint va1,uint va2,uchar optor) { uint value; switch(optor) { case '+' : value = va1+va2; break; case '-' : value = va1-va2; break; case '*' : value = va1*va2; break; case '/' : value = va1/va2; break; default : break; } return value; } void buf(uint val) { uchar i; if(val == 0) { dbuf[7] = 0; i = 6; } else for(i = 7; val > 0; i--) { dbuf[i] = val % 10; val /= 10; } for( ; i > 0; i--) dbuf[i] = 10; } void disp(void) { uchar bsel, n; bsel=0x01; for(n=0;n<8;n++) { P2=bsel; P0=table[dbuf[n]]; bsel=_crol_(bsel,1); delay(3); P0=0xff; } }。

9.基于51单片机的简易计数器设计,求c语言程序

#include

#define uchar unsigned char

uchar code ledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9

unsigned char sec=0,scanled;

unsigned char disdat[2];

sbit key1=P1^0;

sbit key2=P1^1;

sbit key3=P1^2;

void dischg()

{

disdat[0]=sec%10;

disdat[1]=sec/10;

}

void t0isr() interrupt 1 //秒计时

{

TH0=0x3c;

TL0=0xb0;

time++;

if(time==20)

{

time=0;

sec++;

if(sec>60)sec=0;

}

dischg();

}

void t1isr() interrupt 3 //显示

{

TH1=0xec;

TL1=0x78;

switch(scanled)

{

case 0:

P2=0x01;

P0=~ledtab[disdat[7]];

break;

case 1:

P2=0x02;

P0=~ledtab[disdat[6]];

break;

default:break;

}

scanled++;

scanled%=2;

}

main()

{

TMOD=0x11;

TH0=0x3c;

TL0=0xb0;

TH1=0xec;

TL1=0x78;

TR1=1;

TR0=1;

ET0=1;

ET1=1;

EA=1;

sec=0;

scanled=0;

time=0;

dischg();

while(1)

{

if(key1==0)

{

while(key1==0);

TR0=0;

}

if(key2==0)

{

while(key2==0);

TR0=1;

}

if(key3==0)

{

while(key3==0);

sec=0;

dischg();

}

}

}

基于51单片机简易计算器毕业论文

转载请注明出处众文网 » 基于51单片机简易计算器毕业论文

资讯

毕业论文的导语

阅读(78)

本文主要为您介绍毕业论文的导语,内容包括论文导语是什么,导语怎么写急需范文,导语和摘要的区别稍微详细一点。摘要一般包括以下几部分: 研究背景和意义; 2、全文的总体思路概括; 3、主要研究成果(分条叙述,是重点,清晰告诉别人你都研究出什么来

资讯

毕业论文汽车钣金维修工艺

阅读(80)

本文主要为您介绍毕业论文汽车钣金维修工艺,内容包括汽车维修钣金技师论文,急需一篇汽车钣金方面的论文大概5000字左右,谈汽车钣金维修在维修技术中的地位。摘要:汽车钣金喷漆作前期整形工作,汽车车身我们把它比作人的身体,一个完美的人体就比

资讯

电大会计本科毕业论文工业企业

阅读(77)

本文主要为您介绍电大会计本科毕业论文工业企业,内容包括电大会计本科毕业论文8000字以上电大会计本科毕业论文8000爱问,急求电大会计专业毕业论文,电大会计本科毕业论文,什么题目好要求具体的,简单易写的求告知。您的会计专业的论文具体是

资讯

施工项目进度管理毕业论文

阅读(73)

本文主要为您介绍施工项目进度管理毕业论文,内容包括建筑施工管理毕业论文,求一份工程项目管理毕业论文,关于“对建筑工程进度控制的思考”毕业论文的绪论怎么写啊百度。【论文摘要】建筑工程项目管理,主要是通过管理使项目的目标得以实现。

资讯

毕业论文的讨论与结论怎么写

阅读(64)

本文主要为您介绍毕业论文的讨论与结论怎么写,内容包括毕业论文的结论怎么写,毕业论文中的总结与讨论如何写,求毕业论文的结论部分怎么写。原发布者:莫羽郁94以下内容粘贴自百度知道:论文的结论是最终的、总体的结论,不是正文中各章小结的简单

资讯

副导演毕业论文

阅读(81)

本文主要为您介绍副导演毕业论文,内容包括试论中国第六代导演是毕业论文..要快啊.谢谢拉,本人是学电影方面的,马上要写毕业论文,但是一头雾水,有没有好心,影视毕业论文毕业论文应该选什么方向和题目比较好戏剧影视文学。关于“第六代”最原

资讯

毕业论文中的数字序号使用

阅读(72)

本文主要为您介绍毕业论文中的数字序号使用,内容包括论文序号顺序,文章格式中数字序号如何规范使用,论文中数字符号的使用。论文序号第一层为汉字数字加顿号,如二、三;第二层为括号中包含汉字数字,如(一)(二)(三);第三层为阿拉伯数字加下脚点,如1.2.3;

资讯

经济类本科毕业生论文写什么

阅读(69)

本文主要为您介绍经济类本科毕业生论文写什么,内容包括经济学专业毕业论文怎么写,经济类的毕业论文写什么好,范围要小,经济学专业本科毕业论文怎么写。要是你现在还想找,去找国淘论文写作,我在他们家写过,挺靠谱的按议论的性质不同可以把毕业

资讯

研究生毕业论文重合度最高为

阅读(78)

本文主要为您介绍研究生毕业论文重合度最高为,内容包括考研研究生毕业论文查重,论文重合率不能超过多少,国家规定硕士研究生重复率多少,硕士毕业论文重复率在多少合适。学院规定:学术型研究生论文重复率超过30%、专业学位型研究生论文重复率

资讯

护理管理专业毕业论文范文

阅读(83)

本文主要为您介绍护理管理专业毕业论文范文,内容包括护理毕业论文例文,护理本科专业毕业论文,护理论文网跪求一篇有关护士护理的论文,3000字左右。提供一份护理毕业论文,供参考。 长期氧疗的护理 摘要:吸氧是治疗各种肺部疾患合并低吸氧是

资讯

游戏毕业论文设计与实现

阅读(103)

本文主要为您介绍游戏毕业论文设计与实现,内容包括怎么写游戏设计类的毕业设计啊,求写动画和游戏方面的毕业论文怎么写,3D游戏场景设计毕业论文怎么写。扫雷游戏的设计与开发摘要本论文研究的是以Visual Basic 6.0为开发环境,设计并开发一款

资讯

cad毕业论文目录

阅读(81)

本文主要为您介绍cad毕业论文目录,内容包括毕业论文目录有好多页可以么,关于毕业论文,题目:AutoCAD常用查询功能,要求:6000字求,急急急AutoCAD毕业论文怎么写啊。标题 标题是文章的眉目。各类文章的标题,样式繁多,但无论是何种形式,总要以全部或

资讯

计算机系统设计毕业论文

阅读(87)

本文主要为您介绍计算机系统设计毕业论文,内容包括计算机程序设计毕业论文,计算机毕业论文/设计题目,计算机论文范文3000字。摘要: 1一 绪论 21.1问题的提出 2二 系统概述 42.1 本系统主要完成的功能 42.2 系统预览图 4三 系统需求分析 5四

资讯

美术系毕业论文的致谢

阅读(84)

本文主要为您介绍美术系毕业论文的致谢,内容包括毕业论文致谢范文,毕业论文的致谢怎么写,毕业论文结束语、致谢词(通用版)。学术堂整理了以下几篇毕业论文致谢范文,希望对你的写作能提供帮助:范文一:本课题在选题及研究过程中得到X老师的亲切关

资讯

毕业论文的导语

阅读(78)

本文主要为您介绍毕业论文的导语,内容包括论文导语是什么,导语怎么写急需范文,导语和摘要的区别稍微详细一点。摘要一般包括以下几部分: 研究背景和意义; 2、全文的总体思路概括; 3、主要研究成果(分条叙述,是重点,清晰告诉别人你都研究出什么来

资讯

毕业论文汽车钣金维修工艺

阅读(80)

本文主要为您介绍毕业论文汽车钣金维修工艺,内容包括汽车维修钣金技师论文,急需一篇汽车钣金方面的论文大概5000字左右,谈汽车钣金维修在维修技术中的地位。摘要:汽车钣金喷漆作前期整形工作,汽车车身我们把它比作人的身体,一个完美的人体就比

资讯

电大会计本科毕业论文工业企业

阅读(77)

本文主要为您介绍电大会计本科毕业论文工业企业,内容包括电大会计本科毕业论文8000字以上电大会计本科毕业论文8000爱问,急求电大会计专业毕业论文,电大会计本科毕业论文,什么题目好要求具体的,简单易写的求告知。您的会计专业的论文具体是

资讯

施工项目进度管理毕业论文

阅读(73)

本文主要为您介绍施工项目进度管理毕业论文,内容包括建筑施工管理毕业论文,求一份工程项目管理毕业论文,关于“对建筑工程进度控制的思考”毕业论文的绪论怎么写啊百度。【论文摘要】建筑工程项目管理,主要是通过管理使项目的目标得以实现。

资讯

毕业论文的讨论与结论怎么写

阅读(64)

本文主要为您介绍毕业论文的讨论与结论怎么写,内容包括毕业论文的结论怎么写,毕业论文中的总结与讨论如何写,求毕业论文的结论部分怎么写。原发布者:莫羽郁94以下内容粘贴自百度知道:论文的结论是最终的、总体的结论,不是正文中各章小结的简单

资讯

副导演毕业论文

阅读(81)

本文主要为您介绍副导演毕业论文,内容包括试论中国第六代导演是毕业论文..要快啊.谢谢拉,本人是学电影方面的,马上要写毕业论文,但是一头雾水,有没有好心,影视毕业论文毕业论文应该选什么方向和题目比较好戏剧影视文学。关于“第六代”最原

资讯

毕业论文中的数字序号使用

阅读(72)

本文主要为您介绍毕业论文中的数字序号使用,内容包括论文序号顺序,文章格式中数字序号如何规范使用,论文中数字符号的使用。论文序号第一层为汉字数字加顿号,如二、三;第二层为括号中包含汉字数字,如(一)(二)(三);第三层为阿拉伯数字加下脚点,如1.2.3;

资讯

机械及自动化专业毕业论文

阅读(81)

本文主要为您介绍机械及自动化专业毕业论文,内容包括机械制造与自动化专业毕业论文,机械制造及其自动化专业论文5000字,机械设计与自动化毕业论文。浅谈自动化机械制造 摘 要:自动化制造系统(FMS)系指具有自动化程度高的制造系统。目前所谈及