搜档网
当前位置:搜档网 › 数码管显示4×4矩阵键盘

数码管显示4×4矩阵键盘

数码管显示4×4矩阵键盘
数码管显示4×4矩阵键盘

《单片机原理及应用课程设计》报告

——数码管显示4×4矩阵键盘的键盘号

专业:自动化

班级: 1106

姓名:王佳俊

学号: 110240171

指导教师:卜旭芳

2014年 10月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.2软件流程图

开始

初始化

结束,返回

若有按键按下,显示键盘号

扫描键盘第一行

若无按键按下

扫描键盘第二行

若无按键按下

扫描键盘第三行

若无按键按下

扫描键盘第四行

若无按键按下

结束,返回

4.3源程序

#include

#define uchar unsigned char

#define uint unsigned int

uchar 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;//将检测信号赋给变量temp

temp=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;

case 0xde://11011110同理判断其为第三位被按下(该行第二位)num=1

num=1;

break;

case 0xbe://同上则num=2

num=2;

break;

case 0x7e://同上num=3

num=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:

num=6;

break;

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:

num=11;

break;

}

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=P1;

temp=temp&0xf0;

}

}

}

return num;//子函数最后返回num值}

void main()

{

P0=0x00;//清屏

delay(5);//延时

while(1)//主循环

{

disp(keyscan());//检测并显示

}

}

}

5、调试运行

电路图

依次按下开关k1-k16,数码管会对应显示出0—f的16个数字K=5的数码管显示4.

K=16时的数码管显示F

6、设计心得体会

硬件设计方面,此课题所需的硬件并不负责,只许少量的导线、简单的电路便可以完成。

软件设计方面,我感觉到在编写循环嵌套程序时非常容易出错,需要反复的查错和耐心的调试。我虽然能够编写出程序,其可读性却有待于提高。

经过这次课程设计,我对51系统的单片机内部构造的了解认识有了一定程度的提高。我体会到做设计是一项细致的工作,必须要投入时间及精力,要有耐心有韧性。

我相信这次的课程设计为我以后的发展打下一定的基础,我会更加努力,争取自己在单片机的开发上有更深层次的提高。

参考书目:

[1] 肖金球. 单片机原理与接口技术.[M].北京:清华大学出版社,2004.12

实验三 数码管显示实验

实验十九数码管显示实验 一、实验目的 1、了解数码管的显示原理; 2、掌握数码管显示的编程方法。 二、实验内容 1、编写数码管显示程序,循环显示0-F字符 三、实验设备 1、硬件: JX44B0实验板; PC机; JTAG仿真器; 2、软件: PC机操作系统(WINDOWS 2000); ARM Developer Suite v1.2; Multi-ICE V2.2.5(Build1319); 四、基础知识 1、掌握在ADS集成开发环境中编写和调试程序的基本过程。 2、了解ARM 应用程序的框架结构; 3、了解数码管的显示原理; 五、实验说明 1、LED显示原理 发光二极管数码显示器简称LED显示器。LED显示器具有耗电低、成本低、配置简单灵活、安装方便、耐震动、寿命长等优点,目前广泛应用于各类电子设备之中。 7段LED由7个发光二极管按“日”字排列。所有发光二极管的阳极连接在一起称共阳极接法,阴极连接在一起称为共阴极接法。一般共阴极可以不需要外接电阻。 其中各二极管的排列如上图在共阳极接法中,如果显示数字“5”,需要在a、c、d、f、g端加上高电压,其它加低电压。这样如果按照dp、g、fe、d、c、b、a的顺序排列的话对应的码段是:6DH。其它的字符同理可以得到。

2、数码管显示驱动 数码管的显示一般有动态显示和静态显示两大类,另外按照驱动方式又分串行驱动和并行驱动两种方式。串行驱动主要是提供串-并转换,减少控制线数量;并行驱动对每一个段提供单独的驱动,电路相对简单。这方面参看数字电路相关内容。 下面主要介绍静态显示和动态显示: 1)静态显示: LED数码管采用静态接口时,共阴极或共阳极节点连接在一起地或者接高电平。每个显示位的段选线与一个8位并行口线相连,只要在显示位上的段选位保持段码电平不变,则该位就能保持相应的显示字符。这里的8位并行口可以直接采用并行I/O口,也可以采用串行驱动。相应的电路如下: 很明显采用静态显示方式要求有较多的控制端(并行)或较复杂的电路(串行)。但是在设计中对器件的要求低。

4乘4矩阵键盘输入数码管显示四位数

综合课程设计三相步进电机控制器电路的设计 学生姓名__________

