今天是: 创芯电子 | 发布供求信息 | 设为首页 | 加入收藏  

首页   解密专栏   设计应用    初学实战   解决方案   下载中心   厂商信息   供求信息   资讯快递   联系我们
热点推荐
单片机芯片解密器原理
IC设计工程师需求剧增 芯..
2007年中国汽车电子市场发..
单总线单片机多机通讯系统..
红外遥控密码锁的设计与实..
IC产业下半年有何看点
MSP430F413设计的智能遥控..
嵌入式Linux系统中的快速启..
利用双电机控制技术简化高..
射频卡水控终端的设计

图片链接






 首页 >> 初学实战 >> 按键控制
单片机键盘扫描显示程序设计
时间: 2008-6-17

来源:   作者:

本实例单片机键盘扫描和显示程序采用单片机:AT89C51来实现功能。

;******************************************************
;* 名称:kbd
;* 功能:从键盘中读入按键值,存入寄存器A:r*4+c
;* 输入:
;* 输出: A=按键值
;******************************************************
org 0000h
ljmp main


org 0200h
main:
init:
MOV 60H,#10h
MOV 61H,#10h
MOV 62H,#10h
MOV 63H,#10h
wait:  
acall keyscan                       ;有键按下,转定按键位置扫描
acall disp
sjmp         wait

       
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;                       p1.7p1.6p1.5p1.4                              1110
;                         |         |         |         |                 R*4       
; p1.3         ----------/|--/|--/|--/|---------|===|----vcc
; p1.2         ----------/|--/|--/|--/|---------|===|----vcc
; p1.1         ----------/|--/|--/|--/|---------|===|----vcc
; p1.0         ----------/|--/|--/|--/|---------|===|----vcc          1111
;                         |         |         |         |   
keyscan:
mov R1,#0efh         ;0efh,依次扫描p1.4,p1.5,p1.6列
mov R2,#0         ; 列数
ks_colum:
mov P1,R1         ;
nop
nop
mov A,P1         ;从p1口取得行信息

orl a, #0f0h

mov r3,#0                             ;行数
ks_row:
rrc a

jnc ks_wait_release
inc r3  
cjne r3,#5,ks_row
  
ks_this_colum_none:          ; 该列无键按下
mov A,R1         ; 扫描下一列
rl A
mov R1,A

inc r2
cjne r2,#4,ks_colum

error:        clr A          ; 所有列无键按下,返回0
jmp ks_end
ks_wait_release:
mov p1,#0fh

mov a,p1
orl a,#0f0h
cpl a
jnz ks_wait_release
ks_decode:
mov a,r3
rl a
add a,r3                         
add a,r2                              ;r3*3+r2
add a,#1h

set_disp_bit:
mov r0,#63h         ;放入显示缓冲
mov @r0,a

ks_end:
ret

;<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<led显示部分

disp:
disp_number:
push acc
MOV R0,#60H           ;显示数码存放在0x60~0x63(BCD形式)
MOV R3,#0feH                     ;把显示位码取到R3
display_scan:
MOV A,@R0
MOV R2,A           ;把显示数码取到R2

ACALL display_a_bit
ACALL delay

MOV A,R3
RL        A                             ;下一位码

MOV R3,A

INC R0;下一显示数码
CJNE R0,#64H,display_scan
pop acc
ret

;*******************************************************************************************
;r2=显示数据 r3=显示位(0feh,0fdh,0fbh,0f7h分别指第1,2,3,4位)
led_digit1 equ 0feh
led_digit2 equ 0fdh
led_digit3 equ 0fbh
led_digit4 equ 0f7h

display_a_bit:
MOV DPTR,#table
next:
MOV A,R2
MOVC A,@A+DPTR
MOV P0,A                         ;取段码:TABLE1+x

MOV A,R3
MOV P2,A                         ;输出位码

RET
;*******************************************************************************************
delay:
MOV R6,#04H
d1:     
MOV R7,#248
DJNZ R7,$
DJNZ R6,d1
RET                              ;延迟 1us+4*(1us+2us*248+2us)+2us=1999us,约2ms

;*******************************************************************************************
;                      8       
;                            p0.0~p0.7----/-------------------------------------
;                                         |                    |                  |              |
;                                     ===a===               =======            ======           ======  
;                                   f|             | b           |             |          |            |         |            |  
;                                     ====g===             |=======|          |======|         |======|  
;                                   e|             | c           |             |          |            |         |            |  
;                                     ===d== oh             ====== o           ===== o          ===== o
;                                          |                  |                    |                  |
;                            p2.0----------/------------+--------------+------------+
;
;                                p0: ghfedcba
;                                    xxxxxxxx (请确认连接),如共阴数码管:0000 0110,显示1.
table:        ;        '0'        '1'        '2' '3'        '4' '5'        '6' '7' '8' '9',共阴
db 3fh,06h,5bh,4fh,66h;0-4
        db 6dh,7dh,07h,7fh,6fh;5-9
        db 77h,7ch,39h,5eh,86h;A,b,C,d,E
db 00h;关数码管
end

 
上一篇: 单片机数字时钟设计程序
下一篇: 单片机动态扫描显示接口程序设计
打印】 【关闭

【资讯版权声明】
 1. 凡本网站注明“来源:单片机基地”的所有作品,版权均属于单片机基地,转载请注明“来源:单片机基地”。
 2. 本网转载自其它媒体的信息,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。
 3. 未经本站明确许可,任何网站不得非法盗链软件下载连接及抄袭本网站原创内容资源。
 4. 违反上述声明者,本网将追究其相关法律责任。谢谢!

网站地图  广告服务  版权声明  友情连接  关于我们 
Copyright©2005-2008 单片机基地,创芯电子技术 版权所有
技术支持:0755-21976338 82701553 E-mail:mcubase@163.com QQ:719659769
致力于单片机解密,IC解密,芯片解密加密技术研究,提供芯片解密服务,仅供合法研究学习用途
基地资源仅供学习参考,部分内容来源于网络,如侵犯您的版权,请通知本站即撤
ICP备案序号:粤ICP备06120039号