文章目录
- (一)前言
- (二)设计目的
- (三)硬件及其电路
-
- (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构成并联谐振电路,接在放大器的反馈回路中,内部振荡器产生自激振荡。
(3)数码管显示电路
本次项目需要显示数据量少,故采用LED数码管进行显示,经济且实用。数码管显示有静态显示和动态显示两种方法。
为了减少端口的使用,故选择静态显示,并采用共阴极接法电路,并通过74LS240和8155相连且受单片机控制。
数码管显示电路中,SW3、SW4红色拨码开关打在“ON”位置,数码管代码端和公共端与 8155PA、 PB 口相连。如果 SW3、 SW4 红色拨码开关打在相反位置,即“ OFF”位置,数码管电路与 8155 断开,数码管代码端和公共端对外开放。
(5)矩阵键盘电路
键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键和专用驱动芯片的组合,当按下某个按键时能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但在需要按键数不多时,为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。
本项目需要的16个按键,用两个28即可,即由8155的PC口和PA口采用两个28矩阵式键盘。
(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进行处理,非常感谢!