指导教师_________ 课程设计任务书 一、设计说明 步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。 设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。 用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。用示波器观测三相的输出波形,并用数码管显示电路的工作状态。 二、技术指标 步进电机的工作频率为:<10kHz 三、设计要求 1.进行方案论证,提出一个合理的设计方案并进行理论设计; 2.对所设计的方案部分进行调试; 3.在选择器件时,应考虑成本。 4.设计测量调试电路。 四、实验要求 1.根据技术指标制定实验方案;验证所设计的电路。 2.进行实验数据处理和分析。 五、推荐参考资料 1?谢自美?电子线路设计?实验?测试.[M]武汉:华中理工大学出版社,2000 年 2. 阎石. 数字电子技术基础. [M] 北京:高等教育出版社,2006年 3. 童诗白、华成英.模拟电子技术基础. [M] 北京:高等教育出版社,2006年 4..付家才. 电子实验与实践. [M] 北京:高等教育出版社,2004年 5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M] 北京:人民 邮电出版社,1993年

六、按照要求撰写课程设计报告成绩评定表

一、概述 本次毕设的题目是:三相步进电机控制电路的设计。本次毕设使用80C51单片机作为主控芯片,利用ULN2003A集成电路作为三相步进电机的驱动电路,采用单极性驱动方式,使三相步进电机能在(1)三相单三拍,(2)三相双三拍, (3)三相六拍三种工作方式下正常工作;能实现的功能有:启动/停止控制、方向控制;速度控制;用LED数码管显示工作方式。键盘输入工作频率。本次课程设计采用80C51单片机作为主控芯片,程序采用C语言来编写,驱动电路采用ULN2003A集成电路,显示采用 7SEG-MPX4-CC卩四位共阴数码管,P0接段码,并用8只1K欧左右电阻上拉。P2的4位10 口接位选码。正转,数码管显示1。反转,数码管显示2.不转,数码管显示0.采用Proteus软件进行仿真。在Keil uVsuon3编程环境下编程和编译生成HEX文件,导入到 80C51单片机,实现对各个模块的控制,实现我们所需要的功能。 本次课程是对毕业设计的基础设计,即实现4x4键盘输入,数码管显示输入数字的设计。 二、方案论证 1步进电机驱动方案选择 方案1 :使用功率三极管等电子器件搭建成功率驱动电路来驱动电机的运行。这种方案的驱动电路的优点是使用电子器件联接,电路比较简单,但容易受 干扰,信号不够稳定,缺点是器件较大而不便电路的集成,使用时很不方便,联接时容易出错误。 方案2:使用专门的电机驱动芯片ULN2003A来驱动电机运行。驱动芯片的优点是便于电路的集成,且驱动电路简单,驱动信号很稳定,不易受外界环境的干扰,因而设计的三相步进电机控制系统性能更好。 通过对两种方案的比较,我选择方案2使用ULN2003A S机驱动芯片来作为驱动。 2数码管显示方案选择 方案1:把所需要显示的数据通过专用的七段显示译码器(例如7448)的转换输出给LED显示屏。优点是输出比较简单,可以简化程序,但增加了芯片的费用,电路也比较复杂。 方案2:通过程序把所要的数据转化为七段显示的数据,直接通过单片机接 口来显示,其优点是简化了电路,但增加了软件编写的负担。 通过对两种方案进行比较,我选择通过软件编写来输出显示信号,即单片机直接和显示器相连。 3控制状态的读取 方案1:把按键接到单片机的中断口,若有按键按下,单片机接收到中断信 号,再通过软件编写的中断程序来执行中断,优点是接线简单,简化了电路,但软件编写较为复杂,不易掌握。

矩阵键盘电路设计

课程设计 题目矩阵键盘电路设计教学院计算机学院 专业计算机应用技术班级 姓名 指导教师 2010 年01 月12 日

前言.................................................................... 第一章需求分析......................................................... 功能描述......................................................... 功能分析......................................................... 第二章系统的原理及分析................................................. 用到的知识点的介绍,知识点使用的总体思路 第三章详细设计......................................................... 硬件设计 系统结构图,元器件的选择等 软件设计 所设计的软件关键模块的程序流程 第四章测试............................................................ 运行结果分析等 第五章总结............................................................. 参考文献................................................................ 附录 关键程序代码........................................................

4乘4矩阵键盘输入数码管显示四位数

沈阳航空航天大学 综合课程设计三相步进电机控制器电路的设计 班级 94020101 学号 2009040201023 学生姓名 XXXXXXXXX 指导教师常丽东

