单片机综合实验 - 04 | 键盘、数码管与点阵管实验

51汇编:LED点阵与键盘按键------2019年寒假休息在家看书 吐槽 用C51控制这两个内容都挺简单,用汇编的话。。。。。也一样吧。 让LED点阵显示0 检测键盘按键 按键控制LED点阵 阅读详情

一、实验目的和任务

1、掌握80C51单片机矩阵键盘的构成原理和软件编程。

2、掌握80C51单片机数码管动态显示原理和编程。

3、掌握80C51单片机LED点阵的构成原理和软件编程。

二、实验原理简介

ZSC-1实验箱为MCU1配置了2*8矩阵键盘、8位LED数码管、8*8LED点阵管等人机对话设备,相关电路如下图所示。为提高口线利用率,单片机P0口分时用作矩阵键盘的行扫描口、数码管的段码口以及点阵管的列驱动口,P2.2、P2.1、P2.0与74HC138译码器及2片74HC240反相驱动器相配合,用作数码管的位码口和点阵管的行驱动口。

P3.4、P3.5用于读取矩阵键盘的列状态,P2.3、P4.4的作用为:P2.3=1时,数码管和点阵管均关闭显示,P2.3=0而P4.4=1或0时,数码管或点阵管开通显示。

三、实验内容和步骤

1、在8个数码上顺序显示0-7八个数字。程序代码如下所示:

#include <reg52.h>  

