AT89C2051在点钞机外接显示屏中的应用

大家知道,led数码管是由发光二极管作为显示字段的数码型显示器件。在数码管显示器中,一般情况下都采用动态扫描式显示方式。所谓扫描式,就是当有多个七段(带小数点的为八段)显示器要显示时,将其各个对应引脚接在一起,也就是说,所有的a段接在一起,b段也接在一起,依此类推。而利用各七段显示器的共阳(或共阴)极来确定哪一个七段显示器要显示。这样做的目的有二:(1)省电;(2)节省输出端口。
本电路利用89c2051的端口与数码的笔段接法为: p1.1-->c; p1.2-->d; p1.3-->e; p1.4-->b; p1.5-->a; p1.6-->f; p1.7-->g ,且三只数码管的笔段a~g又是并联在一起的。数码管的公共端com分别由 p3.5-->v1; p3.4-->v2; p3.7-->v3 进行控制。
这里顺利说明下,不知大家是否看出,无论是段码还是公共端都没有按相应引脚顺序来接,这是为什么?在实际应用中,经常会有这种接法,这就是我们通常所说的“硬件加密”法。
p1口是一8位双向i/o口,口引脚p1.2~p1.7提供内部上拉电阻。p1.0和p1.2要求外上接电阻。尤其是p1.0这个上接电阻接在了点钞机的主控板上,若要单独使用这个显示器,不要忘了加只5.1k的上接电阻。
工作原理说明如下:
1. 欲使led1显示器亮,需使v1导通,即p3.5=0,同理led2欲亮时,p3.4=0。
2. 由于共享a~g引脚,因此一次只能导通一个晶体管,否则会同时显示相同的数字。
3. 利用视觉暂留原理,v1~v3导通频率16次/秒以上,注意频率太低数字会闪烁,频率太高数字会模糊变暗。
4. 显示数字时,须先送ffh到p1口关闭led,再送显示码,否则容易造成视觉干拢。
5. r3为限流电阻。
通过对led数码管显示原理的了解,再明确一下点钞机外接显示器的功能,你到银行存过款吗?当你将钱交给营业员后,她就会将钱放入点钞机,一是为了点数,二是为了鉴别钞票的真伪。同时在柜台上会有一个显示器,使你也能看到你的钱币的张数。这个显示器就是点钞机的外接显示器,它显示的数字与点钞机是同步的,清点完之后,数字会一直保持,待下一次清点时,它会自动复位,从零开始进行累加。
数码管的显示原理和点钞机外接显示器的基本功能搞清楚之后,下面我们就开始编写程序。
外接显示器共阳led数码管显示段编码
点钞机外接显示屏的汇编程如下:
;* ====================================================== *
;* 华信单片机工作室 卢先生sktlch@126.com
;* 整理验证日期: 2002/09/23
;----------------------------------------------------------
;* 标题:点钞机外接显示屏,程序名:file = wjd961_4.asm
;* 描述: 采用at89c2051芯片,晶振频率:11.0592mhz。
;* 初始状态数码管个位显示“0”,最大计数范围: 999。
;* =======================================================*
led1 bit p3.5 ;百位(定义数码管公共端)
led2 bit p3.4 ;十位
led3 bit p3.7 ;个位
jsq0 data 50h ;脉冲计数单元高字节
jsq1 data 51h ;脉冲计数单元低字节
led01 data 3ah ;显示段码缓存器(百位)
led02 data 3bh ;十位
led03 data 3ch ;个位
r31 data 1fh
;* =======================================================*
org 0000h
ajmp start ;复位转主程序
org 0003h ;int0的入口地址
ajmp int0_p32
;* ------------------------------------------------------ *
; 主程序0030h单元开始
;* ------------------------------------------------------ *
org 0030h ;跳过中断向量区
start: mov r0,#7fh
clr a
del1: mov @r0,a ;预使用单元清0
djnz r0,del1
main: mov sp,#60h ;60h为栈顶位置初值
setb it0 ;置int0为边沿触发方式
mov ip,#00000001b ;置int0为高优先级中断
mov ie,#10000001b ;int0开中
mov jsq0,#0 ;计数单元清0
mov jsq1,#0
clr p1.0 ;注意在软件模拟调试时,p1.0由于没有接外部上拉电阻,
;拉低后就无法拉高。为了调试方便可选取89c51进调试
;*--------------------------------------------------------*
dir0_0:jb p1.0,dir0_01 ;当点钞机已复位,但未放入纸币,所以未中断
mov r31,#28
acall delay2 ;延时1ms,去抖动
jb p1.0,dir0_01
setb p1.0
mov jsq0,#0 ;复位信正确,计数单元清0
mov jsq1,#0
acall hb2 ;将16进制数转换为bcd码
acall thif0 ;调用转换显示值子程序
dir0_01:
mov a,led01 ;当十位,百位数=0时,将其屏蔽
cjne a,#81h,dir0_02
mov led01,#0ffh
mov a,led02
cjne a,#81h,dir0_02
mov led02,#0ffh
dir0_02:
setb led1 ;led1位显示停
mov p1,led03 ;读个位段码
clr led3 ;led1个位显示
mov r31,#42
acall delay2 ;延时2ms
setb led3 ;led1位显示停
mov p1,led02 ;读十位段码
clr led2 ;led2十位显示
mov r31,#42
acall delay2
setb led2 ;led2十位显示停
mov p1,led01 ;读百位段码
clr led1 ;led1百位显示
mov r31,#42
acall delay2
ajmp dir0_0 ;不断循环显示,并等待中断
;* =======================================================*
;计数复位时,点钞机主程序会先给出一个复位信号,并持续一段时间,
;接着给出计数脉冲
int0_p32:
push acc ;保护现场
push dph
push dpl
jb p1.0,int0_01 ;当点钞机
mov r31,#28
acall delay2 ;延时1ms,去抖动
jb p1.0,int0_01
setb p1.0 ;清除复位信号
mov jsq0,#0 ;复位信正确,计数单元清0
mov jsq1,#0
int0_01:
mov a,jsq1 ;低字节计数单元加1
inc a
mov jsq1,a
jnz int0_02
inc jsq0 ;当有进位时,高字节单元加1
int0_02:
acall hb2 ;将16进制数转换为bcd码
acall thif0 ;调用转换显示值子程序
pop dpl ;恢复现场
pop dph
pop acc
reti ;中断返回
;* =======================================================*
;* 双字节十六进制整数转换成双字节bcd码整数
;入口条件:待转换的双字节十六进制整数在r6、r7中。
;出口信息:转换后的三字节bcd码整数在r3、r4、r5中。
;影响资源:psw、a、r2~r7堆栈需求: 2字节
;* =======================================================*
hb2:
mov r6,jsq0 ;高字节单元送入r6
mov r7,jsq1 ;低字节单元送入r7
clr a ;bcd码初始化
mov r3,a
mov r4,a
mov r5,a
mov r2,#10h ;转换双字节十六进制整数
hb3:
mov a,r7 ;从高端移出待转换数的一位到cy中
rlc a
mov r7,a
mov a,r6
rlc a
mov r6,a
mov a,r5 ;bcd码带进位自身相加,相当于乘2
addc a,r5
da a ;十进制调整
mov r5,a
mov a,r4
addc a,r4
da a
mov r4,a
mov a,r3
addc a,r3
mov r3,a ;双字节十六进制数的万位数不超过6,不用调整
djnz r2,hb3 ;处理完16bit
ret
;* =======================================================*
;* 将bcd码解压后,转换为十进制显示符
;* =======================================================*
thif0: ;将压缩bcd码解压(因最大数为999,所以[r3]=0)
mov a,r5 ;取数据
anl a,#0fh ;屏蔽高4位,取出低4位
mov 32h,a ;存个位
mov a,r5
swap a ;交换
anl a,#0fh
mov 31h,a ;存十位
mov a,r4 ;取数据
anl a,#0fh ;屏蔽高4位,取出低4位
mov 30h,a ;存百位
;* 将bcd转换为十进制显示符
mov dptr,#tabd ;置数码表首址
mov r0,#30h ;置显示数首址
mov r1,#led01 ;置字段码暂存器首址
mov r2,#03h ;置循环数
thif1:
mov a,@r0 ;取显示数
movc a,@a+dptr ;读字段码
mov @r1,a ;存字段码
inc r0 ;修改显示数地址
inc r1 ;修改字段码暂存器地址
djnz r2,thif1 ;判断循环是否结束
ret
tabd:
db 81h,0edh,43h,49h,2dh,19h ;共阳字段表,0~5显示符
db 11h,0cdh,01h,09h ;6~9显示符
;* =======================================================*
;* 延时子程序
delay2:
l2: push r31
l3: djnz r31,l3
pop r31
djnz r31,l2
ret
end
;* =======================================================*