课程设计任务书 一、设计说明 步进电机是工业过程控制及仪表控制中的主控元件之一,作为执行元件其特点为能够快速起启停、精度高且能直接接收数字量,由于这些特点使其在定位场合得到了广泛的应用。 设计一个三相步进电机控制器,使其能够控制步进电机的工作状态,如步进电机正、反转,步进电机的工作方式等。 用键盘设定步进电机的工作频率,工作方式,并用数码管显示设定值,可以通过按键来更换显示内容。用示波器观测三相的输出波形,并用数码管显示电路的工作状态。 二、技术指标 步进电机的工作频率为:<10kHz 三、设计要求 1.进行方案论证,提出一个合理的设计方案并进行理论设计; 2.对所设计的方案部分进行调试; 3.在选择器件时,应考虑成本。 4.设计测量调试电路。 四、实验要求 1.根据技术指标制定实验方案;验证所设计的电路。 2.进行实验数据处理和分析。 五、推荐参考资料 1.谢自美. 电子线路设计·实验·测试. [M]武汉:华中理工大学出版社,2000年 2.阎石. 数字电子技术基础. [M]北京:高等教育出版社,2006年 3.童诗白、华成英.模拟电子技术基础. [M]北京:高等教育出版社,2006年 4..付家才. 电子实验与实践. [M]北京:高等教育出版社,2004年 5.沙占友、李学芝著.中外数字万用表电路原理与维修技术. [M]北京:人民邮电出版社,1993年

六、按照要求撰写课程设计报告成绩评定表

数码管显示程序(汇编语言)

