24小时论文定制热线

热门毕设:土木工程工程造价桥梁工程计算机javaasp机械机械手夹具单片机工厂供电采矿工程
您当前的位置:论文定制 > 毕业设计论文 >
快速导航
毕业论文定制
关于我们
我们是一家专业提供高质量代做毕业设计的网站。2002年成立至今为众多客户提供大量毕业设计、论文定制等服务,赢得众多客户好评,因为专注,所以专业。写作老师大部分由全国211/958等高校的博士及硕士生设计,执笔,目前已为5000余位客户解决了论文写作的难题。 秉承以用户为中心,为用户创造价值的理念,我站拥有无缝对接的售后服务体系,代做毕业设计完成后有专业的老师进行一对一修改与完善,对有答辩需求的同学进行一对一的辅导,为你顺利毕业保驾护航
代做毕业设计
常见问题

一款用LCD1602液晶显示的多功能计算器的研发

添加时间:2020/05/18 来源:微型电脑应用 作者:郭占苗,吴沛
多功能计算器作为一种快速通用的计算工具为日常计算提供了方便, 同时又可以兼有时钟显示和温度显示功能。
以下为本篇论文正文:

  摘    要:基于STC89C52单片机设计一款用LCD1602液晶显示的多功能计算器。由矩阵键盘模块、温度显示模块、时钟模块和液晶显示模块组成, 其中, 单片机的P0口用作输出端口接LCD1602的8个数据引脚, P2口接使能端和读写引脚, 驱动LCD1602显示;P1口作为输入端口, 外接4x4的矩阵键盘;P3口接DS18B20温度传感器和DS1302时钟芯片, 用于实时监测环境温度, 显示当前时间。系统的模块化设计, 使计算器既能进行加、减、乘、除、清零等多种运算的同时, 还能显示环境温度与实时时间。

  关键词:STC89C52单片机; 计算器; 液晶显示; 多功能; 矩阵键盘;

  作者简介: 郭占苗 (1981-) , 女, 集宁人, 讲师, 硕士, 研究方向:电子实训的教学与研究。; 吴沛 (1973-) , 男, 铜川人, 副教授, 硕士, 研究方向:高等职业教育管理理论及信息化教育研究。;

  Design and Simulation of Multi-function Calculator Based on STC89C52 MCU

  Abstract:Based on STC89C52 microcontroller, an LCD1602 multi-function calculator was designed.The calculator consists of matrix keyboard module, temperature display module, clock module and LCD module.P0 port in MCU is used as the output port to connect to 8 data pins in the LCD1602, and P2 port connects to enable-end and reads and writes pins to drive LCD1602 display.P1 port, which is used as the input port, extends to 4 x4 matrix keyboard.P3 port is connected to DS18B20 temperature sensor and DS1302 clock chip, taking as real-time monitoring of ambient temperature to display the current time.The modular is designed in the system, it makes possible to add, subtract, multiply, pide, clear and other operations at the same time, and to display the ambient temperature and real-time in the calculator system.

  Keyword:STC89C52 MCU; Calculator; LCD display; Multi-function; Matrix keyboard;

  目录

  摘要┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅   ┅  ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ 1

  关键词┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅  ┅  ┅ ┅  ┅ ┅ ┅ ┅  ┅┅ ┅ ┅ ┅  ┅1

  第一章 原理的设计┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅   ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ 2

  第二章 软件的设计┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅  ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ 3

  2.1 主函数的设计┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅4

  2.2 矩阵按键的设计┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅   ┅ ┅ ┅┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅  ┅┅   ┅ ┅ 5

  2.3 DS1302时钟显示┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅  ┅ ┅ ┅┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ 6

  2.4 DS18B20温度显示程序的设计┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅7

  2.5 LCD1602液晶显示程序的设计┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅7

  第三章 Proteus仿真与实物制作┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ 8

  第四章 总结┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅┅ ┅9

  致谢┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ 9

  参考文献┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅┅10

  附录┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅ ┅  ┅ ┅ ┅ ┅ ┅ ┅┅ 10

  论文正文

  多功能计算器作为一种快速通用的计算工具为日常计算提供了方便, 同时又可以兼有时钟显示和温度显示功能。该计算器以STC89C52单片机为核心进行计算器模拟系统的设计, 输入采用4×4矩阵键盘, 可以进行加、减、乘、除数字运算, 并在LCD1602上显示操作过程, 不计算时, 显示当前时间和温度, 通过按键切换模式时, 可进行时间的调整。

  第一章 原理的设计

  该多功能计算器主要包括键盘输入模块、单片机主控芯片、显示模块、时钟模块和温度控制模块等5部分组成, 键盘部分主要用于计算器运算时输入数字, 切换计算器或时间显示, 以及时间显示时进行时间调整的功能;单片机主要完成数据处理功能, 包括确定按键, 完成运算, 以及输出数据;显示器部分主要完成单片机输出的显示;时钟模块完成当前时间的精准显示, 温度传感器对实时温度进行检测[1]。主要原理框图, 如图1所示。

  图1 多功能计算器原理框图

  第二章 软件的设计

  2.1 主函数的设计

  主函数里主要设计编写LCD1602液晶温度显示, 按键切换和时间调整程序。

  LCD1602温度显示函数“void LcdDisplayTemp (int temp) ”设计时, 给温度显示数组元素初值赋值为“0”, 数组定义为“unsigned char datas[]={0, 0, 0, 0, 0};”。温度在液晶上显示精确到小数点后两位, 定义为浮点型, “float tp;”, 用“if…else…”语句进行二选一判断, 当温度为负数时, 即零下温度时, 在液晶RAM第二行“0XC0+9”地址上显示“-”号, 通过补码方式获取负温度值;当温度值为正数时, 即零上温度时, 则在液晶RAM地址“0XC0+9”上显示“+”号, 因为DS18B20温度传感器的分辨率是0.0625, 通过语句“temp=tp*0.0625*100+0.5;”将其扩大一百倍, 进行四舍五入, 获取相应温度值[2]。通过语句“datas[1]=temp%10000/1000;//整数十位, datas[2]=temp%1000/100;//整数个位, datas[3]=temp%100/10;//小数十位, datas[4]=temp%10;//小数个位”将温度的整数和小数部分的个位和十位分离出来, 并利用LCD1602写数据函数将分离数据从液晶RAM地址“0XC0+10”开始显示, 中间位置显示小数点“.”, 最后显示温度符号“C”。

  在main () 函数里, 对按键进行判断和扫描, 开机屏幕显示时间、日期和温度, 按“NC”键, 根据电路图, 先选中第三行, 给P1赋值“0XDF”, 通过判断P1是否等于“0XD7”来判断是否按下“NC”键。如果按下“NC”键, 则调用清屏指令“LcdWriteCom (0x01) ;”将屏幕清零, 系统切换进入计算模式。

  进行时间调整时, 先给P1口赋值“0XBF”, 然后判断P1是否等于“0XB7”, 如果等于则表示按下“=”键, 系统暂停计时, 再判断是否按下“/”键, 即给P1赋值“0X7F”后, 判断是否等于“0X77”, 按下“/”键则依次切换选中调整“分、时、日、月、周、年”, 再判断P1是否等于“0X7E”, 即“+”号键, 是则执行“加1”操作[3], 否则如果P1为“0X7D”则执行“减1”操作, 然后将数据转换成BCD码调用液晶显示时间程序将DS1302调整时间的结果显示在液屏上。液晶显示时间函数主要实现第一行显示年月日和星期的功能, 其中, 显示星期用“switch”语句实现, 第二行显示时间的功能, 显示时间和日期时, 先输入显示地址命令, 再将数据显示在液晶上, 例如显示小时, 调用数组元素“LcdWriteData ('0'+TIME[2]/16) ;//取高四位的LcdWriteData ('0'+ (TIME[2]&0x0f) ) ;//取低四位的值”进行显示, 再次按下“=”键则恢复计时功能。

  2.2 矩阵按键的设计

  由于计算器输入数字和切换模式需要很多按键, 若用独立按键会占用大量I/O口资源, 所以采用矩阵按键来实现, 用P1口读取控制的按键输入, 其中高四位接矩阵按键的四行, 低四位接矩阵按键的四列。矩阵按键程序编写, 主要包括按键驱动函数、按键消抖和按键扫描函数, 最后在液晶上输出显示按键操作后的结果。在按键扫描函数里, 令第一列为低电平, 然后再清P1口低四位, 判断高四位的哪一位是“0”进而确定哪一行按下, 通过给P1口一次赋值“0XFE”, “0XFD”, “0XFB”, “0XF7”依次设置四列为低电平。依据硬件电路设计, 通过“switch (key) ”语句, 分别与“case 0xe0”、“case 0xd0”、“case 0xb0”和“case 0x70”相比较, 确认第一列的三行数字是否为“1”、“2”、“3”, 如果语句“if (num==0||num==1||num==2) ”为真则输入数据, 否则如果“if (num==3) ”为真则, 执行语句{flag=1;fuhao=1;}, 读取符号, 并且通过“LcdWriteData (0x30+dat1[num]) ;”语句在液晶上以字符格式显示出来[4]。

  同理, 类似于第一列按键判断, 消抖后确认按键是否有动作, 最终确定按键状态, 即按下还是弹起, 依次读取第二、三、四列数据。注意, 当给P0口赋值0XF7时, 执行第四列时按下“0”键显示字符“0”, 按下“NC”键时, LCD1602清屏。按下“/”键进行除法运算, 按下“=”键进行获取运算结果, 并将数据依次左移显示。

  2.3 DS1302时钟显示

  DS1302时钟程序主要包括单片机向时钟芯片写地址和数据模块、单片机读取地址和数据模块以及初始化模块。

  初始化模块主要是利用数组设置时间初值, 禁止写保护, 主要代码如下:“if ( (i&0x80) !=0) //判断是否写保护{DS1302SingleWrite (7, 0x00) ;//给寄存器地址写入“0X00”, 撤销写保护允许写入数据for (i=0;i<7;i++) //设置默认初始时间{Ds1302Write (WRITE_RTC_ADDR[n], TIME[n]) ;}}”。

  写操作主要是从单片机向DS1302写入数据和命令。依据DS1302单字节写操作时序, 将8位地址命令和数据传送到DS1302通信总线上[5]。主要通过“for (n=0;n<8;n++) {DSIO=addr&0x01;addr>>=1;SCLK=1;_nop_ () ;SCLK=0;_nop_ () ;}”语句实现8位地址命令传送, 在数据上升沿时, DS1302读取数据。同理, 可以编写8位数据传送程序, 注意, 数据位是低位在前, 逐位移出, 先输出该位数据, 然后拉高时钟再拉低时钟, 完成一位的操作, 最后确保释放IO引脚[6]。

  读操作包括读寄存器地址和读数据, 读地址时, 先使能片选信号, 然后发送读寄存器指令, 最后再释放总线, 返回值即为读到的字节, 通过“for (n=0;n<8;n++) //读取8位数据{dat1=DSIO;//从最低位开始接收;dat= (dat>>1) | (dat1<<7) ;SCLK=1;_nop_ () ;SCLK=0;//DS1302下降沿时, 放置数据_nop_ () ;}”实现由DS1302通信总线上读取一个字节功能。

  2.4 DS18B20温度显示程序的设计

  DS18B20温度显示主要包括获取存在脉冲模块、写字节操作模块、读字节操作模块、启动转换模块和读取转换温度值模块。

  获取存在脉冲程序编写是依据DS18B20的“1-wire”总线检测脉冲存在时序, 先拉低总线500μs (480μs-960μs) , 然后拉高总线延时60μs, 进行获取存在脉冲, 注意由于DS18B20时序时间短, 所以在操作前先关中断, 等待存在脉冲结束后再重新使能中断。

  写字节模块是低位在先, 依次移出8位, 每写入一位数据之前先把总线拉低1μs, 然后从最低位开始写入一个数据, 延时60μs后, 拉高DS18B20通信引脚, 释放总线。

  读字节操作模块也是低位在先, 依次采集8位, 先将总线拉低1μs, 然后释放总线, 延时6μs等待数据稳定, 从最低位开始读取数据, 主要通过“bit=DSPORT;byte= (byte>>1) | (bit<<7) ;”语句来实现该功能, 读取完一位等待48μs再接着读取下一个数据。

  启动转换模块实现启动一次DS18B20温度转换功能, 首先要获取DS18B20的存在脉冲, 然后执行跳过ROM和温度转换命令, 语句为, “Ds18b20WriteByte (0xcc) ;Ds18b20WriteByte (0x44) ;”最后“return”返回检测是否转换成功。

  读取转换温度值模块进行读取DS18B20转换温度值, 通过返回值检测是否读取成功操作, 主要调用获取存在脉冲函数, 执行跳过ROM、启动温度转换读取温度命令, 然后读取温度值, 读取温度值时先读低字节, 再读高字节, 最后将两个字节合并成16位数, 返回温度值。在读取温度转换函数“int Ds18b20ReadTemp () ”中, 由“{tml=Ds18b20ReadByte () ;tmh=Ds18b20ReadByte () ;temp=tmh;temp<<=8;temp|=tml;return temp;}” (“temp”为16位数据, 定义为“int”型) 语句实现读取温度值并将数据返回的功能。

  2.5 LCD1602液晶显示程序的设计

  液晶显示设计主要包括写指令、写数据和液晶初始化设计。

  写指令时先声明LCD1602的8位数据引脚、使能端和读写引脚, 将“RS”设置为低电平, “R/W”设置为低电平, 再将指令码送给LCD1602的“D0-D7”, 利用函数等待数据稳定后, 将原来是低电平的使能端拉高保持一段时间再拉低, 确保高脉冲。由于用到延时, 写入速度较慢所以可以不进行忙位检测。同理, 将“RS”设置为高电平[7], 把数据“dat”送给LCD1602的“D0-D7”可实现单片机向LCD1602写一个字节数据的功能。

  LCD1602的初始化, 通过写入指令实现开显示、开显示不显示光标、写一个指针加1整屏不移动、清屏和设置数据指针起点功能。分别写入指令码“0X38”、“0X0C”、“0X06”、“0X01”和“0X80”。

  第三章 Proteus仿真与实物制作

  将调试好的程序下载到Proteus仿真图中, 如图2所示。

  图2 多功能计算器仿真图

  单片机的P2口的高三位分别连接液晶的数据/命令选择端“RS”、读/写选择端“RW”和使能信号“E”, P0口8位依次和液晶的8位数据位相接[8], 为了调整合适的对比度, 液晶的3脚接10K的电位器;矩阵按键与P1口的8位相接, 可进行按键操作判断;P3.4、P3.5和P3.6分别连接DS1302的双向通信引脚I/O、使能引脚/RST和时钟信号引脚SCLK, 进行实时时钟显示;P3.7连接温度传感器DS18B20的“1-Wire”总线, 将检测到的温度转换成数字信号显示在液晶上[9]。根据绘制的Proteus仿真原理图进行实物电路的制作调试, 电源采用USB接口, 使用方便, 为了确保断电数据不丢失, 用纽扣电池作为备用电池保证DS1302的正常工作, 如图3所示。

  图3 多功能计算器实物图

  第四章 总结

  该多功能计算器由STC89C52单片机作为主控芯片实现计算与温度和日期显示功能, 可进行长整型范围内的7位数字的四则运算, 通过按键输入数据, 进行模式切换和时间调整设置, 采用LCD1602液晶显示信息, 比数码管显示更加稳定, 没有闪烁, 显示内容丰富[10], 通过软硬件检测与调试验证该产品是一款可行性强、较为实用的多功能计算器。

  致谢(略)

  参考文献

  [1]彭棣.基于单片机的多功能计算器的设计与实现电气工程自动化[J].山东工业技术, 2017 (2) :189.
  [2]李广兴.基于STC12C5A60S2单片机的带时间和温度显示的多功能计算器设计[J].通讯世界, 2015 (10) :235-237.
  [3]胡代洲, 康翠, 杨守良.无显示屏多功能计算器设计研究[J], 重庆文理学院学报, 2013 (5) :55-58.
  [4]吴立勇, 丁作文.基于Android系统的手机计算器的设计与实现[J], 电子技术, 2014 (4) :58-60.
  [5]刘巧平, 李平, 周斌.基于STC89C51单片机的实用计算器设计[J], 信息技术, 2016 (11) :121-126.
  [6]王丽琴, 史航.基于单片机的数字式计算器设计[J], 现代制造技术与装备, 2015 (11) :86-87.
  [7]韩光江, 孙鹏, 何梦雪, 等.基于STC15F2K61S2的计算器设计[J], 科技与创新, 2015 (5) :101.
  [8]雷红华, 沈鸿星.基于C51单片机的电子计算器设计[J].煤炭技术, 2013 (4) :187-189.
  [9]宋慧超.基于STC 89C52的计算器设计与仿真[J].科技创新导报, 2015 (10) :159-160.
  [10]吴芳琴.基于单片机的简易计算器设计[J].电子世界, 2015 (19) :53-54.

  附录(略)

  (如您需要查看本篇毕业设计全文,请您联系客服索取)

相关内容
相关标签:单片机毕业设计
好优论文定制中心主要为您提供代做毕业设计及各专业毕业论文写作辅导服务。 网站地图
所有论文、资料均源于网上的共享资源以及一些期刊杂志,所有论文仅免费供网友间相互学习交流之用,请特别注意勿做其他非法用途。
如有侵犯您的版权或其他有损您利益的行为,请联系指出,论文定制中心会立即进行改正或删除有关内容!