unsigned lettern[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 

void delay(int n)
{
	int i;
	int j;
	for(i=0; i<n; i++)
		for(j=700; j>=0; j--);
}

void display(unsigned char *dis,unsigned char n) 
{   
  unsigned char i,x;  
  for (i=0;i<n;i++)  
  { 
    P2=i;   
    x=*dis;   
    dis++;   
    P0=~lettern[x];               
    delay(500);  
  } 
}  

void main(void) 
{   
  unsigned char  dis[8]={0,1,2,3,4,5,6,7};  
  while(1)  
  {   
    display(dis,8);  
  }    
} 

2、用8*8LED点阵循环显示0-9。程序代码如下所示:

#include <reg52.h> 

sfr P4 = 0xC0; 
sfr P4SW = 0xBB; 
sbit P44=P4^4;  
unsigned char code led88n[16][8]= 
{  
	{0x00,0x18,0x24,0x24,0x24,0x24,0x18,0x00}, //'0' 
	{0x00,0x08,0x18,0x08,0x08,0x08,0x1C,0x00}, //'1'  
	{0x00,0x18,0x24,0x04,0x08,0x10,0x3C,0x00}, //'2' 
	{0x00,0x3C,0x08,0x10,0x08,0x04,0x24,0x18}, //'3' 
	{0x00,0x08,0x18,0x28,0x28,0x3C,0x08,0x08}, //'4' 
	{0x00,0x3C,0x20,0x38,0x04,0x24,0x18,0x00}, //'5' 
	{0x00,0x18,0x20,0x38,0x24,0x24,0x18,0x00}, //'6' 
	{0x00,0x3C,0x04,0x08,0x10,0x10,0x10,0x00}, //'7' 
	{0x00,0x18,0x24,0x24,0x18,0x24,0x24,0x18}, //'8' 
	{0x00,0x18,0x24,0x24,0x1C,0x04,0x24,0x18}, //'9' 
	{0x0C,0x12,0x12,0x12,0x1E,0x12,0x12,0x00}, //'A' 
	{0x0E,0x09,0x09,0x0E,0x09,0x09,0x09,0x0E}, //'B' 
	{0x00,0x1C,0x20,0x20,0x20,0x20,0x1C,0x00}, //'C' 
	{0x0E,0x1C,0x12,0x12,0x12,0x12,0x1C,0x00}, //'D' 
	{0x00,0x1E,0x10,0x1E,0x10,0x10,0x1E,0x00}, //'E' 
	{0x00,0x1E,0x10,0x10,0x1E,0x10,0x10,0x00}, //'F' 
};  

void delay(int n)
{
	int i;
	int j;
	for(i=0; i<n; i++)
		for(j=700; j>=0; j--);
}

void display88(unsigned char *chs)  //显示8*8LED点阵 
{   
	unsigned char i;  
	P44=0;   
	for(i=0;i<8;i++)  
	{   
		P0=~chs[i];             //每行值   
		P2=i;           //第几行   
		delay( 1 );   
		P2=0xff;  
	}   
	P44=1; 
}  

void main(void) 
{   
	unsigned char  dis[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};  
	char i; 
	unsigned int j;  
	P4SW|=0x10;         //将P44设为IO  
	while(1)  
	{   
		for(i=0;i<16;i++)    
			for(j=0;j<100;j++)     
		        display88(led88n[dis[i]]);  
  }  
}  

3、从矩阵键盘获得按键值,对0-9的值同时用数码管和LED点阵进行显示。

#include <reg52.h>     

sbit P34=P3^4;     
sbit P35=P3^5;     
sfr P4 = 0xC0;     
sfr P4SW = 0xBB;  
sbit P44=P4^4;   
unsigned lettern[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 
unsigned char code led88n[16][8]= 
{  
	{0x00,0x18,0x24,0x24,0x24,0x24,0x18,0x00}, //'0' 
	{0x00,0x08,0x18,0x08,0x08,0x08,0x1C,0x00}, //'1'  
	{0x00,0x18,0x24,0x04,0x08,0x10,0x3C,0x00}, //'2' 
	{0x00,0x3C,0x08,0x10,0x08,0x04,0x24,0x18}, //'3' 
	{0x00,0x08,0x18,0x28,0x28,0x3C,0x08,0x08}, //'4' 
	{0x00,0x3C,0x20,0x38,0x04,0x24,0x18,0x00}, //'5' 
	{0x00,0x18,0x20,0x38,0x24,0x24,0x18,0x00}, //'6' 
	{0x00,0x3C,0x04,0x08,0x10,0x10,0x10,0x00}, //'7' 
	{0x00,0x18,0x24,0x24,0x18,0x24,0x24,0x18}, //'8' 
	{0x00,0x18,0x24,0x24,0x1C,0x04,0x24,0x18}, //'9' 
	{0x0C,0x12,0x12,0x12,0x1E,0x12,0x12,0x00}, //'A' 
	{0x0E,0x09,0x09,0x0E,0x09,0x09,0x09,0x0E}, //'B' 
	{0x00,0x1C,0x20,0x20,0x20,0x20,0x1C,0x00}, //'C' 
	{0x0E,0x1C,0x12,0x12,0x12,0x12,0x1C,0x00}, //'D' 
	{0x00,0x1E,0x10,0x1E,0x10,0x10,0x1E,0x00}, //'E' 
	{0x00,0x1E,0x10,0x10,0x1E,0x10,0x10,0x00}, //'F'
};    

void delay(int n)  
{   int i;   
    int  j;   
    for(i=0;i<n;i++)     
      for(j=700;j>=0;j--);   
}

unsigned char getkey(void)
{
	P0 = 0x00;
	if(P34 == 1 && P35 == 1)
		return 0xFF;
	delay(10);
	
	P0 = 0xfe;
	if(P35 == 0)	return 0;	// K0
	if(P34 == 0)	return 8;	// K8
	
	P0 = 0xfd;
	if(P35 == 0)	return 1;	// K1
	if(P34 == 0)	return 9;	// K9
	
	P0 = 0xfb;
	if(P35 == 0)	return 2;	// K2
	if(P34 == 0)	return 10;	// KEYESC
	
	P0 = 0xf7;
	if(P35 == 0)	return 3;	// K3
	if(P34 == 0)	return 11;	// KEYENTER
	
	P0 = 0xef;
	if(P35 == 0)	return 4;	// K4
	if(P34 == 0)	return 0xF1;// KEYF1

	P0 = 0xdf;
	if(P35 == 0)	return 5;	// K5
	if(P34 == 0)	return 0xF2;// KEYF2

	P0 = 0xbf;
	if(P35 == 0)	return 6;	// K6
	if(P34 == 0)	return 0xF3;// KEYF3

	P0 = 0x7f;
	if(P35 == 0)	return 7;	// K7
	if(P34 == 0)	return 0xF4;// KEYF4

	return 0xFF;
}

void display88(unsigned char *chs)  //显示8*8LED点阵     
{          
  unsigned char i;         
  P44=0;          
  for(i=0;i<8;i++)     
  {    
    P0=~chs[i];     //每行值    
    P2=i;           //第几行    
    delay(1);    
    P2=0xff;   
  }   P44=1;   
}       
  
void main(void)  
{   
  unsigned char ch1,ch=0;   
  unsigned char x[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};   
  P4SW|=0x10;         //将P44设为IO   
  while(1)   
  {    
    ch1=getkey();    
    if(ch1<10) ch=ch1;    
    if(ch<10)    
    {     
      display(&x[ch],1);     
      display88(led88n[ch]);   
     }      
   }   
} 

8051单片机矩阵键盘扫描与数码管动态显示技术解析 本文深入解析8051单片机矩阵键盘扫描与数码管动态显示技术。详细介绍了硬件连接、防抖处理、扫描算法及动态刷新原理,通过代码示例展示如何实现高效的输入输出控制,为嵌入式开发提供实用解决方案。 阅读详情

相关推荐

单片机实验4 矩阵键盘应用

单片机实验4 矩阵键盘应用 #include<reg51.h> #define KeyBoard_Value P3 //键盘接口 #define LED_ShowPort P0 //数码管接口 #define KeyBoard_ROW01 0xfe //第一行初始化值 #define KeyBoard_ROW02 0xfd //第二行初始化值 #define KeyBoard_ROW03 0xfb //第三行初始化值 #define KeyBoard_ROW04

qq_51873795的博客 896

51单片机双机通信实验——甲机矩阵按键输入乙机数码管显示

一、实验目的 单片机A发送矩阵键盘输入自己学号后8位,单片机B接收后用8位数码管动态显示。 二、实验原理 矩阵键盘原理 行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。 数码管动态显示原理 动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位

qq_45828663的博客 1万+

51单片机STC89C52 矩阵键盘数码管显示

WELA BIT P2.7 DULA BIT P2.6 DIOLA BIT P2.5 FM BIT P2.3 ORG 0000H SETB DIOLA MOV SP,#0E0H LOOP0: LCALL key_Scan JZ LOOP0 LCALL DELAY20MS LCALL key_Scan JZ LOOP0 MOV P1,A LCALL Smg HERE

Embedded Travel 5470

3x3矩阵按键显示,c,一个7段数码管

根据课本(单品机及原理)4x4矩阵该得

qq_58128133的博客 2387

基于51单片机C语言——学习矩阵键盘和数码管 以及 实现矩阵键盘键值实现8位数码管显示键值和LED灯闪烁

运用了矩阵键盘赋予相对应的16进制数1.矩阵键盘S16用来转换模式模式一:在8位数码管上显示按下的键值模式二:按下对应的键位,则LED闪烁对应的次数

Wang2869902214的博客 9766

AIOps探索 | 如何用大模型构建高效运维知识及智能问答平台(1)

好久没有分享AIOps相关干货了,最近大模型这么火,而且我们有客户已经基于大模型构建了知识及智能问答平台,需要在运维领域结合使用场景进行应用。为此,楼主从头到尾声梳理了一遍大模型在运维领域构建知识及智能问答平台的应用场景、技术实现,总结出来供大家一同探索,希望对大家理解和运用大模型有一定帮助~

智能运维及数据中台探索 2807

【单片机实验】矩阵键盘

实验五 矩阵键盘 一、实验目的 1、掌握矩阵键盘的硬件电路原理和软件编程方法;2、掌握利用数码管显示矩阵键盘键值的编程方法。二、实验说明 本实验提供了一个4X4小键盘,开始先将4行置一,4列置零,判断是否有键按下,如果有键按下,则逐列判断。键值判断方法:行*4+列,在有键按下后,要有一定的延时,防止键盘抖动。 三、实验内容及步骤 内容:程序功能按下矩阵键盘单元键盘,静态显示单元数码管显示对...

weixin_34233856的博客 1788

开源DIY | 打造会“听”会“走”的智能移动垃圾桶

本文详细介绍了如何利用Arduino和超声波传感器打造一款会“听”会“走”的智能移动垃圾桶。通过开源硬件和简单编程,实现声控移动和自动避障功能,适合创客爱好者和家庭DIY。项目成本控制在200元内,涵盖硬件搭建、电路连接和核心功能实现,是入门级机器人制作的理想选择。

weixin_33670713的博客 228

实验五 键盘按键与数码管显示(汇编与微机原理)

每个数码管有8个笔段,按逆时针方向依次称为a段、b段、c段、d段、e段、f段、g段、dp段,8个段接收来自外部的一个8位二进制数(D7—D0),并且笔段a 对应数据位D0……(例:要显示数字0,则笔段a、b、c、d、e、f 都必须点亮,笔段g、h不应该点亮,8个段接收的值应该是11000000,数据D0--D7就应该是11000000(0C0H),让段码端接收11000000它就会显示0)。C端口工作在方式0输入状态,其中的PC0、PC1控制键盘的第一、第二行行值的读入。按键松开时显示上一次的按键值。

长风破浪 3270

杂货店商品数据集挖掘关联规则实验

(2)选择事务集中前100条事务,选择合适的支持度阈值,使用Apriori算法和FP-growth算法挖掘频繁项集(推荐使用mlxtend包的apriori和fpgrowth函数),并对比apriori算法和fpgrowth算法的时间复杂度;(比如用户1000在2015年3月15日对应的事务为{‘sausage’,’whole milk’,’semi-finished bread’,’yogurt’}),然后按照用户ID递增,时间递增的方式对事务进行排序;7. 排版工整自洽,图表标题准确(10分)

m0_62500122的博客 1441

视觉辅助RIS波束追踪:用摄像头“看见”用户,实现毫秒级波束对准

在无线通信领域,波束成形技术是提升高频段信号覆盖与质量的核心手段,其原理是通过调整天线阵列的相位,使信号能量在特定方向相干叠加,形成高增益定向波束。这项技术的价值在于能有效克服高频信号路径损耗大、穿透性差的瓶颈,广泛应用于5G/6G、毫米波通信及室内定位等场景。然而,传统波束追踪依赖信道估计或波束扫描,存在训练开销大、实时性差的问题。本文聚焦于一种创新解决方案:将计算机视觉与可重构智能表面(RIS)相结合。通过摄像头直接感知用户位置,并利用RIS快速重构反射波束方向,实现了近乎零开销、毫秒级延迟的波束追踪,

weixin_33552698的博客 620

基于单片机的矩阵键盘与数码管显示实验实践

在本次实验过程中,遇到了诸如理解代码逻辑和硬件连接等问题。但通过查阅资料、反复调试和实践,逐步攻克了这些难关。通过这次实验,对 8051 微控制器编程有了更深入的理解,编程和硬件调试技能得到了显著提升。同时,也深刻认识到调试工具在排查问题中的重要性,以及代码注释和模块化设计对于程序可读性和可维护性的关键意义。未来,可以通过增加更详细的注释、优化延时处理算法以及增强用户交互功能,进一步提升程序的健壮性和友好性。最后附上完整的实验源代码,方便大家参考学习:ORG 0000HAJMP MAIN。

swcq_的博客 1328

中小企业办公网络配置综合实验华为设备(NAT+策略路由+OSPF+VLAN)

组网需求: 1、PC1、2、3、4均可以访问internet的lo0:8.8.8.8 2、PC1、PC4通过电信ISP访问internet;PC2、PC3通过联通ISP访问internet; 需求分析: 1、internet路由器模拟公网,8.8.8.8模拟公网IP;电信ISP、联通ISP路由器模拟电信和联通运营商;出口路由为企业出口路由器;这四个路由器直连链路之间运行ospf,配置动态路由,实现互通; 2、出口路由与三层交换直连链路运行ospf,动态同步路由信息; 3、出口路由器内网端口配..

A soul tortured by desire 7123

51单片机汇编语言实验(六)-----8255键盘与显示设计(附参考代码及注释)

   本系列共6篇文章,本文作为本系列的六篇文章,介绍实验六 :8255键盘与显示设计,本系列文章基于Dais-52PRO实验箱。 一、实验目的:    掌握8255外接键盘与数码管显示的设计 二、实验设备:    PC计算机一台,Dais-52PRO+实验系统一套。 三、实验内容:    8255键盘与显示设计 四、 8255键盘与显示设计    1、实验原理:    本实验使用8255的PA7到PA0控制数码管字形口、PB5到PB0控制数码管字位口,同时PB4到PB0作为键盘扫描口、PC3~PC0

慕羽★的博客 1万+

从0玩转Mamba神经网络:理论+实战的保姆级教程

Mamba神经网络是一种基于状态空间模型(SSM)的高效序列处理架构,相比Transformer具有更快的推理速度和更低的内存消耗。本文提供从理论到实践的完整指南,详细讲解Mamba的工作原理、与Transformer的差异,并给出基于PyTorch的文本分类实战示例。教程包含环境配置、数据处理、模型搭建、训练评估全流程,展示了Mamba在IMDb情感分析任务中的应用。文章还探讨了Mamba的性能优势及进阶方向,为开发者提供了探索这一新兴技术的实用指南。通过阅读本文,读者可以快速掌握Mamba的核心概念并上

FJN110的博客 312

告别 DEFINE VIEW:CDS View Entity 迁移全景实战(报表迁移 + ADT 向导 + 避坑清单)

CDS迁移的关键要点与策略 CDS DDIC-based View已被标记为废弃,迁移到CDS View Entity成为必要。迁移面临的主要挑战包括激活成本、命名约束和依赖风险。ABAP 7.57及以上版本必须优先处理,否则将积累技术债务。 迁移方式主要有两种: 报表路线:适合渐进式迁移的On-Premise项目 ADT向导:适合云环境批量迁移 关键注意事项: 必须提前检查SQL View依赖关系 金额/数量字段需要显式引用单位/货币字段 建议按使用场景分批迁移 最佳实践是结合报表进行系统盘点,再通过AD

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 208

矩阵键盘实现两位动态数码管的显示

同理,第二,三,四行都像第一行这样子来操作,最后返回KeyNumber的值,这里的Delay函数起到消影的作用。在第一个数码管显示中,这里的dula=1,接通段选位,给段选位输入段选位的值,再dula=0将其锁存起来。再wela=1接通位选,P2=0XFE,是把第一个数码管接通,存入P2的值,再wela=0,保存P2的数值到十位数。由上图,我是将P1口的第四位来控制行的开关,再由P1的高四位来控制列的开关,当行列同时输入0导通时,该开关被按下并接通。我也是新手小白,若哪里有错,还请大佬指点一下。

weixin_73863912的博客 4900

Android 14.0 Launcher3定制化之最近任务的全部清除由左边移到下边显示

在最近14.0的系统rom产品开发中,在Launcher3的定制化开发中,在最近任务列表中,发现点击recents最近任务键后 显示的全部清除按键在左边 由于是横屏的产品显示在左边不太合理 所以要求显示在下边比较合理,所以要从Launcher3的显示流程来解决这个问题

安卓兼职framework和app工程师的博客 763

51单片机用数码管做的简易计算器

利用矩阵键盘控制数码管显示数字及其计算结果

weixin_61655145的博客 8234

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【单片机基础实验】AT89C51 | 红绿灯 | 流水灯 | 单数码管 | 八位数码管显示 | 八位数码管显示学号 | 独立按键 | 矩阵键盘 | 外部中断 | 10秒秒表 | 时分秒 | 串口通信

【单片机基础实验】AT89C51 | 红绿灯 | 流水灯 | 单数码管 | 八位数码管显示 | 八位数码管显示学号 | 独立按键 | 矩阵键盘 | 外部中断 | 10秒秒表 | 时分秒 | 串口通信

Akaxi的博客 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

51单片机数码管显示历史键值

51单片机数码管显示历史键值TGU想说的话单片机程序设计实验目的实验内容实验原理矩阵键盘数码管动态显示实验环境实验代码 想说的话 这个单片机实验要求是我的同学把别人的设计要求发给我,让我帮忙做一下,但是做着做着发现自己设计的方案行不通,到现在原因也不知道在哪,只能是又想了一种方案。 方案是在按下键盘时,将按下的键值所对应的共阳值写入对应的数组中,在显示时在P0口(数码管段选口)写入刚存储完成的数组,该数组在未按下时所有数值均为 0xff (不显示)。 和最一开始的方案是相似的,但是我至今也没想明白最一开始的

thcsyzx的博客 2917

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

CH451 点阵LED显示模块

  ➤01 CH451S 数码管驱动及键盘控制芯片 CH451 CH451 是一个整合了数码管显示驱动和键盘扫描控制以及μP 监控的多功能外围芯片。CH451 内置 RC 振荡电路,可以动态驱动 8 位数码管或者 64 只 LED 发光管,具有 BCD 译码、闪烁、移位等功能;同时还可以进行 64 键的键盘扫描;CH451 通过可以级联的串行接口与单片机等交换数据;并且提供上电复位和看门狗等监控功能。 ▲ CH451S 芯片和使用功能框图 1.特点 ● 内置大电流驱动级,段电流不小于 25mA,

TSINGHUAJOKING 4229

单片机键盘扫描显示实验c语言,单片机汇编实验四: 扫描键盘及LED显示实验

实验要求利用P0口与行列式键盘接口,编写键盘扫描程序,把按键输入的键码,显示在数码管上//This is the fourthprogramof the homework//The date:2013/3/1 The author:WQORG 0000HSJMP MAINMAIN:MOV DPTR,#TABLEMOV R1,#00HSETB P2.6MOV P0,#00HCLR P2.6SETB ...

weixin_42490521的博客 2457

基于单片机的HC-SR04超声波模块测距仪设计(数码管显示)

用单片机实现;用C语言编程;硬件电路板布局合理;用数码管显示器显示;距离测量范围是:10cm----100cm;误差小于8%;超过测距量程并报警;通过按键调节测距范围。

qq_31569699的博客 1万+

【51单片机实验四 定时器实验】中断和定时器控制led和数码管

51单片机汇编实验四 定时器

qq_65174983的博客 2993
上一篇: 单片机综合实验 - 03 | 音乐门铃设计
下一篇: 单片机综合实验 - 05 | 简易电子钟设计
嵌入式逍遥
嵌入式逍遥 领域专家: 嵌入式与硬件开发技术领域 领域专家: 嵌入式与硬件开发技术领域
博客等级 码龄9年 7万+粉丝 237原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式逍遥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值