实验三数码显示 一、实验目的 了解LED数码管动态显示的工作原理及编程方法。 二、实验内容 编制程序,使数码管显示“DJ--88”字样。 三、实验程序框图 四、实验步骤 联机模式: (1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开598K8ASM

文件夹,点击S6.ASM文件,单击“确定”即可装入源文件,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。 (2)数码管显示“DJ--88”字样。 脱机模式: 1、在P.态下,按SCAL键,输入2DF0,按EXEC键。 2、数码管显示“DJ--88”字样。 五、实验程序清单 CODE SEGMENT ;S6.ASM display "DJ--88" ASSUME CS:CODE ORG 2DF0H START: JMP START0 PA EQU 0FF20H ;字位口 PB EQU 0FF21H ;字形口 PC EQU 0FF22H ;键入口 BUF DB ?,?,?,?,?,? data1: db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0 c6h,0a1h db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H START0: CALL BUF1 CON1: CALL DISP JMP CON1 DISP: MOV AL,0FFH ;00H MOV DX,PA OUT DX,AL MOV CL,0DFH ;显示子程序 ,5ms MOV BX,OFFSET BUF DIS1: MOV AL,[BX] MOV AH,00H PUSH BX MOV BX,OFFSET DATA1 ADD BX,AX MOV AL,[BX] POP BX MOV DX,PB

4×4矩阵键盘数码管显示 最简便易懂的键盘扫描方法

/////4×4矩阵键盘按键为1-16,按键显示0-9、a-f; ////////////////// #include #define uchar unsigned char uchar key=0; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e,0xc0}; void show(uchar key) { P0=table[key];//显示数值 } void Scan_key()//扫描键盘 { uchar m; P1=0xff;//数码管全亮 P2=0x0f;//P2口赋初值低位1高位0 m=P2; switch (m) { case 0x0e: { P2=0xf0;

m=P2; switch (m) { case 0xe0:{key=0;show(key);break;} case 0xd0:{key=1;show(key);break;} case 0xb0:{key=2;show(key);break;} case 0x70:{key=3;show(key);break;} default:break; } break; } case 0x0d: { P2=0xf0; m=P2; switch (m) { case 0xe0:{key=4;show(key);break;} case 0xd0:{key=5;show(key);break;} case 0xb0:{key=6;show(key);break;} case 0x70:{key=7;show(key);break;} default:break; } break; } case 0x0b: { P2=0xf0; m=P2; switch (m) { case 0xe0:{key=8;show(key);break;} case 0xd0:{key=9;show(key);break;} case 0xb0:{key=10;show(key);break;} case 0x70:{key=11;show(key);break;} default:break; } break; } case 0x07: { P2=0xf0; m=P2; switch (m)

实验四 动态显示与矩阵键盘的编程和综合应用设计(学生版)

实验四综合应用设计——数码管动态显示与矩阵键盘的编程 一、实验目的: 1、掌握单片机I/O技术和程序设计等综合知识。 2、了解矩阵式键盘的内部结构和数码管显示的基本原理,掌握至少一种常用的按键识别方法。 3、熟练掌握数码管动态显示和矩阵键盘识别的综合应用。 二、实验内容: 设计一个矩阵键盘的识别和动态显示综合的系统,控制8个8段数码管动态扫描显示4*4矩阵键盘上按下的按键所对应的值。 三、实验要求: 给定一个4*4的矩阵键盘,16个按键对应显示0123456789ABCDE,第1次按下某按键在第一个8段数码管上显示对应的值,第2次在第二个数码管上显示,以此类推,第9次又在第一个数码管上显示,以此循环下去。其中ABCDE在数码管上无法表达,可以用其它代替,例如:B用8表示,D用0表示,E用H表示等。 四、实验设备及实验耗材: 计算机一台,W A VE6000软件模拟器,完成ISP下载的XLISP软件,XL1000单片机综合仿真实验仪一台(8个8段数码管,4*4矩阵键盘一个,89C51一片,9针对9针的串口线一条,USB电缆一条) 五、实验基本原理与方法: 查阅相关资料掌握矩阵式键盘的内部结构,8段数码管动态显示原理和常用的按键识别方法,建议使用按键识别方法中最常用的“行扫描法”编写程序。结合动态显示技术和矩阵键盘识别技术。 六、实验方案设计: 1、采用哪些I/O口完成通信,采用何种按键识别的方法,如何综合动态显示技术和矩 阵键盘识别技术。 2、说明该程序的功能。 3、硬件连接原理图。 七、实验步骤: 1.弄清实验内容和实验要求。 2.学习相关理论知识,提出实验方案,画出程序流程图。

DS1302数码管显示程序

/************************************************************************/ // huaqinMCU DS1302 实验程序数码管显示时钟设置说明 // "8键"为时钟设置、时分切换、保存"0键"为加"4键"为减 /************************************************************************/ #include #define uchar unsigned char #define uint unsigned int //===以下IO定义请根据您硬件的连接修改=== sbit T_RST=P3^5;//ds1302-5 sbit T_IO=P3^4;//ds1302-6 sbit T_CLK=P3^6;//ds1302-7 sbit ACC0=ACC^0; sbit ACC7=ACC^7;//累加器A 51单片机原理中有介绍 sbit up=P3^1; sbit down=P3^2; sbit set=P3^0; uchar a,b,clock_ss,clock_sg,clock_fs,clock_fg,clock_ms,clock_mg; int hour,mie,sei; uchar clk_time[3]; //秒,分,时寄存器初始值 code uchar ledmap[]={ 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x40}; //数码管段码 /******************DS1302:写入操作(上升沿)*********************/ void write_byte(uchar da) { uchar i; ACC=da; for(i=8;i>0;i--) { T_IO=ACC0; T_CLK=0; T_CLK=1; ACC=ACC>>1; } } /******************DS1302:读取操作(下降沿)*****************/ uchar read_byte(void) { uchar i;

LED数码管显示矩阵键盘按键的设计

任务九设计说明2 一、电路原理及仿真图: 二、程序设计: #include #define uchar unsigned char uchar display[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0 x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0 x40}; uchar key; void get(){ uchar a; P1=0x0f; //按下按钮// a=P1^0x0f; switch(a) //确定行// { case 1:key=0;break; case 2:key=4;break; case 4:key=8;break; case 8:key=12;break; case 0:key=16;} P1=0xf0; a=P1^0xf0; switch(a) //确定列//{ case 16:key=key+3;break; case 32:key=key+2;break; case 64:key=key+1;break;

case 128:key=key+0;}} void main(){ P0=display[16]; get(); P0=display[key]; } 程序完成两个功能,首先扫描键盘,检测是否有按键按下并计算键值。 然后如果有按键按下则驱动数码管显示相应键值,否则显示”-“符号。 三、设计说明 如电路原理图所示,图中矩阵键盘和P3端口连接,共阳极数码管的段选端和单片机的P0口连接,位选直接接到高电平,使得数码管始终处于选通状态。系统启动后,单片机逐行扫描键盘,当没有按键按下时,驱动数码管显示“-”符号,当检测到有按键按下时,单片机将相应键值对应的数码编码送至P0端口,驱动数码管以十六进制方式显示被按下的按键的键值。四、遇到的问题 首先遇到的问题是系统启动后数码管没有任何显示,仔细查看仿真现象后发现P0口始终为高阻状态,于是怀疑是数码管极性错误。再检查数码管型号后发现果然使用了共阴极数码管,于是换成共阳极数码管后终于有了显示。其次是希望键值从键盘的左下角起始,即左下角键值为0。但由于对键盘的扫描方向理解的不是很透彻,导致调试了很多次,键值排列顺序都不尽人意。不过最终还是达到了设计要求。

51单片机并行口驱动LED数码管显示电路及程序

