第一范文网 - 专业文章范例文档资料分享平台

基于51单片机的简易计算器设计

来源:用户分享 时间:2025/5/29 12:03:20 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

第三章 主要器件简介

这就是 LCD 显示的基本原理。 字符的显示 用 LCD 显示一个字符时比较复杂,因为一个字符由 6×8 或 8×8 点阵组成,既要 找到和显示屏幕上某几个位置对应的显示 RAM 区的 8 字节, 还要使每字节的不同 位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成 某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以 让控制器工作在文本方式, 根据在 LCD 上开始显示的行列号及每行的列数找出显 示 RAM 对应的地址,设立光标,在此送上该字符对应的代码即可。 汉字的显示 汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码(一 般用字模提取软件),每个汉字占 32B,分左右两半,各占 16B,左边为 1、3、 5……右边为 2、4、6……根据在 LCD 上开始显示的行列号及每行的列数可找出 显示 RAM 对应的地址, 设立光标, 送上要显示的汉字的第一字节, 光标位置加 1, 送第二个字节,换行按列对齐,送第三个字节……直到 32B 显示完就可以 LCD 上得到一个完整汉字

3.2.2矩阵按键

键盘是单片机系统中最常用的人机对话输入设备,用户通过键盘向单片机输入数据或指令。键盘控制程序需完成的任务有:监测是否有键按下,有键按下时,在无硬件去抖的动电路时,应用软件延时方法消除按键抖动影响;当有多个键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。

矩阵按键扫描程序是一种节省IO口的方法,按键数目越多节省IO口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。本程序中,如果检测到某键按下了,就不再检测其它的按键,这完全能满足绝大多数需要,又能节省大量的CPU时间。

本键盘扫描程序的优点在于:不用专门的按键延时程序,提高了CPU效率,也不用中断来扫描键盘,节省了硬件资源。另外,本键盘扫描程序,每次扫描占用CPU时最短,不论有键按下或者无键按下都可以在很短的时间完成一次扫描。

本键盘扫描子程序名叫key,每次要扫描时用lcall key调用即可。

9

第三章 主要器件简介

10

第四章 计算器系统设计

第四章 计算器系统设计

4.1 计算器硬件电路设计

8051单片机一片,4*4键盘一个,4位共阳极的七段数码管一个,连线和电阻和开关若干。8051单片机的P2口作键盘口,其中P2.4-P2.7为键盘扫描输出线,P2.0-P2.3为键盘扫描输入线。键盘由4*4共16个按键组成,10个数字键(由0-9组成)5个运算符号(加减乘除等于)组成,1个清除键(作用相当于整体复位)。4个数码管用于显示当前数值的千,百,十,个,采用动态显示方式,P1口接4个数码管的七段,P0口分别接4个数码管的公共端,P1口输出数码管的字形码,P0口输出数码管的字位码。

4.2计算器程序设计

4.2.1存储单元分配

30H单元:数值个位显示单元;31H单元:数值十位显示单元;32H单元:数值百位显示单元;33H单元:数值千位显示单元;23H单元:第一操作数存储单元;24H单元:第二操作数存储单元;25H单元:键值暂存单元;27H单元:清除键状态;34H-37H单元:结果数据转换暂存单元;38H-39H单元:结果高低8位暂存单元;R5单元:操作数计数单元;R4单元:操作数数值位数计数单元;R3单元:运算符号存储单元。

4.3系统总框图:

4.4程序源代码:

这是main 函数 #include \#include \#include \#include \ uchar

key_val,key_return,count;

11

第四章 计算器系统设计 long ori_num,aim_num,x,y,z,lastentbuf; uchar ent_buf=0;

uchar

aim_buf[8],ori_buf[8];

void main() { init_lcd1602(); init_int0(); lastentbuf=5; while(1) {

key_scan(); display();

}

Lcd1602.c文件 #include #include \

#define dats

P0

#define uchar unsigned char #define uint unsigned int

sbit RS=P2^5; //LCD1602的寄存器选择 sbit RW=P2^6; //LCD1602的读/写控制 sbit E=P2^7; //DS1602的启动

//向1602写数据 void write_data(uchar dat) { RS=1;

12

搜索更多关于: 基于51单片机的简易计算器设计 的文档
基于51单片机的简易计算器设计.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c5jiss01beh6trx01669y_4.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top