搜索
bottom↓
回复: 3

请教马老师:扫描矩阵式键盘,实物不能通过?付汇编程序

[复制链接]

出0入0汤圆

发表于 2005-8-29 00:05:37 | 显示全部楼层 |阅读模式
马老师,这是一个4*4的键盘扫描程序,主要功能是如果是按下“0”号键盘,则红灯亮十次,如果是按其他按键,则是绿灯亮相应的次数;我将下面的程序下载到该芯片后,结果是不管按哪个按键,都是绿灯亮一次,再按连灯都不亮了。不知程序在哪里出错?                  include"1200def.inc"

.equ    row1=3

.equ    row2=2

.equ    row3=1

.equ    row4=0

.equ    col1=7

.equ    col2=6

.equ    col3=5

.equ    col4=4

.equ    green=0

.equ    red=1

.equ    int=2

.def    temp=r16

.def    key=r17

.def    status=r21

.def    fine=r18

.def    medium=r19

.def    coarse=r20



;***************** EEPROM Code *********************************



.eseg   

.org    0

.db    1,2,3,15,4,5,6,14,7,8,9,13,10,0,11,12



;***************** Progam Code *********************************



.cseg

.org    0

      rjmp    reset

      rjmp    scan_reti

      reti

      reti

reset:

      ldi    temp,  0xfb

      out    ddrd,  temp

      ldi    temp,  0x30

      out    mcucr,  temp

      ldi    temp,  0x40

      out    gimsk,  temp

      sbi    acsr,  ACD

main: cli

      ldi    temp,  0xf0

      out    ddrb,  temp

      ldi    temp,  0x0f

      out    portb,  temp

      ldi    temp,  0x07

      out    portd,  temp

      sei

      sleep

      rcall    key_scan

      rcall    flash

      ldi    temp,  0x40

      out    gimsk,  temp

      rjmp    main



;****************** interrupt Program **************************



scan_reti:

      in    status,  sreg

      clr    temp

      out    gimsk,  temp

      out    sreg,  status

      reti

;****************** Scan Program *******************************

key_scan:

      sbis    pinb,  row1

      rjmp    row_1

      sbis    pinb,  row2

      rjmp    row_2

      sbis    pinb,  row3

      rjmp    row_3

      sbis    pinb,  row4

      rjmp    row_4

      rjmp    no_key

row_1:

      ldi    key,  0

      rjmp    row_end

row_2:

      ldi    key,  4

      rjmp    row_end

row_3:

      ldi    key,  8

      rjmp    row_end

row_4:

      ldi    key,  12

row_end:

      ldi    temp,  0x0f

      out    ddrb,  temp

      ldi    temp,  0xf0

      out    portb,  temp

      rcall    settle

      sbis    pinb,  col1

      rjmp    col_1

      sbis    pinb,  col2

      rjmp    col_2

      sbis    pinb,  col3

      rjmp    col_3

      sbis    pinb,  col4

      rjmp    col_4

      rjmp    no_key

col_1:

      ldi    temp,  0

      rjmp    col_row_deal

col_2:

      ldi    temp,  1

      rjmp    col_row_deal

col_3:

      ldi    temp,  2

      rjmp    col_row_deal

col_4:

      ldi    temp,  3

      rjmp    col_row_deal

no_key:

      rjmp    key_scan

col_row_deal:

      add    key,  temp

      ldi    temp,  0xf0

      out    ddrb,  temp

      ldi    temp,  0x0f

      out    portb,  temp

      ret

;**********************************************************

flash:

      out    eear,  key

      sbi    eecr,  eere

      in    temp,  eedr

      tst    temp

      breq    zero

grflash:

      cbi    portd,  green

      rcall    delay

      dec    temp

      brne    grflash

      ret

zero:

      ldi    temp,  10

zero1:

      cbi    portd,  red

      rcall    delay

      sbi    portd,  red

      rcall    delay

      dec    temp

      brne    zero1

      ret

delay:

      ldi    coarse,  15

delay1:

      clr    medium

      clr    fine

delay2:

      dec    fine

      brne    delay2

delay3:

      dec    medium

      brne    delay3

      dec    coarse

      brne    delay1

      ret

settle:

      ldi    temp,  255

settle1:

      dec    temp

      brne    settle1

      ret

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2005-9-3 20:52:52 | 显示全部楼层
马老师这几天没有来嘛?

自已顶一下了

对了,我已经知道错误在哪里啊!

高兴!!!
头像被屏蔽

出0入0汤圆

发表于 2005-9-4 14:40:57 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2005-9-4 15:27:23 | 显示全部楼层
哦,谢谢阿莫的提醒,我现在就把原因告之。

上面程序之所以实物不能通过,是由于延时时间太短了。

其实这个错误也是我的一个朋友提醒了我,要不然的话,够我去揣摩的了

唉。。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-29 08:56

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表