51单片机并行口驱动LED数码管显示电路及程序 介绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。 1 硬件电路 多位LED显示时,常将所有位的段选线并联在一起,由一个8位I/O口控制,而共阴极点或共阳极点分别由另一个8位I/O口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。本文将介绍一种利用单片机的一个并行I/O口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。其中,74LS138是3线-8线译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。 显示时,其显示数据以串行方式从89C52的P12口输出送往移位寄存器74LS164的A、B 端,然后将变成的并行数据从输出端Q0~Q7输出,以控制开关管WT1~WT8的集电极,然后再将输出的LED段选码同时送往数码管LED1~LED8。位选码由89C52的P14~P16口输出并经译码器74LS138送往开关管Y1~Y8的基极,以对数码管LED1~LED8进行位选控制,这样,8个数码管便以100ms的时间间隔轮流显示。由于人眼的残留效应,这8个数码管看上去几乎是同时显示。

<51单片机并行口驱动LED数码管显示电路> 2 软件编程 该系统的软件编程采用MCS-51系列单片机汇编语言完成,并把显示程序作为一个子程序,从而使主程序对其进行方便的调用。图2所示是其流程图。具体的程序代码如下:

<51单片机并行口驱动LED数码管显示程序>

单片机实验报告——矩阵键盘数码管显示

单片机实验报告 信息处理实验 实验二矩阵键盘 专业:电气工程及其自动化 指导老师:高哲 组员:明洪开张鸿伟张谦赵智奇 学号:152703117 \152703115\152703118\152703114室温:18 ℃日期:2017 年10 月25日

矩阵键盘 一、实验内容 1、编写程序,做到在键盘上每按一个键(0-F)用数码管将该建对应的名字显示出来。按其它键没有结果。 二、实验目的 1、学习独立式按键的查询识别方法。 2、非编码矩阵键盘的行反转法识别方法。 3、掌握键盘接口的基本特点,了解独立键盘和矩阵键盘的应用方法。 4、掌握键盘接口的硬件设计方法,软件程序设计和贴士排错能力。 5、掌握利用Keil51软件对程序进行编译。 6、会根据实际功能,正确选择单片机功能接线,编制正确程序。对实验结果 能做出分析和解释,能写出符合规格的实验报告。 三、实验原理 1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。 2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。 3、识别键的闭合,通常采用行扫描法和行反转法。行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然

后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。 行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。 由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。 行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

数码管显示程序

数码管显示程序 一、程序X1 1、程序X1的功能:最右边的数码管显示“0” 2、程序: ORG 0 LJMP STR ORG 0100H STR: MOV P3, #0FEH ;送最低位有效的位码 MOV P0, #0C0H ;送“0”的段码“0C0H” SJMP STR END 二、程序X2: 用查表方式显示某个显示缓冲器中的数字 1、查表显示的预备知识 设从右到左各显示器对应的显示缓冲器为片内RAM79H~7EH

3、 实例: 例:已知(79H )= 0 7H , 查段码表在最右边的数码管显示79H 中的 “7”; 注:共阳极的段码表: TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH 若:(A )= 0XH 则数字“X ”对应的段码在段码表中的表地址 = TAB + X ORG 0 LJMP STR ORG 0100H ① 各显示器与显示缓冲器地址对应关系 显示缓冲器: 7EH 7DH 7CH 7BH 7AH 79H 对应显示 器: ② 显示缓冲器的值与显示数字的关系: 显示缓冲器中的值 对应段码表地址 显示的数字 0XH 表首址+OXH X

STR: MOV P3, #11111110B ;送最低位有效的位码 MOV 79H , #07H ;送要显示的数据到显示缓冲器 MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTR MOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0) SJMP STR TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H DB 88H,83H,0C6H,0A1H,86H,8EH,0FFH,0CH,89H,0DEH END 例2:. 查段码表在最右边的数码管循环显示“0”~“F” ORG 0 LJMP STR ORG 0100H STR: MOV P3, #11111110B ;送最低位有效的位码 LP0: MOV 79H , #0H ;送要显示的数据的初值到显示缓冲器MOV R3 , #6 ; 送要显示的数据的个数 LP: MOV A , 79H ;显示缓冲器的数作为查表变址送A MOV DPTR , #TAB ;表首址送DPTR MOVC A , @A+ DPTR ;查表将数字转换为对应段码MOV P0, A ; 段码送段码口(P0)

数码管显示

数码管显示 第3讲数码管显示 第3讲数码管显示 一、数码管显示原理 我们最常用的是七段式和八段式LED数码管,八段比七段多了一个小数点,其他的基本相同。所谓的八段就是指数码管里有八个小LED发光二极管,通过控制不同的LED的亮灭来显示出不同的字形。数码管又分为共阴极和共阳极两种类型,其实共阴极就是将八个LED的阴极连在一起,让其接地,这样给任何一个LED 的另一端高电平,它便能点亮。而共阳极就是将八个LED的阳极连在一起。其原理图如下。 其中引脚图的两个COM端连在一起,是公共端,共阴数码管要将其接地,共阳数码管将其接正5伏电源。一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。 数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。可以看出两个编码的各位正好相反。如下图。

