At89c51单片机键盘扫描和显示程序

发布者:数字舞者最新更新时间:2016-03-25 来源: eefocus关键字: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
 
 ;<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<  
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                       ;下一位码
 
 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

;*******************************************************************************************
                   
                     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

关键字:At89c51  单片机  键盘扫描  显示程序 引用地址:At89c51单片机键盘扫描和显示程序

上一篇:按键的C51源程序
下一篇:使用1602液晶显示和PS/2键盘的示例

推荐阅读最新更新时间:2024-03-16 14:48

安森美的安全蓝牙低功耗微控制器创行业高能效纪录
RSL15扩展安森美的蓝牙低功耗赋能的方案阵容,以创新的智能感知功能增强安全性和处理能力 2021年11月30日—领先于智能电源和智能感知技术的安森美(onsemi),今天发布全新安全的RSL15无线微控制器(MCU),提供业界最低的功耗。RSL15具有蓝牙低功耗无线联接功能,解决互联工业应用对安全日益增长的需求,且无需牺牲功耗。 为了验证能效,RSL15通过了嵌入式微处理器基准联盟(EEMBC)的认证。该组织的ULPMark™-CoreMark基准项目衡量嵌入式系统中使用的微控制器在工作时的能效。RSL15现在以60.5分的 性能 得分在同类产品中领先。在计算MCU深度睡眠能效的ULPMark-CoreProfil
[网络通信]
安森美的安全蓝牙低功耗<font color='red'>微控制器</font>创行业高能效纪录
Cygnal在片系统单片机的特点与应用
1引言   Cygnal C8051F系列是全集成混合信号在片系统单片机。 在片系统随着半导体生产技术的不断发展,集成度越来越高,对嵌入式控制技术可靠性要求也越来越高而产生的新概念,即 SOC(System on chip),意思是整个系统都高度集成在一个 芯片上。本文通过使用 Cygnal C8051F000制作一个智能故障分析报警仪,介绍Cygnal C8051Fxxx系列全集成混合信号在片系统单片机的特点,及其在智能仪器中的一般使用方法,和一 些需要注意的问题。   故障分析报警仪的原理:从 4个不同点采集电压和电流数据,综合分析,得出故障的原因 和位置,相应地提供报警、显示和电路切除。 2C8051F00
[单片机]
单片机基础学习(一):存储结构
51单片机存储器有数据存储器,程序存储器。数据存储器是为正在运行的程序提供空间,即RAM,程序存储器为程序的存储提供空间,即ROM,刚开始的单片机一旦写入程序就不能修改,后来出现了紫外线擦除(EPROM)、电擦除(EEPROM)和FlashROM。   数据存储器又分片内数据存储器和片外数据存储器,标准的51单片机的片内数据存储器容量是256字节,地址编码00H~FFH,其中高128字节(80H~FFH)是SFR区(特殊功能寄存器),低128字节(00H~7FH)用户数据存储器,在这个128字节中,00H~1FH这32个字节分给了4组工作寄存器(R0~R7),20H~2FH这16字节是位寻址区,30H~7FH这80字节是用户RA
[模拟电子]
MCU系统中如何利用ADC技术进行数据采集
使用MCU的系统设计人员受益于摩尔定律,即通过更小封装、更低成本获得更多的丰富特性功能。嵌入式系统设计人员和MCU厂商关心数据采集系统的三个基本功能:捕获、计算和通信。理解全部功能对设计大有帮助,本文将主要关注数据采集系统的捕获阶段。 捕获 复杂的混合信号MCU必须能够从模拟世界中捕获某些有用信息,并且能够把连续时间信号转换成离散的数字形式。模数转换器(ADC)是完成这项任务最重要的MCU外设,因此ADC的性能往往决定何种MCU适用于何种应用。MCU也能够通过各种串行或并行数字I/O接口捕获来自外部信号源的数字形式的系统信息。 计算 信号捕获后,需要对捕获数据进行某些处理;有时仅仅需要模数转换,但是更多情况下必须要对捕获的数据样本
[电源管理]
在<font color='red'>MCU</font>系统中如何利用ADC技术进行数据采集
AT89C51单片机应用于数控车床切削力测量
 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。   本文就介绍了应用AT89C51单片机测量数控车床切削力的新方法,重点阐述了单片机实现连续自动采样、A/D转换、标度变换及数据处理的方法。   1 问题的提出   在数控车床的加工中,切削力的测量甚为重要。通过对切削力的测量可以分析与研究数控车床各零部件、机构或结构的受力情况和工作状态,验证设计和计算结果
[单片机]
<font color='red'>AT89C51</font><font color='red'>单片机</font>应用于数控车床切削力测量
Linux系统下烧录单片机(转)
有些人说Linux下怎么开发单片机程序? 我们学得都是在Windows下的开发工具和烧录工具。其实这只是中国的情况,中国大都是用Windows系统的。所以我们也只接触到Windows下的开发工具。在国外,许多大牛是不用Windows的。那么,他们如果要做单片机怎么办?肯定没问题的,Linux也有许多的单片机和嵌入式的开发工具。下面,我以51系列单片机为例,介绍一下怎么使用Linux系统玩单片机。 首先,说一下我的硬件和软件情况。 硬件: 一台笔记本、 一个51单片机开发板(这个在网上有很多卖,也就150左右的价格)。单片机芯片有两块 :一块是Atmel的AT89S52, 另一块是STC的STC89C52RC 。USB转串口线一
[单片机]
基于51单片机太阳能风能风光互补路灯控制器设计
一.硬件方案 本设计由STC89C52单片机电路+太阳能电池板电路+风机发电电路+锂电池充电保护电路+升压电路+稳压电路+光敏电阻电路+4位高亮LED灯电路+2档拨动开关电路+电源电路设计而成。 二.设计功能 (1)采用风机和太阳能电池板给锂电池充电,具有充电保护电路和稳压电路。 (2)锂电池升压到5V给单片机和附属电路供电。 (3)路灯用4个高亮LED灯模拟。 (4)用光敏传感器测光线亮度,低于设置值时自动开启灯光。 (5)路灯控制分为手动模式和自动模式,手动模式下可以自由的开灯或者关灯,自动模式下通过光敏电阻根据光照强度自动控制灯的开和关。 三.设计原理图 (1)原理图主要采用AD软件进行设计,如图: (2)PCB
[单片机]
基于51<font color='red'>单片机</font>太阳能风能风光互补路灯控制器设计
用c语言编写单片机流水灯程序详解
用C语言编写的单片机流水灯程序的软件和硬件,可以让八个LED轮流点亮,每个灯点亮和熄灭时间均为1秒。是利用单片机I/O口控制外部设备的简单例子。当然,在你掌握了本程序后,完全可以充分发挥你的想象,改变一下程序内容和灯的接法(比如用光耦驱动继电器来控制霓虹灯),做出各种变化非凡的大型灯光广告牌。 一、硬件电路 因为电路用单片机控制,所以电路非常简洁。其电路原理图见下图,印制板图如下图所示。 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口,我们这里只用到Pl口,共8个引脚。图中Cl、R9组成典型的上电复位(即在加电时单片机复位)电路,XTAL、C2、C3与AT89C2051片内振荡电路组成时钟振荡器
[单片机]
用c语言编写<font color='red'>单片机</font>流水灯<font color='red'>程序</font>详解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved