数码管显示键盘符号
在数码管上动态显示矩阵键盘数字
/**********************************************程序功能:在数码管上动态显示矩阵键盘数字***********************************************/#include <msp430x14x.h>typedef unsigned char uchar;typedef unsigned int uint;#define LED_IN_USE 8//共阴极数码管7位段码:0--fuchar scandata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; uchar led_Buf[LED_IN_USE]; // LED显示缓冲区,// 存放要显示数据uchar led_Ctrl;//记录显示位数的全局变量uchar key_Pressed; //按键是否被按下:1--是,0--否uchar key_val; //存放键值uchar key_Flag; //按键是否已放开:1--是,0--否//设置键盘逻辑键值与程序计算键值的映射uchar key_Map[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};uchar Dispbuf[2];/******************************************************* * 模块初始化*******************************************************/ void init_LED(void){//uchar tmpv;P5DIR = 0xff; //设置P5的IO方向为输出P3DIR |= 0x18; //设置P3.3 P3.4的IO方向为输出P3OUT &= 0xe7;//设置P3.3 P3.4为0,关闭两锁存器P5OUT = 0x00;//设置P5的输出初值led_Ctrl = 0; // led_Ctrl用于控制哪个LED可显示//for(tmpv=0;tmpv<LED_IN_USE;tmpv++)//{ // 初始化缓冲区,可放入主函数//led_Buf[tmpv] = 0;// }}void led_Display(){//P5DIR = 0xff; //设置P5的IO方向为输出//P3DIR |= 0x18; //设置P3.3 P3.4的IO方向为输出//P3OUT &= 0xe7;//设置P3.3 P3.4为0,关闭两锁存器//P5OUT = 0x00;//设置P5的输出初值P5OUT = scandata[Dispbuf[led_Ctrl]]; // 设置显示值P3OUT |= 0x10; // 打开数据锁存器P3OUT &= 0xef; // 关闭数据锁存P5OUT = ~(1 << (led_Ctrl)); // 设置哪只LED显示P3OUT |= 0x08; // 打开控制锁存P3OUT &= 0xf7; // 关闭控制锁存led_Ctrl++;if(led_Ctrl == 2) led_Ctrl = 0; // 设置下一个要显示的LED}/*******************************************函数名称:Init_Keypad功能:初始化扫描键盘的IO端口参数:无返回值:无********************************************/void Init_Keypad(void){P1DIR = 0xf0; //P1.0~P1.3设置为输入状态, P1.4~P1.7设置为输出状态P1OUT |= 0xf0; // P1.4~P1.7输出高电平key_Flag = 0;key_Pressed = 0;key_val = 0;}/********************************************** Check_Key(),检查按键,确认键值*********************************************//*******************************************函数名称:Check_Key功能:扫描键盘的IO端口,获得键值参数:无返回值:无********************************************/void Check_Key(void){uchar row ,col,tmp1,tmp2;tmp1 = 0x80;for(row = 0;row < 4;row++) //行扫描{P1OUT = 0xf0; //P1.4~P1.7输出全1P1OUT -= tmp1; //P1.4~p1.7输出四位中有一个为0tmp1 >>=1;if ((P1IN & 0x0f) < 0x0f) //是否P1IN的P1.0~P1.3中有一位为0{tmp2 = 0x01; // tmp2用于检测出那一位为0for(col = 0;col < 4;col++) // 列检测{if((P1IN & tmp2) == 0x00) // 是否是该列,等于0为是{key_val = key_Map[row * 4 + col]; // 获取键值return; // 退出循环}tmp2 <<= 1; // tmp2左移1位}}}}/*******************************************函数名称:delay功能:延时约15ms,完成消抖功能参数:无返回值:无********************************************/void delay(){uint tmp;for(tmp = 12000;tmp > 0;tmp--);}/*******************************************函数名称:Key_Event功能:检测按键,并获取键值参数:无返回值:无********************************************/void Key_Event(void){uchar tmp;P1OUT &= 0x00; // 设置P1OUT全为0,等待按键输入tmp = P1IN; // 获取p1INif ((key_Pressed == 0x00)&&((tmp & 0x0f) < 0x0f)) //如果有键按下{key_Pressed = 1; // 如果有按键按下,设置key_Pressed标识delay(); //消除抖动Check_Key(); // 调用check_Key(),获取键值}else if ((key_Pressed == 1)&&((tmp & 0x0f) == 0x0f)) //如果按键已经释放{key_Pressed = 0; // 清除key_Pressed标识key_Flag = 1; // 设置key_Flag标识}else{_NOP();}}/********************主函数********************/void main(void){WDTCTL = WDT_ADLY_1_9; // 设置内部看门狗工作在定时器模式,1.9ms中断一次IE1 |= WDTIE; // 使能看门狗中断init_LED();_EINT(); //打开全局中断Init_Keypad();while(1){Key_Event();if(key_Flag == 1){key_Flag = 0;Dispbuf[0] = key_val / 10;Dispbuf[1] = key_val % 10;}}// _BIS_SR(GIE);//_BIS_SR(LPM3_bits + GIE); //CPU进入LPM3低功耗模式,同时打开全局中断//_BIS_SR(CPUOFF+ GIE); //进入LPM0//_BIS_SR(LPM0_bits + GIE); //进入LPM0 }/*******************************************函数名称:watchdog_timer功能:看门狗中断服务函数,在这里输出数码管的段选和位选信号参数:无返回值:无********************************************/#pragma vector=WDT_VECTOR__interrupt void watchdog_timer(void){led_Display();}。
51单片机键盘数码管显示(带程序)
期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。
8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。
2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。
它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。
A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。
RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。
数码管按键显示
洛阳理工学院单片机原理及接口技术课程设计报告题目: 数码管按键显示系别:电气工程与自动化班级: B100410姓名:李奇杰目录第一章设计目的及要求 (1)1.1 设计意义 (1)1.2 设计内容 (1)1.3 设计要求 (1)第二章硬件设计原理与连接 (2)2.1单片机的选择 (2)2.2译码器的选择 (3)2.3数码管的选择 (3)2.4单片机最小系统 (4)2.5硬件原理与仿真连接 (4)第三章汇编程序设计 (5)3.1程序流程图 (5)3.2汇编代码 (5)第四章仿真结果及分析 (6)4.1仿真结果 (6)4.2结果分析 (6)参考文献 (7)附录 (8)第一章设计目的及要求1.1设计意义在单片机的产品设计中,人机交互是超级重要的分,而且随着系统的日趋复杂,和人们对产品的人机交互能力的要求不断提升,常握单片机系统中的人机界面基础设计能力成了学习单片机的基础课程,而4X4键盘的操作和LED数码管的动态显示是人机界面设计的基础内容,把握这些基础设计能力,加深对人机界面的熟悉,同时提高人机界面系统设计能力。
1.2设计内容给4×4 键盘的每一个键概念一个功能,其中把概念为0~9 的键盘称为数字键,把概念成DEL 的键称为删除键,把概念成ENT 的键成为确认键,其他键称为保留键。
若是是数字键按下,把代表数字显示在数码管上:按键按下时,6 位数码管靠右边显示该键的代表数字;继续按键时,已经显示在数码管上的数字左移一名,按键代表的数字显示在最右边的数码管上。
1.3设计要求熟练把握51单片机汇编指令把握51单片机I/O接口的用法与注意事项了解设计步骤与思路用51单片机驱动4X4矩阵键盘编写相应的扫描式键盘驱动程序用51单片机驱动数码管静态显示,并自行搭建驱动电路,注意电流按下按键数码管有相应的显示第二章硬件设计原理与连接2.1单片机的选择选用AT89C51单片机,引脚排列示用意如下:由于咱们选用P0口作为输出口需要注意:当P0输出数据时,写信号加在锁存器的R引脚上,内部总线上的数据通过S脚由锁存器的“!Q”端反相输出到Q2的栅极。
数码管显示字符 ppt课件
数码管显示字符
TCON
IE
IP
硬件查询
INT0 IT0 1
01
T0 INT1 IT1 1
01
T1
RX TX
EX0 1 EA 1 IE0
ET0 1 TF0
EX1 1 IE1
ET1 1 TF1
RI
ES 1
TI
≥1
PX0 1
0 PT0 1
0 PX1 1
0 PT1 1
0 PS 1
0
自
高
然
级
1
优
先
级 中断入口
数码管显示字符
TCON
IE
IP
硬件查询
INT0 IT0 1
01
T0 INT1 IT1 1
01
T1
RX TX
EX0 1 EA 1 IE0
ET0 1 TF0
EX1 1 IE1
ET1 1 TF1
RI
ES 1
TI
≥1
PX0 1
0 PT0 1
0 PX1 1
0 PT1 1
0 PS 1
0
自
高
然
级
1
优
先
级 中断入口
中断源
自
低
0然级优来自先级 中断入口
中断源
SCON
3、TF0(TCON.5),片内定时/计数器T0 溢出中断请求标志。当定时/计数器T0发生 溢出时,置位TF0,并向CPU申请中断。
数码管显示字符
TCON
IE
IP
硬件查询
INT0 IT0 1
01
T0 INT1 IT1 1
01
T1
RX TX
数码管显示数码符号实验报告(含源代码)
微机原理课程设计必做题目设计报告题目数码管显示数码符号学院专业电气工程及其自动化成员杜丽佳指导教师摘要根据题目要求,利用8253、8255等硬件和8086 CPU总线接口,以汇编语言为载体,完成利用中断的数据控制输出的设计,实现将以开关的状态表示的二进制数作为输入,经过数据处理后,最终通过数码管加以显示的功能。
本报告主要完成以下工作:1)简要介绍本设计的前言和要求;2)详细介绍本设计的硬件组成3)详细介绍汇编程序的运行流程;4)介绍步骤和现象。
关键词:数据控制输出数码管显示中断第一章绪论1.1 前言微型计算机原理及接口技术是普通高等教育重要的专业课,是电气类专业的平台课程,具有很强的实践性。
在微机实践的过程中开展必做题,使同学们巩固课本上学到的知识,掌握硬件电路走线的基本方法和规范,软件设计的基本方法和规范,提升同学们的团队精神和动手能力,为把学生培养成为卓越工程师打下良好基础。
《数码管显示数码符号》即为此次微机实践必做题,借助微型计算机实验开发板,通过汇编语言完成用数码管显示通过8255芯片输入的数据的功能。
1.2 题目要求图1 微机系统接口电路七段码显示器采用8255A作为接口,8255A的A端口接八个开关,8255A 的B端口控制数码显示器的阳极(七段码显示器为共阴极接法),利用74LS138作为地址译码器,利用8253定时中断控制。
微机系统接口电路如图1所示。
8253的CNT0和CNT1用来产生方波信号,OUT1连接到8259A中断控制器的IRO2端,通过8259A向CPU请求中断,每一秒中断一次。
在中断服务程序中从A端口输入数据到AL中,如果AL的内容是0EH或0FH,则在数码管上显示“H”(七段码76H),否则将AL的内容加2后输出到数码管上。
(已知8259A中断屏蔽寄存器地址为21H,共阴极显示器的0`F的七段码分别为3FH、06H、5BH、4FH、66H、6DH、7DH、07H、7FH、67H、77H、7CH、39H、2EH、79H、71H、73H。
键盘扫描与LED数码管显示课件
设计温度传感器模块,如 DS18B20,用于获取环境温
度。
编写程序读取温度传感器数 据,并进行处理和转换。
04
05
使用LED数码管显示当前温 度值,如“25℃”。
THANKS
感谢观看
特点
LED数码管具有高亮度、低功耗、寿命长、耐腐蚀等特点,且体积小、重量轻, 易于安装和携带。
LED数码管的应用场景与优势
应用场景
LED数码管广泛应用于各种需要数字 显示的场合,如仪表盘、计时器、遥 控器等。
优势
LED数码管具有高亮度、低功耗、寿 命长等特点,能够提供清晰、稳定的 数字显示,同时价格相对较低,易于 实现大规模生产。
联合应用的常见问题与解决方案
常见问题
键盘扫描可能会出现按键抖动、串扰等 问题;LED数码管显示可能会出现亮度不 均、闪烁等问题。
VS
解决方案
针对按键抖动问题,可以采用软件消抖或 硬件消抖的方法;针对串扰问题,可以增 加隔离电路或采用差分信号传输方式。针 对LED数码管亮度不均问题,可以调整各 段数码管的电流参数;针对闪烁问题,可 以增加刷新频率或采用动态扫描显示方式 。
放相应音符。
01
设计音符键区,包括 do-re-mi等音符按键。
03
使用LED数码管显示当 前播放的音符名称,如
“C”。
05
详细描述
02
编写程序识别按键并播 放相应音符,如播放C
大调音阶。
04
案例四:温度显示系统设计
详细描述
总结词:通过温度传感器获 取温度值,使用LED数码管
显示温度值。
01
02
03
键盘扫描原理
通过逐行或逐列扫描键盘的每个按键 ,检测是否有键被按下。当某个按键 被按下时,相应的行或列电平发生变 化,从而识别出被按下的按键。
数码管显示键盘号
case 8ቤተ መጻሕፍቲ ባይዱ keyno += 12;break;
}
}
//主函数
void main(void)
{
P0 = 0x00;
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0) //扫描键盘获得按键序号
{
key_scan();
}
if(pre_keyno != keyno)
课程名称
单片机原理及应用
实验名称
数码管显示4*4矩阵键盘按键号
实验内容:
按下任意键时,数码管都会显示其按键的序号,扫描程序首先判断按键发生在那一列,然后根据所发生的行附加不同的值,从而得到按键的序号。
实验步骤:
1.根据以下电路图,在Proteus中找到相应元器件并接线。
元器件:AT89C51、button、cap、res、sounder、respack-8、7SEG-COM-BLUE、CRYSTAL,分别放入开关、红色LED灯、电阻。
delayms(1);
//有键按下后,其中一列将变为低电平
i = P1^0x0f;
//判断按键发生在哪一列
switch(i)
{
case 1: keyno = 0;break;
case 2: keyno = 1;break;
case 4: keyno = 2;break;
case 8: keyno = 3;break;
{
P0 = ~disp_buff[keyno]; //显示,共阳极段码取反作为共阴极段码
pre_keyno = keyno;
}
delayms(100);
小键盘按键识别数码管移位显示
微机原理与接口技术课程设计实验报告《微机原理与接口技术》课程设计评分标准1、对课程设计的目的和意义的表述和理解 5分12、总体方案设计 5分3、硬件电路设计:(1)按给定的要求正确的设计出8086最小模式电路图 5分(2)按给定的要求正确的设计出各所需的译码电路图 5分(3)按给定的要求正确的设计出各所需的接口电路图 5分(4)按给定的要求正确的设计出系统硬件电路图 5分4、软件设计:(1)按所设计系统的要求给出正确的程序流程图 5分(2)按给定的要求正确的编写出各接口的初始化程序 5分(3)按给定的要求正确的编写出主程序 10分(4)对所编写的程序有注释说明 5分5、设计报告的书写:(1)阐明了硬件设计的基本原理和设计要求与方法 5分(2)阐明了软件设计的基本原理和方法 5分6、按时完成设计任务 10分7、考勤 5分8、答辩 20分答辩表2小键盘按键识别数码管移位显示设计内容:用系统小键盘输入控制数码管的移位显示。
设计目的:掌握“行扫描”按键识别的原理,掌握行扫描按键识别的编程技术设计要求:3用行扫描技术识别小键盘.将小键盘键入的任意长度的由0—9组成的数字串,采用左移位显示的方法显示任数码管上(仿照移动电话显示屏的显示效果),当小键盘按下F键时,程序结束。
一、课程设计的目的和意义:学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼,它具有动手、动脑,理论联系实际的特点,是培养我们工科大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。
通过这次设计实践能够进一步加深我们对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
二、总体设计方案:(1)在数据段设置两张表,一张是0—9的键值表,一张是0—9的字形编码表。
数码管显示与按键输入技术
第七讲数码管显示与按键输入技术郧阳师专电工电子实验教学中心艾庆生单片机与个人微机(PC机)间的最大区别就是:它追求“小而全”,只有简单的输入和输出部件。
而数码管和按键就是这样的即简单又常用又重要的部件,我们必须熟练掌握。
一、数码管的结构LED(Light Emitting Diode)数码管如图所示:7只或8只发光二极管构成一位数码管,俗称“7段8”或“8段8”,我们以8段8为例来讲解:若8只发光管的阳极接在一起引出的话,称之为共阳极数码管;反之,8只发光管的阴极接在一起引出的话,称之为共阴极数码管。
使用时,数码管各段必须接限流电阻。
数码管的各段有统一的规定,用a、b、…、g、dot定义。
二、数码管的显示代码由于数码管各段排列的特殊性,它所显示的字符与送给它的代码是不一样的。
以共阴极数码管为例,如,送给它代码3FH,将显示字符“0”,送代码06H,将显示字符“1”,…。
下表列出了共阴和共阳数码管所显示字符的代码表。
图二则告诉了如何得到显示代码的方法。
三、数码管的显示技术1.静态显示在任意时刻,每位数码管都有电流流过。
如图3所示,有8位数码管,显示“07-05-12”,每位数码管都有8根引线与专门电路相连,向其提供“段选码”。
它的显示是同时的、稳定的。
其优点是原理简单、编程较易;缺点是引线太多、耗电太大。
2.动态显示参考图4,仍是8位数码管,但它们各自的8根引线并联在一起引出,所以,无论是几位数码管显示,总共只有8根“段选码”引出线;每位数码管的公共端单独引出,构成了8根“位选码”的引出线。
其工作原理如下:设从右往左显示,首先送2的显示代码(即段选码),然后将com0变为低电平,其它为高电平(即位选码),延时1-2ms;其次送1的显示代码,再将com1变为低电平,仍延时1-2ms;以此类推,当最左边数码管的0显示完毕后,这称为扫描了一遍,共需时8-16ms;不断地重复此过程,就叫“动态显示”技术。
单片机课程设计--键盘输入在LED数码管上的显示
东北石油大学课程设计年月日东北石油大学课程设计任务书课程单片机的控制系统课程设计题目键盘输入在LED数码管上的显示专业姓名学号主要内容、基本要求、主要参考资料等主要内容:完成键盘输入在LED数码管上的显示。
基本要求:1.了解 4×4 键盘的工作原理。
2.熟悉 SPCE061A 单片机控制数码管显示的方法。
3.掌握 4×4 键盘的使用方法。
4.掌握 4×4 键盘控制数码管显示的方法。
参考资料:[1]肖洪兵.跟我学用单片机[J].北京:北京航空航天大学出版社,2002.8[2]何立民.单片机高级教程第1版[M].北京:北京航空航天大学出版社,2001.6[3]赵晓安.MCS-51单片机原理及应用[M].天津:天津大学出版社,2001.3[4]李广第.单片机基础第1版[M].北京:北京航空航天大学出版社,1999.5[5]徐惠民.单片微型计算机原理与应用[M].北京:北京邮电大学出版社,1996.2[6] 袁勤勇.嵌入式系统构件[M].北京:北京机械工业出版社,2002.完成期限指导教师专业负责人年月日目录第1章设计的研究背景及目的要求 (1)1.1 研究背景 (1)1.2 设计目的 (1)1.3 硬件选择 (1)1.4 设计内容 (1)第2章设计的基本原理及硬件连接方案 (2)2.1 4X4键盘扫描原理图 (2)2.2 SPCE061A获取4×4键盘键值原理 (2)2.3 硬件连接 (3)第3章软件设计方案 (5)3.1 设计步骤 (5)3.2 设计程序 (6)第4章调试结果与分析 (7)4.1 调试结果 (7)4.2 结果分析 (7)结论与体会 (8)参考文献 (9)附录 (10)第1章设计的研究背景及目的要求1.1 研究背景用单片机驱动LED数码管有很多方法,按显示方式可分静态显示和动态(扫描)显示;按译码方式可分硬件译码和软件译码。
静态显示数据稳定,占用很少的CPU时间。
矩阵键盘按键的数码管显示矩阵,键盘按键的数码管显示
一、矩阵键盘按键的数码管显示1.实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2.实验所用仪器及元器件计算机一台实验板一块电源线一根扁平线一根下载线一根3.实验任务要求设计出4*4矩阵键盘对某一按键按下就在数码管显示一个数字。
按键从左上角到右下角依次为1,2, (16)4.实验原理按键模块原理键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。
同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
键盘键值的获取:键盘上的每一个按键其实就是一个开关电路,当某键被按下时,该按键的接点会呈现0的状态,反之,未被按下时则呈现逻辑1的状态。
扫描信号由row进入键盘,变化的顺序依次为1110-1101-1011-0111-1110。
每一次扫描一排,依次地周而复始。
例如现在的扫描信号为1011,代表目前正在扫描9,10,11,12这一排的按键,如果这排当中没有按键被按下的话,则由column 读出的值为1111;反之当9这个按键被按下的话,则由column读出的值为1110。
根据上面所述原理,我们可得到各按键的位置与数码关系如表所示:1110 1110 1110 1110 1101 1101 1101 1101row1110 1101 1011 0111 1110 1101 1011 0111 column1 2 3 4 5 6 7 8键值row 1011 1011 1011 1011 0111 0111 0111 0111 column 1110 1101 1011 0111 1110 1101 1011 0111键值9 10 11 12 13 14 15 16动态显示原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。
数码管显示4×4矩阵键盘的键盘号(程序解释好了)大作业
数码管显⽰4×4矩阵键盘的键盘号(程序解释好了)⼤作业《单⽚机原理及应⽤课程设计》报告——数码管显⽰4×4矩阵键盘的键盘号专业:电⼦信息科学与技术班级:姓名:学号:指导教师:2012年5⽉15⽇1、课程设计⽬的1.1巩固和加深对单⽚机原理和接⼝技术知识的理解;1.2培养根据课题需要选学参考书籍、查阅⼿册和⽂献资料的能⼒;1.3学会⽅案论证的⽐较⽅法,拓宽知识,初步掌握⼯程设计的基本⽅法;1.4掌握常⽤仪器、仪表的正确使⽤⽅法,学会软、硬件的设计和调试⽅法;1.5能按课程设计的要求编写课程设计报告,能正确反映设计和实验成果,能⽤计算机绘制电路图和流程图。
2、课程设计要求单⽚机的P1⼝的P1.0~P1.7连接4×4矩阵键盘,P0⼝控制⼀只数码管,当4×4矩阵键盘中的某⼀按键按下时,数码管上显⽰对应的键号。
例如,1号键按下时,数码管显⽰“1”, 14号键按下时,数码管显⽰“E”等等。
3、硬件设计3.1 设计思想分析本任务的要求,在课程设计的基础上,添加要求,使设计能够完成当4×4矩阵键盘中的某⼀按键按下时,数码管上显⽰对应的键号。
3.2主要元器件介绍:AT89C51单⽚机 LED数码管 4X4矩阵键盘3.3 功能电路介绍AT89C51单⽚机:控制器。
程序中将单⽚机的引脚置⾼电平低电平,单⽚机通过读取IO引脚的电平,在根据读取的数据去查找数组中相应的按键值,然后在送到数码管也就是P0⼝去显⽰.(51单⽚机通过IO⼝来读取键盘的电平,再通过程序来查找对应的数值,在送到数码管去显⽰)LED数码管 :输出设备4X4矩阵键盘:输⼊设备4、软件设计4.1 设计思想4.3源程序#include#define uchar unsigned char 开始初始化扫描键盘第⼀⾏若有按键按下,显⽰键盘号结束,返回若⽆按键按下扫描键盘第⼆⾏扫描键盘第三⾏扫描键盘第四⾏结束,返回若⽆按键按下若⽆按键按下若⽆按键按下#define uint unsigned intuchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};//定义显⽰段码uchar num,temp;void delay(uchar k)//定义延时函数{uchar i,j;for(i=k;i>0;i--)for(j=110;j>0;j--);}void disp(char num1)//定义显⽰函数{P0=table[num1];//将段码值送⼊P0⼝显⽰}char keyscan()//定义键盘检测函数{P1=0xfe;//给P1⼝送检测信号11111110,即先检测第⼀列有⽆按键被按下(key1~key4)temp=P1;//将检测信号赋给变量temptemp=temp&0xf0;//与11110000相“与”去除低四位检测部分while(temp!=0xf0)//判断是否有按键被按下,即key1-key4有任意按键被按下temp便不等于0xff{delay(5);//按键防抖动延时(时间要求不严格)while(temp!=0xf0)//延时之后再次判断{temp=P1;//进⼊函数说明有按键被按下,再将p1值赋给temp进⾏判断是哪位被按下switch(temp)//利⽤switch函数判断temp值{case 0xee://若P0等于0xee,即11101110,则由判断为0的位被按下即第四位(最低位),则应赋值num为0;num=0;break;break;case 0xbe://同上则num=2num=2;break;case 0x7e://同上num=3num=3;break;}while(temp!=0xf0)//判断按键是否松开,循环判断直⾄按键松开{temp=P1;temp=temp&0xf0;}}}P1=0xfd;//给P1⼝再次送检测信号11111101,来检测第⼆列有⽆按键被按下(key5~key8),以下⼏步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:case 0x7d:num=7;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xfb;//给P1⼝再次送检测信号11111011,来检测第三列有⽆按键被按下(key9~key12),以下⼏步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xeb:num=8;break;case 0xdb:num=9;break;case 0xbb:num=10;break;case 0x7b:}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}}}P1=0xf7;//给P1⼝再次送检测信号11110111,来检测第四列有⽆按键被按下(key13~key16),以下⼏步同上temp=P1;temp=temp&0xf0;while(temp!=0xf0){delay(5);while(temp!=0xf0){temp=P1;switch(temp){case 0xe7:num=12;break;case 0xd7:num=13;break;case 0xb7:num=14;break;case 0x77:num=15;break;}while(temp!=0xf0)temp=temp&0xf0;}}}return num;//⼦函数最后返回num值} void main(){P0=0x00;//清屏delay(5);//延时while(1)//主循环{disp(keyscan());//检测并显⽰}}}5、调试运⾏电路图K=15时的数码管显⽰:6、设计⼼得体会硬件设计⽅⾯,此课题所需的硬件并不负责,只许少量的导线、简单的电路便可以完成。
数码管显示4×4矩阵键盘的键盘号--万意要点
数码管显示4X4矩阵键盘的键盘号学院:物理与电子工程学院专业:自动化班级:13级7班学号:姓名:万意指导教师:马世榜日期:2013年12月31日目录1引言 (1)2设计方案 (2)3硬件设计 (3)3.1AT89S51 (3)3.24*4矩阵式键盘 (6)3.2.1 矩阵式键盘介绍 (6)3.2.2 键盘扫描原理 (7)3.3硬件电路连接 (9)3.4.1 单片机时钟电路 (9)3.4.2单片机复位电路 (10)3.4.3 矩阵式键盘电路 (10)3.4.4 LED数码管显示电路 (10)4软件设计 (12)4.1所用软件简介 (12)4.1.1 Keil (12)4.1.2 Proteus (12)4.2程序流程图 (14)4.3源程序 (15)5电路原理图 (17)参考文献 (18)1引言矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。
单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。
4*4矩阵式键盘采用AT89S51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。
单片机将检测到的按键信号转换成数字量,显示于LED显示器上。
该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。
2设计方案单片机的P1口的P1.0~P1.7连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。
例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。
本论文主要研究单片机控制的键盘识别显示系统,分别对按键信息和显示电路以及软、硬件各个部分进行研究。
主要内容如下:①根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计;② LED实时显示按键信息;③采用软件编程的方法实现按键信息的提取和显示。
矩阵式键盘控制数码管显示
目录
CONTENTS
• 矩阵式键盘工作原理 • 数码管显示原理 • 矩阵式键盘控制数码管显示方案 • 矩阵式键盘控制数码管显示应用 • 矩阵式键盘控制数码管显示常见问题及
解决方案
01 矩阵式键盘工作原理
按键检测方式
直接检测法
通过直接检测按键是否按下,判断按键状态。
间接检测法
按键与数码管显示不匹配
01
总结词
按键与数码管显示不匹配是矩阵式键盘控制数码管显示中 常见的问题之一,表现为按下某个按键后数码管显示的内 容与预期不符。
02
详细描述
这可能是由于键盘编码与数码管显示编码不匹配导致的问题。 例如,按下数字键“1”,数码管却显示字母“A”。
03
解决方案
可以通过调整键盘编码与数码管显示编码的对应关系来解 决这个问题。具体来说,需要检查键盘编码与数码管显示 编码的映射关系,确保它们一一对应。同时,也需要检查 键盘扫描程序和数码管显示驱动程序的实现是否正确。
静态驱动
每个数码管的每个段都由一个独立的 I/O口控制,适用于数码管数量较少 的情况。
动态驱动
通过扫描方式逐个点亮数码管的各个 段,可以节省I/O口资源,适用于数码 管数量较多的情况。
03 矩阵式键盘控制数码管显 示方案
硬件连接方案
矩阵式键盘与微控制器连接
将矩阵式键盘的行和列连接到微控制器的输入/输出端口,以便读取按键状态。
优化显示逻辑
优化数码管显示的逻辑,例如使用动态扫描技术,减少数码管的亮灭时间,提高显示效果。
04 矩阵式键盘控制数码管显 示应用
电子密码锁
总结词
矩阵式键盘控制数码管显示在电子密码锁中应用广泛,能够实现密码输入、显示和安全 验证等功能。
8-键盘+数码管显示
8-键盘+数码管显示#include <hidef.h> #include "derivative.h" /* common defines and macros */ /* derivative-specific definitions */const unsigned char DisplayDecode[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f,//0-9 相当于DB ~0x77,~0x7c,~0x39,~0x5e,~0x79,~0x71,0xbf};//'ABCDEF-'const unsigned char Weima[]={0xf7,0xfb,0xfd,0xfe};int key;/********函数声明************/void key_init();int keyscan();void delay_ms(int time);/*******设置内部上拉*********/void key_init(){PUCR_PUPAE=1; //设置A口内部上拉电阻}/******延时1毫秒程序********/void delay_ms(int time){ int i,j;for(i=400;i>0;i--)for(j=time;j>0;) j--;}/*----------------------------------------键盘扫描程序反转法---------------------------------------*/int keyscan(){unsigned char key;byte temp=0,temp1=0,temp2=0;DDRA=0XF0; //设置高四位为输出,低四位为输入PORT A=0x0f; //取低四位数据//h=PORTA&0x0f;;if((PORT A&0x0f)!=0x0f){delay_ms(20);if((PORT A&0x0f)!=0x0f) //按下去抖{temp1=PORT A&0x0f;DDRA=0X0F; //配置高四位为输入,低四位为输出PORT A=0xf0; //取delay_ms(20);temp2=PORT A&0xf0;while((PORT A&0xf0)!=0xf0);//等待键释放// z=h+l;delay_ms(20);if((PORT A&0xf0)==0xf0) {temp=temp1|temp2;switch(temp){case 0x7e:key=2;break;//0 按下相应的键显示相对应的码值case 0x7d:key=3;break;//1case 0x7b:key=4;break;//2case 0x77:key=5;break;//3case 0xbe:key=6;break;//4case 0xbd:key=7;break;//5case 0xbb:key=8;break;//6case 0xb7:key=9;break;//7case 0xde:key=10;break;//8case 0xdd:key=1;break;//9case 0xdb:key=11;break;//acase 0xd7:key=12;break;//bcase 0xee:key=13;break;//ccase 0xed:key=14;break;//dcase 0xeb:key=15;break;//ecase 0xe7:key=16;break;//fdefault:break;}}}}return key;}/*******主函数***********/void main(void){ int i;key_init();DDRT=0XFF;DDRP=0XFF;while(1){key=keyscan();for(i=0;i<4;i++){PTP=DisplayDecode[key-1];PTT= Weima[i];}}}。
小键盘按键识别数码管移位显示
小键盘按键识别数码管移位显示(一)实验目的掌握“行扫描”按键识别的原理,并掌握行扫描按键识别的编程技术(二)实验内容按硬件接好图接好线路,同行扫描技术识别小键盘,将小键盘键如的任意长度的有0—9组成的数字串,采用左移位显示的方法显示在数码管上(仿照移动电话显示屏的显示效果)当小键盘按下F键时程序结束.(三)相关知识Intel8255A-5是一个为8080.8082和8088微型计算机系统设计的通用I/O接口芯片通过它可以将CPU的总线直接接向外设。
(CPU总是通过接口电路才能与外设连接)并行接口芯片具有以下功能:(1)两个或两个以上的具有锁存器或缓冲器的数据端口;(2)每个数据端口都有与CPU用应答方式交换信号所必需的控制和状态信息,也有与外设交换信息所必需的控制和状态信息;(3)通常每个数据端口还具有能用中断方式与CPU交换信息所必需的电路;(4)选片和控制电路;(5)通常这类接口芯片可用程序选择数据端口,选择端口的传送方向,选择与CPU交换信息的方法等,故片中要有能实现这些选择的控制字的寄存器,它可由CPU用输出指令来写入。
注:8255A的端口A的地址为—218H端口A的地址为—219H控制口的地址为—21BH(四)实验原理a)可以把PB2与小键盘的列线断开,不识别S YDENG8个功能键。
b)在数据段设置两张表,一张是0~9的键值表,一张是0~9的字形编码表,对应关系表如下表所示:(3)在数据段设置一个显示缓冲区,即~BUF+6单元,其中,BUF~BUF+5单元的初值为数码管熄灭的字形码。
程序应将当前的闭合键字形码存入BUF+6单元,随后将BUF+1~BUF+6单元的内容移到BUF~BUF+5单元,再扫描显示BUF~BUF+5单元的内容,从而使数码管显示左移一位。
(3)按键的识别方法如下:键盘一般都是矩阵排列,行和列分别接微机的输出、输入端口,每个键都跨接在某行和某列上,当键按下时,该行和该列短路。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//有键按下后,其中一列将变为低电平
i = P1^0x0f;
//判断按键发生在哪一列
switch(i)
{
case 1: keyno = 0;break;
case 2: keyno = 1;break;
case 4: keyno = 2;break;
case 8: keyno = 3;break;
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
//上次按键和当前按键序号,该矩阵中序号范围0-15,16表示无按键
unsigned char pre_keyno = 16,keyno = 16;
//延时函数
void delayms(unsigned int x)
2.在Keil中新建工程,添加C51文件,设置生成Hex文件。
具体的程序如下:
#include <reg51.h>
//数码管段码表,共阳极段码表,实际电路用的共阴极数码管
unsigned char code disp_buff[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
{
unsigned char i;
while(x--)
{
for(i = 0;i < 120;i++);
}
}
//按键扫描函数,首先判断按键发生在那一列,然后根据所发生的行附加不同的值,从而得到键盘按键序号
void key_scan(void)
{
unsigned char i;
//高4位置1,放入4行
P1 = 0x0f;
课程名称
单片机原理及应用
实验名称
数码管显示4*4矩阵键盘按键号
实验内容:
按下任意键时,数码管都会显示其按键的序号,扫描程序首先判断按键发生在那一列,然后根据所发生的行附加不同的值,从而得到按键的序号。
实验步骤:
1.根据以下电路图,在Proteus中找到相应元器件并接线。
元器件:AT89C51、button、cap、res、sounder、respack-8、7SEG-COM-BLUE、CRYSTAL,分别放入开关、红色LED灯、电阻。
case 4: keyno += 8;break;
case 8: keyno += 12;break;
}
}
//主函数
void main(void)
{
P0 = 0x00;
while(1)
{
P1 = 0xf0;
if(P1 != 0xf0) //扫描键盘获得按键序号
{
key_scan();}源自if(pre_keyno != keyno)
{
P0 = ~disp_buff[keyno]; //显示,共阳极段码取反作为共阴极段码
pre_keyno = keyno;
}
delayms(100);
}
}
实验效果:
当按下K1时,数码管显示数字1:
当按下KF时,数码管显示字符F:
default: keyno = 16; //无键按下
}
//低四位置1,放入4列
P1 = 0xf0;
delayms(1);
//
i = P1 >> 4 ^ 0x0f;
//对0-3行分别附件起始值
switch(i)
{
case 1: keyno += 0;break;
case 2: keyno += 4;break;