二、点亮一个数码管 下面以七段共阴数码管为例讲述如何点亮一个数码管。 l 51系列单片机的P0口没有上拉电阻(其他端口有),所以如果直接接数码管的段选线,那么不能将其点亮。我们需要为其加上220欧姆的上拉电阻,注意,上拉电阻阻值不能过大。实验原理图如下。 其中,7SEG-COM-CAT-GRN为七段共阴数码管,显示为绿色。RES为电阻。查找电阻时,需要选中下面的Resistors,如下图。

矩阵键盘控制数码管

专业综合设计报告 项目名称:基于矩阵键盘和LED数码管显示器的简易 人机界面设计 学生姓名: 同组同学: 专业名称: 班级: 指导教师: 项目起止日期:2012年03月12日至2012年03月30日

目录 摘要 (3) 1、概述 (3) 2、总体设计方案 (3) 2.1总体设计要求 (3) 2.2系统框图 (4) 3、系统硬件设计 (4) 3.1单片机的最小系统 (5) 3.1.1电源电路 (5) 3.1.2复位电路 (5) 3.1.3晶振电路 (6) 3.2 LED数码管显示部分 (6) 3.3矩阵键盘 (7) 3.3.1键盘的工作原理 (7) 3.3.2键盘检测原理 (7) 4、系统软件设计 (9) 4.1 软件设计思想 (9) 4.2 主程序设计 (10) 4.3 子程序设计 (11) 4.3.1 数码管显示程序设计 (11) 4.3.2 键盘检测程序设计 (11) 4.3.3延时函数程序设计 (14) 5、系统调试 (14) 6.设计体会 (15) 参考文献 (15)

摘要 单片机自20世纪70年代以来,以其极高的性价比,以及方便小巧受到人们极大的重视和关注。本设计选用AT89S52芯片作为控制芯片,来实现矩阵键盘对LED数码管显示的控制。通过单片机的内部控制实现对硬件电路的设计,从而实现对4*4矩阵键盘的检测识别。用单片机的P3口连接4×4矩阵键盘,并以单片机的P3.0-P3.3口作键盘输入的列线,以单片机的P3.4-P3.7口作为键盘输入的行线,然后用P0.0-P0.7作输出线,通过上拉电阻在显示器上显示不同的字符“0-F”。在硬件电路的基础上加上软件程序的控制来实现本设计。其工作过程为:先判断是否有键按下,如果没有键按下,则继续检测整个程序,如果有键按下,则识别是哪一个键按下,最后通过LED数码管显示该按键所对应的序号。关键词:AT89S52芯片;4*4矩阵键盘;键盘识别;LED数码管 1、概述 随着单片机系统的日益更新,以及人们对产品的人机交互能力的不断提高;使得单片机系统的人机界面设计能力成为学习单片机的一项重要的基础内容。而4*4键盘的操作和LED数码管的动态显示是人机界面设计中最基础的内容,掌握这些基础的设计能力对以后的学习研究是非常必要的。 2、总体设计方案 2.1总体设计要求 本系统采用单片机AT89S52为数码管的控制核心,制造一种简单的4*4键盘检测显示,能够在目测条件下四位数码管各段亮度均匀、充足,本系统具有硬件少,结构简单,容易实现,性能稳定可靠,成本低等特点。 根据设计要求,确定的设计方案如下: 2.1.1 选择AT89S52单片机作为整个系统的核心器件,对整个系统进行总体

矩阵键盘数码管显示键值 程序

#include #include #define uchar unsigned char #define uint unsigned int uchar dis_buf; //显示缓存 uchar temp; uchar key; //键顺序吗 void delay0(uchar x); //x*0.14MS #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();}; // 此表为LED 的字模0 1 2 3 4 5 6 7 8 9 a b c d e f unsigned char code LED7Code[] = {~0x3F,~0x06,~0x5B,~0x4F,~0x66,~0x6D,~0x7D,~0x07,~0x7F,~0x6F,~0x77,~0x7C,~0x39,~0x5 E,~0x79,~0x71}; /*************************************************************/ /* */ /* 延时子程序*/ /* */ /*************************************************************/ void delay(uchar x) { uchar j; while((x--)!=0) { for(j=0;j<125;j++) {;} } } /*************************************************************/ /* */ /* 键扫描子程序(4*3 的矩阵) P1.4 P1.5 P1.6 P1.7为行*/ /* P1.1 P1.2 P1.3为列*/ /* */ /*************************************************************/ void keyscan(void)

