51单片机(AT89S52)设计简单计算器(4位加减乘除)

文章目录

  • (一)前言
  • (二)设计目的
  • (三)硬件及其电路
    • (1)时钟电路
    • (2)复位电路
    • (3)数码管显示电路
    • (4)8155扩展I/O口电路
    • (5)矩阵键盘电路
  • (四)系统程序设计
    • (1)主程序思路
    • (2)LED动态显示子程序流程图
    • (3)键盘扫描子程序流程图
    • (4)溢出报错子程序
    • (5)清零子程序
    • (6)运算数值输入计算子程序
    • (7)加法计算子程序
    • (8)减法计算子程序
    • (9)乘法计算子程序
    • (10)除法计算子程序
    • (11)显示子程序
  • (五) 结束语

(一)前言

  本文是简单计算器的设计。使用的是AT89S52芯片,C语言。
  目的设计一个简易计算器,以能够进行4位BCD码的加减乘除整数运算,且能够在溢出范围时做出错提醒。用8位数码管动态显示,实现人机交互功能。开机时显示“0”,数字左移显示。计算器功能通过软件实现,以C语言对89S52单片机进行编程以实现所需要的计算器的设计。
  本文使用JY2E00编译环境,当然也可以用keil4等。C语言编写程序后通过JY-E2300C仿真器连接硬件,选择AT89S52单片机和8155,输入采用两个2*8的矩阵键盘。显示用6位8段共阴极LED动态显示

(二)设计目的

  (1) 8位数码管显示,开机时显示“0”,数字左移显示;
  (2) 4位BCD码加减乘除,整数运算;
  (3) 运算超范围出错提示
  (4)2*8矩阵键盘,其中10个数字键,4个加减乘除运算功能键,1个等于键,1个清零键

(三)硬件及其电路

  主要硬件设备:AT89S52单片机、8155、数码管、矩阵键盘
  其中AT89S52单片机的电路网上有很多,只需要正常提供时钟,搭建复位电路即可

(1)时钟电路

  单片机内部有用于构成振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。采用内部方式时钟电路,即外接晶体以及电容C1,C2构成并联谐振电路,接在放大器的反馈回路中,内部振荡器产生自激振荡。

51单片机(AT89S52)设计简单计算器(4位加减乘除)

(3)数码管显示电路

  本次项目需要显示数据量少,故采用LED数码管进行显示,经济且实用。数码管显示有静态显示和动态显示两种方法。
  为了减少端口的使用,故选择静态显示,并采用共阴极接法电路,并通过74LS240和8155相连且受单片机控制。
  数码管显示电路中,SW3、SW4红色拨码开关打在“ON”位置,数码管代码端和公共端与 8155PA、 PB 口相连。如果 SW3、 SW4 红色拨码开关打在相反位置,即“ OFF”位置,数码管电路与 8155 断开,数码管代码端和公共端对外开放。

51单片机(AT89S52)设计简单计算器(4位加减乘除)

(5)矩阵键盘电路

  键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键和专用驱动芯片的组合,当按下某个按键时能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但在需要按键数不多时,为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。
  本项目需要的16个按键,用两个28即可,即由8155的PC口和PA口采用两个28矩阵式键盘。

51单片机(AT89S52)设计简单计算器(4位加减乘除)

(2)LED动态显示子程序流程图

  LED动态显示程序执行流程如下:设置参量并赋初值,进入for循环以实现6位数码管的动态位选,进入switch中进行对应数码管的段选显示,延时继续循环进行。

void Led_display(){int temp,j;  temp=0x01;  j=0;for(i=0;i6;i++){  temp=~temp;  pa8155=temp; switch(Led_store[j]){ case 0:pb8155=~Led_code[0];break; case 1:pb8155=~Led_code[1];break; case 2:pb8155=~Led_code[2];break; case 3:pb8155=~Led_code[3];break; case 4:pb8155=~Led_code[4];break; case 5:pb8155=~Led_code[5];break; case 6:pb8155=~Led_code[6];break; case 7:pb8155=~Led_code[7];break; case 8:pb8155=~Led_code[8];break; case 9:pb8155=~Led_code[9];break; case 10:pb8155=~Led_code[10];break; case 11:pb8155=~Led_code[11];break; case 12:pb8155=~Led_code[12];break; case 13:pb8155=~Led_code[13];break; case 14:pb8155=~Led_code[14];break; case 15来源:TaiBai-let
                                                        

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月3日
下一篇 2021年1月3日

相关推荐