阻容降压X2安规电容有什么作用?
部分产品毛利率
可穿戴设备的猜想:硬件业长出互联网大脑
小米MIX 2S:骁龙845处理器,AI功能是重点
!销售/回收HP53181A频率计HP53181A现货!小兵
AT89C2051在点钞机外接显示屏中的应用
[原创] On Semi RSL10蓝牙5多协议无线片上系统(SoC)解决方案
华为鸿蒙系统官网下载链接地址
介绍在CubeMx+VS下创建STM32项目的两种方式
钢管表面缺陷检测系统的关键技术和应用设计
微软在华正式公布Win10 VR头显的PC最低配置
大族激光新能源锂电市场的密集收获期
戴姆勒坚定电气化的信心 计划系统地推进公司向电气化转型
印度对苹果公司不太待见,欧盟也紧接着向苹果发难
中国出2nm芯片了吗 2nm芯片是哪个国家的专利
深耕电力市场 比特驱动瓦特 赋能绿色节能 | 美格智能无线通信模组助力智能电网建设
物联网通信标准分类 谁最有优势?
寒武纪AI新品发布 目标3年后要占中国芯片市场30%份额
国美已经从电器零售向家和生活整体方案提供商进行转变
小米电视5 Pro将在12月12日正式开售该电视搭载了远场语音技术