矩阵键盘显示电路的设计

二、实验原始数据记录 1.实验现象 当设计文件加载到目标器件后,将数字信号源模块的时钟选择为1KHZ,按下矩阵键盘的某一个键,则在数码管上显示对应的这个键标识的键值,当再按下第二个键的时候前一个键的键值在数码管上左移一位。按下“*”键则在数码管是显示“E”键值。按下“#”键在数码管上显示“F”键值。 2.实验图片记录 湖南科技大学 物理与电子科学学院专业实验报告 实验课程:FPGA 实验原理 实验项目:矩阵键盘显示电路的设计专业:物理与电子科学学院班级:电子信息科学与技术3班姓名:马竞怡学 号: 1308020328 实验日期:年月日

实验报告 一、实验目的内容及步骤 1.实验目的 1)了解普通4×4键盘扫描的原理。2)进一步加深七段码管显示过程的理解。3)了解对输入/输出端口的定义方法。 2..4×4矩阵键盘电路原理图 信号名称 对应FPGA 管脚名 说明 KEY-C0AC18 钜阵键盘的第1列选择KEY-C1AC17钜阵键盘的第2列选择KEY-C2AD17钜阵键盘的第3列选择KEY-C3AC16钜阵键盘的第4列选择KEY-R0AD16钜阵键盘的第1行选择KEY-R1AC15钜阵键盘的第2行选择KEY-R2AD15钜阵键盘的第3行选择KEY-R3 AC14 钜阵键盘的第4行选择 3..实验步骤 1)打开QUARTUSII 软件,新建一个工程。 2)建完工程之后,再新建一个VHDL File,打开VHDL 编辑器对话框。 3)按照实验原理和自己的想法,在VHDL 编辑窗口编写VHDL 程序,用户可参照光 盘中提供的示例程序。 4)编写完VHDL 程序后,保存起来。方法同实验一。 5)对自己编写的VHDL 程序进行编译并仿真,对程序的错误进行修改。 6)编译仿真无误后,依照4X4矩阵键、数码管与FPGA 的管脚连接表(表或参照附 录进行管脚分配。表10-2是示例程序的管脚分配表。分配完成后,再进行全编译一次,以使管脚分配生效。 7)用下载电缆通过JTAG 口将对应的sof 文件加载到FPGA 中。观察实验结果是否 与自己的编程思想一致。 实验预习报告 一、实验原理及公式 通常在一个键盘中使用了一个瞬时接触开关,并且用如图10-1所示的简单电路,微处理器可以容易地检测到闭合。当开关打开时,通过处理器的I/O 口的一个上拉电阻提供逻辑1;当开关闭合时,处理器的/IO 口的输入将被拉低得到逻辑0。可遗憾的是,开关并不完善,因为当它们被按下或者被释放时,并不能够产生一个明确的1或者0。尽管触点可能看起来稳定而且很快地闭合,但与微处理器快速的运行速度相比,这种动作是比较慢的。当触点闭合时,其弹起就像一个球。弹起效果将产生如图10-2所示的好几个脉冲。弹起的持续时间通常将维持在5ms ~30ms 之间。如果需要多个键,则可以将每个开关连接到微处理器上它自己的输入端口。然而,当开关的数目增加时,这种方法将很快使用完所有的输入端口。 键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。 获取到行值和列值以后,组合成一个8位的数据,根据实现不同的编码在对每个按键进行匹配,找到键值后在7段码管显示。 (矩阵键盘) 成绩:教师:

4×4矩阵键盘数码管显示 最简便易懂的键盘扫描方法

/////4×4矩阵键盘按键为1-16,按键显示0- 9、a-f; ////////////////// #include #define uchar unsigned char uchar key=0; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0x a1,0x86,0x8e,0xc0}; void show(uchar key){P0=table[key];//显示数值}void Scan_key()//扫描键盘{uchar m; P1=0xff;//数码管全亮 P2=0x0f;//P2口赋初值低位1高位0 m=P2; switch (m){case 0x0e: {P2=0xf0; m=P2; switch (m){case 0xe0:{key=0;show(key);break;} case 0xd0:{key=1;show(key);break;} case 0xb0:{key=2;show(key);break;} case 0x70:{key=3;show(key);break;}

