4)51下外部总线结构的小计算器(C和一部分汇编参考)

本文档介绍了如何使用C语言和部分汇编实现51单片机外部扩展RAM的LCD1602小计算器。详细讲解了LCD1602的初始化、数据传输、显示位置设定等关键步骤,通过汇编子程序展示了LCD驱动细节,并提供了C语言的等效实现。此外,还讨论了LCD的地址线作为外部总线的使用方法和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   好久好久没有写博客了~唉~最近弄得东西都是实物没什么研究可写,全部就是调试啊调试啊~还是写一点东西吧。

最近做了一个基于51外部扩展RAM的小计算器。

 

 这是仿真SAMPLE的图

用的是标准的总线结构,锁存器用的74L373,RAM用的是6264,液晶是1602,使能用74LS00来选择。最后用7407作为了

驱动。

本来他们公司给的代码说的是C51,实际上核心的确是C,不过LCD和键盘用的都是汇编。由于正在略微研究下外部扩展就拿来做出来顺便把代码都改成C的。LCD的驱动完全是总线结构,根据硬件连接来写代码。下面把LCD的代码汇编和C都放上来

我把前面汇编的注释掉了~

详细看代码就可以了,其中汇编的关键在MOVX的使用上,时序图可以查的到,可以研究一下~其中把LCD的地址当做寄存器来看待

每次先选好使用再给数据,就可行了~

主要说C

首先说明~C语言是我从以前的非总线式结构里面改写的。因此有些函数没有用到。

C语言的关键在这里就是

#define LCMDW  XBYTE[0x8001]  // 数据口
#define LCMCW  XBYTE[0x8000]  // 命令
#define LCMBY       XBYTE[0x8002] //忙检测

XBYTE是在absacc.h库里的一个定义地址的工具

其中有~#define XBYTE ((unsigned char volatile xdata *) 0)

其中根据硬件连接高2位的使能打开正是80H的地址,低2位的地址根据功能(A0,A1)定义不同的地址

然后在输出的时候协商

LCMDW=*****;就可以实现MOVX的功能了,产生外部存储的时序来啦~

液晶怎么使用就看数据手册吧,1602的手册可是很全很很全,网上的例子更是很多很多(把上面代码稍微改动就可以直接使用lcd了哈)

接下来给出SAMPLE里我一点没动的核心,计算器的算法实现

 

这个由于里面的注释很详细,我也稍微加了一两句,就不做解释了,懒人~不过其中有个设定从右侧开始的。。我设定竟然不好用

当然了,从右侧自然好看~从左侧是可以用的呵呵(我已经写在注释里面啦~)。很怀疑软件有点不太支持哈~

最后是键盘的扫描,对于这个东西,用汇编实在是蛮痛苦的。呵呵~不过就像学长说过,用习惯了都是一样的!

同样前面的汇编注释掉了

键盘的扫描实现~没有用上拉下拉电阻~建议使用上拉下拉的电阻。做实物时总是不一样的,比如P0口总线可以不上拉

不过事实说,自己做的时候不上拉是很不好用的~没办法,自己做的工艺太差啦。

好了~大概就是这么多。计划下一个是以前的一个小超声波东东。串口只能再等等啦,虽然很是重要的东西。

(*^__^*) 嘻嘻……


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值