default: break;}break;}case 0x0d: {P2=0xf0; m=P2; switch (m){case 0xe0:{key=4;show(key);break;} case 0xd0:{key=5;show(key);break;} case 0xb0:{key=6;show(key);break;} case 0x70:{key=7;show(key);break;} default: break;}break;}case 0x0b: {P2=0xf0; m=P2; switch (m){case 0xe0:{key=8;show(key);break;} case 0xd0:{key=9;show(key);break;} case 0xb0:{key=10;show(key);break;} case 0x70:{key=11;show(key);break;} default: break;}break;}case 0x07:{P2=0xf0; m=P2; switch (m){case 0xe0:{key=12;show(key);break;} case 0xd0:{key=13;show(key);break;}

数码管显示4×4矩阵键盘的键盘号--万意

数码管显示4X4矩阵键盘的键盘号 学院:物理与电子工程学院 专业:自动化 班级:13级7班 学号: 姓名:万意 指导教师:马世榜 日期:2013年12月31日 目录 1引言 (1) 2设计方案 (2) 3硬件设计 (2) AT89S51 (2) 4*4矩阵式键盘 (5) 矩阵式键盘介绍 (5) 键盘扫描原理 (6) 硬件电路连接 (9)

单片机时钟电路 (9) 单片机复位电路 (9) 矩阵式键盘电路 (9) LED数码管显示电路 (9) 4软件设计 (11) 所用软件简介 (11) Keil (11) Proteus (11) 程序流程图 (13) 源程序 (14) 5电路原理图 (16) 参考文献 (17)

1引言 矩阵式键盘乃是当今使用最为广泛的键盘模式,该系统以N个端口连接控制N*N个按键,即时在LED数码管上。单片机控制的据这是键盘显示系统,该系统可以对不同的按键进行实时显示,其核心是单片机和键盘矩阵电路部分,主要对按键与显示电路的关系、矩阵式技术及设备系统的硬件、软件等各个部分进行实现。 4*4矩阵式键盘采用AT89S51单片机为核心,主要由矩阵式键盘电路、译码电路、显示电路等组成,软件选用汇编语言编程。单片机将检测到的按键信号转换成数字量,显示于LED显示器上。该系统灵活性强,易于操作,可靠性高,将会有更广阔的开发前景。

2设计方案 单片机的P1口的~连接4×4矩阵键盘,P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。例如,1号键按下时,数码管显示“1”, 14号键按下时,数码管显示“E”等等。本论文主要研究单片机控制的键盘识别显示系统,分别对按键信息和显示电路以及软、硬件各个部分进行研究。 主要内容如下: ①根据矩阵式键盘的特点,进行键盘控制系统的整体研究与设计; ② LED实时显示按键信息; ③采用软件编程的方法实现按键信息的提取和显示。

单片机原理数码管动态显示实验-单片机原理-实验报告

宁德师范学院计算机系 实验报告 (2014— 2015学年 第2学期) 实验名称 数码管动态显示实验 业计算机科学与技术(非师范) 2012 指导教师 实验日期学号 B47 姓名 王秋 课程名称 单片机原理 杨烈君

实验目的: 实验要求: 1. 在Proteus 软件中画好51单片机最小核心电路,包括复位电路和晶振电路 2. 在电路中增加八位 7段数码管(共阳/共阴自选),将P2 口作数据输出口与 7段数码管数据 引脚相连,P3引脚输出位选控制信号 实现类似时钟的效果,如“ 13-23-25 ” 13时23分25秒 扩展要求: 结合LED 显示,实现带数码显示的交通灯 实验设备(环境): 1 .计算机 2. Proteus ISIS 7 Professional 3. Keil 应用程序 实验内容: 数码管动态显示技术要求实现: 1?动态显示法,实现数码管分别显示数字 1-8 ; 2 ?实现指定数值的显示 (可使用缓存数值) (); 3 .实现类似时钟的效果,如“ 13-23-25 ” 13时23分25秒; 4 ?实现时钟的自动计时; 扩展要求: 结合LED 显示,实现带数码显示的交通灯; 1. 巩固Proteus 软件和Keil 软件的使用方法 2. 学习端口输入输出的高级应用 3. 掌握7段数码管的连接方式和动态显示法 4. 掌握查表程序和延时等子程序的设计 3. 在Keil 软件中编写程序,采用动态显示法,实现数码管分别显示数字 1-8 4. 实现指定数值的显示 (可使用缓存数值) 5. 6. 实现时钟的自动计时 7. 应用程序

实验步骤、实验结果及分析: 1实验步骤: 1、使用Proteus ISIS 7 Professional 应用程序,建立一个.DSN文件 2、在“库”下拉菜单中,选中“拾取元件”(快捷键P),分别选择以下元件:AT89C51CAPCA P-ELEC CRYSTAL RES PACK-8 3、构建仿真电路: 连接图 显示1-8 显示

相关主题