搜档网
当前位置:搜档网 › 基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真

基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真

基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真
基于单片机4X4矩阵键盘控制数码管显示的Proteus仿真

单片机控制数码管显示

单片机实训 项目:用单片机控制数码管显示及其应用班级: 应用电子技术二班 姓名:赵林旺 学号: 2008061532 时间:2010. 5. 21

用单片机控制数码管显示及其应用 一、实训目的 1. 通过用单片机控制数码管的静态显示,学会用单片机编程进行控制和8段共阳极数码管的使用方法,学会编写与调更复杂的程序,进一步熟悉单片机串行接口的使用,为以后打下基础。 2.在用可能的情况下制作数码管的使用电路,本次通过密码锁的制作,进一步熟悉单片机键盘接口和显示器接口技术,掌握独立式键盘结构下的程序设计思路和步骤。 3.通过本次实训提高汇编语言编程能力、识别元器件能力、单片机外围电路连接。同时加强理论联系实际的能力,提高学生的动手能力,培养学生之间团结协作能力和刻苦耐劳精神。 4.在日常生活中,可以看到采用八段LED数码管构成的显示屏。这里主要完成利用单片机控制数码管,实现静态显示与动态扫描移动显示。 二、实训器材 1. 面包板一片 2.AT89S52 三片 3. 共阳极8段LED数码管三个 4.40引脚的IC插座三个

5. 74LS164芯片 一片 6..+5V 电源 一个 7.510Ω、220Ω、1K Ω、10K Ω电阻 若干 8.晶体振荡器 若干 9.复位开关 若干 10电解电容22uF 、瓷片电容30pF 若干 11.发光二极管 若干 三 、实训原理图 1. 用单片机控制一个数码管依次显示数字0~9的硬件电路如A 图所示: p 1.01p 1.12p 1.23p 1.34p 1.45p 1.56p 1.67p 1.78R ST/VPD 9R X D/p 3.0 10TX D/p 3.111INT 0/p 3.212INT 1/p 3.313T0/p 3.414T1/p 3.515WR /p3.616R D /p3.717XT AL 218 XT AL 119Vss 20 p 2.0 21 p 2.122p 2.223p 2.324p 2.425p 2.526p 2.627p 2.728PSEN 29AL E/PR OG 30EA /Vp p 31p 0.732p 0.633p 0.534p 0.435p 0.336p 0.237p 0.138p 0.039Vcc 4089C 51 R 1R 2R 3R 4R 5R 6R 7R 8 a b f c g d e DP Y 1234567a b c d e f g 8 dp dp DPY_7-SE G_DP co m 510*8 89C51 +5 C 3 22u f C 230p f C 130p f Y1 12MH Z K1 R 910K + GN D +5+5 因为只控制一个数码管,选择采取一直点亮各段的静态显示方式,这种显示可以在较小的电流驱动下获得较高的显示亮度,且占用CPU 时间少,编程简单,便于显示和控制。 汇编语言的程序如下:

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:把按键接到单片机的中断口,若有按键按下,单片机接收到中断信 号,再通过软件编写的中断程序来执行中断,优点是接线简单,简化了电路,但软件编写较为复杂,不易掌握。

单片机控制步进电机和数码管显示

一、设计任务书 设计内容:用80C51单片机设计一个步进电机控制器 设计要求: 1.用8015设计一个四相步进电机。 2.可控制步进电机的启动与停止,正转与反转。 3.10档速度调节。 4.点动控制。 5.可显示电机运行参数。 二、设计总体方案 (一)控制方式的选择 控制主要用于电机速度和方向的转换。控制方式有按键控制和开关控制两种。按键较开关而言,操作更加简便,故选按键控制。 方案一:独立按键。独立按键可自由连接,线路简单。 方案二:编码式键盘。编码式键盘的按键接触点接于74LS148芯片。当键盘上没有闭合时,所有按键都断开,当某一键闭合时,该键对应的编码由74LS148输出。 本次设计所需按键不多,不需要采用复杂编码,考虑硬件条件、线路连接和经济性等方面,选择方案一。 (二)电机电路设计方案的选择 由于条件的限制,对于电机的选择只能是实验台上最小步距角18°的电机,其中已包含了驱动电路。 (三)单片机的选择 方案一:AT89C51高性能8位单片机,内部集成CPU、存储器、寄存器、I/O接口,从而构成较为完整的计算机,价格便宜。 方案二:C8051F005单片机,该单片机是完全集成的混合信号系统及芯片,具有8051兼容的微控制器内核,与MCS-51指令集完全兼容。除了具有标准8052的数字外设部件,片内还继承了数据采集和控制系统中常用的模拟部件和其他数字外设及功能部件,执行速度快,但价格较贵。 本次课程设计是在仿真环境下进行,没有太过考虑单片机选择的问题,但就设计本身来讲,从物美价廉的角度考虑,选择方案一较合适。 (四)显示方案的选择 方案一:采用LED数码管。LED数码管是轮流现实的,其利用人烟的视觉暂留特性,使人感觉不到数码管闪动,看到每只数码管都常亮。利用其显示必须不停给数码管数据输入口循环赋值,显示内容较多,编程和接线较为复杂。 方案二:采用LCD1602液晶显示器。LCD1602具有功率小,效果明显,变成容易等优点,且它最多能显示2×16个字符,可以轻松满足设计要求。 由上可知,LCD1602液晶显示器的优点突出,故选择方案二。 (五)软件部分的选择 软件部分的选择主要是指编程语言的选择,编译调试工具根据设计平台选择伟福软件。编程语言主要有以下两种方案。

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年

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

用单片机实现1位LED数码管显示0-9

单片机课程设计题目1位LED数码管显示0-9姓名陈益明 学号 班级 09电力 指导老师许丽汪厚新

目录 一:实验目的与任务…………………二:实验要求…………………………三:实验内容…………………………... 四:实验器材…………………………五:关于PLC控制LED介绍………. 六:原理图绘制说明…………………七:流程图绘制以及说明……………八:电路原理图与仿真………………九:源程序……………………………十:心得体会…………………………十一:参考文献………………………

一、实验与任务 结合实际情况,编程设计、布线、程序调试、检查与运行,完成一个与接近实际工程项目的课题,以培养学生的实际操作能力,适应生产一线工作的需要。做到能检查出错误,熟练解决问题;对设备进行全面维修。 通过实训对PLC的组成、工作原理、现场调试以及基于网络化工作模式的基本配置与应用等有一个一系列的认识和提高。 利用51单片机、1个独立按键及1位7段数码管等器件,设计一个单片机输入显示系统,要求每按一下独立按键数码管显示数据加1(数码管初始值设为0,计到9后再加1 ,则数码管显示0)。 本次设计采用12MHz的晶体振荡器为单片机提供振荡周期,外加独立按键,复位电路和显示电路组成。 二、实验要求 1掌握可编程序控制器技术应用过程中的一些基本技能。 2、巩固、加深已学的理论知识。 3了解可编程控制器的装备、调试的全过程。 4、培养我们综合运用所学的理论知识和基本技能的能力,尤其是培养我们 把理论和实际结合起来分析和解决问题的能力。适应世界生产的需要。 培养出一批既有理论知识又有动手能力的人才。 三、实验内容 1、练习设计、连接、调试控制电路; 2、学习PLC程序编程;

C51单片机定时器及数码管控制实验报告

理工大学信息工程与自动化学院学生实验报告 (201 — 201学年第1 学期) 课程名称:单片机技术

一、实验目的 1.掌握定时器T0、T1 的方式选择和编程方法,了解中断服务程序的设计方法,学会实时程序的调试技巧。 2.掌握LED 数码管动态显示程序设计方法。 二、实验原理 1.89C51 单片机有五个中断源(89C52 有六个),分别是外部中断请求0、外部中断请求1、定时器/计数器0 溢出中断请求、定时器/计数器0 溢出中断请求及串行口中断请求。每个中断源都对应一个中断请求位,它们设置在特殊功能寄存器TCON 和SCON 中。当中断源请求中断时,相应标志分别由TCON 和SCON 的相应位来锁寄。五个中断源有二个中断优先级,每个中断源可以编程为高优先级或低优先级中断,可以实现二级中断服务程序嵌套。在

同一优先级别中,靠部的查询逻辑来确定响应顺序。不同的中断源有不同的中断矢量地址。 中断的控制用四个特殊功能寄存器IE、IP、TCON (用六位)和SCON(用二位),分别用于控制中断的类型、中断的开/关和各种中断源的优先级别。中断程序由中断控制程序(主程序)和中断服务程序两部分组成: 1)中断控制程序用于实现对中断的控制; 2)中断服务程序用于完成中断源所要求的中断处理的各种操作。 C51 的中断函数必须通过interrupt m 进行修饰。在C51 程序设计中,当函数定义时用了interrupt m 修饰符,系统编译时把对应函数转化为中断函数,自动加上程序头段和尾段,并按MCS-51 系统中断的处理方式自动把它安排在程序存储器中的相应位置。 在该修饰符中,m 的取值为0~31,对应的中断情况如下: 0——外部中断0 1——定时/计数器T0 2——外部中断1 3——定时/计数器T1 4——串行口中断 5——定时/计数器T2 其它值预留。 89C51 单片机设置了两个可编程的16 位定时器T0 和T1,通过编程,可以设定为定时器和外部计数方式。T1 还可以作为其串行口的波特率发生器。

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.学习相关理论知识,提出实验方案,画出程序流程图。

51单片机按键控制数码管程序

#define uint unsigned int #define uchar unsigned char uchar c; sbit p10=P1^0; sbit p11=P1^1; sbit p12=P1^2; sbit p13=P1^3; sbit p14=P1^4; sbit p15=P1^5; sbit p16=P1^6; sbit p17=P1^7; void delay(uint z); int b[]={0,1,2,3,4,5,6,7};//设置每一位显示的数字 unsigned char code Tab[]={0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳极数码管 int a[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; void main() { EA=1; EX0=1; IT0=1; P1=0xff; while(1) { for(c=0;c<8;c++)//数码管扫描显示

P2=a[c]; P0=Tab[b[c]]; delay (1); } } } void delay(uint z) { uint a,b; for(a=z;a>0;a--) for(b=110;b>0;b--); } int_0()interrupt 0 { EA=0; if(p10==0) b[0]=(b[0]+1)%10; if(p11==0) b[1]=(b[1]+1)%10; if(p12==0) b[2]=(b[2]+1)%10; if(p13==0) b[3]=(b[3]+1)%10; if(p14==0) b[4]=(b[4]+1)%10; if(p15==0) b[5]=(b[5]+1)%10; if(p16==0) b[6]=(b[6]+1)%10; if(p17==0) b[7]=(b[7]+1)%10;

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。但由于对键盘的扫描方向理解的不是很透彻,导致调试了很多次,键值排列顺序都不尽人意。不过最终还是达到了设计要求。

按键控制数码管加减程序

#include #define dataport P1 #define uchar unsigned char #define uint unsigned int sbit latch1=P2^2; //段锁存 sbit latch2=P2^3; //位锁存 sbit key1=P3^2; sbit key2=P3^3; unsigned int duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x7, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79}; unsigned int weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char display[8]; void suocun(uchar firstbit,uchar num); void delay(uchar z) //延时程序 { uchar i,j,k; for(i=0;i<50;i++) for(j=0;j<50;j++) for(k=0;k

if(num==0) num=9; } } display[0]=duanma[num%10]; suocun(2,1); } } void suocun(uchar firstbit,uchar num) { uchar i ; for(i=0;i

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

单片机实验报告 信息处理实验 实验二矩阵键盘 专业:电气工程及其自动化 指导老师:高哲 组员:明洪开张鸿伟张谦赵智奇 学号: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个键的反转码建一个表,通过查表就可知道是哪个键被按下了。

51单片机控制4个数码管显示

. //使用AT89c51单片机控制四个数码管动态显示0-9999 ,12MHz #include void jiayi();//加1函数 void chufa();//除法函数 void xianshi();//显示函数 void delay();//延时函数 sbit P2_0=P2^0;//个位位码 sbit P2_1=P2^1;//十位位码 sbit P2_2=P2^2;//百位位码 sbit P2_3=P2^3;//千位位码 unsigned char qianwei,baiwei,shiwei,gewei; unsigned int count=0; unsigned char code dis[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极0-9 void main() { while(1) { jiayi(); chufa(); xianshi(); } } void chufa()//将数字的各个位拆开 { qianwei=count/1000;//千位数 baiwei=count%1000/100; //百位数 shiwei=count%100/10; //十位数 gewei=count%10; //个位数 } void jiayi() { count=count+1; if(count==10000) count=0; } void delay()//延时 { unsigned int i,j; for(i=0;i<10;i++) { for(j=0;j<200;j++); } }

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

#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段码管显示。 (矩阵键盘) 成绩:教师:

按键控制1位LED数码管显示0-9

单片机课程设计 姓名:陈素云 班级:09电力方向2班学号:2

设计题目: 按键控制1位LED数码管显示0-9 设计要求: 通过单片的I/O口与LED数码管所构成的单片机系统的软件编程,使学生掌握简单的单片机系统的设计,同时初步学全用汇编语言和C语言两种方式编程的基本方法。学生必须采用单片机AT89C51为LED显示屏的控制为核心,分别置“1”或“0”,让某些段的LED 发光,其它的熄灭,然后达到显示不同的字符和图符号的目的. 学生根据前期设计的步骤按照设计报告内容的具体要求,选择前期设计的一个典型题目,写出详尽的课程设计报告,重点内容包括方案论证、完整的电路图、软件系统流程图及开发程序、组装调试内容和总结等。

目录 第1节引言 (3) 1.1 LED数码显示器概述 (3) 1.2 设计任务 (5) 1.3设计目的 (6) 第2节AT89C51单片机简介 (6) 2.1 AT89C51单片机 (6) 2.2 单片机管脚图 (7) 2.3管脚说明 (7) 2.4振荡器特性 (9) 第3节设计主程序与硬件电路设计 (9) 3.1设计的主程序 (10) 3.2系统程序所需硬件 (10) 3.2.1所需的硬件 (10) 3.2.2所需硬件的结构图 (11) 3.3 硬件电路总连接图 (12) 第4节程序运行过程 (12) 4.1分析步骤 (12) 4.2 程序执行过程 (13) 第5节程序运行结果 (13) 总结 参考文献

第1节引言 还记得我们小时候玩的“火柴棒游戏”吗,几根火柴棒组合起来,能拼成各种各样的图形,LED数码管显示器实际上也是这么一个东西。在单片机系统中,常常用LED数码数码管显示器来显示各种数字或符号。LED 数码显示器是单片机嵌入式系统中经常使用的显示器件。一个“8”字型的显示模块用“a、b、c、d、e、f、g、h” 8 个发光二极管组合而成。每个发光二极管称为一字段。LED 数码显示器有共阳极和共阴极两种结构形式。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。 1.1 LED数码显示器概述 八段LED数码管显示器由8个发光二极管组成。基中7个长条形的发光管排列成“日”字形,另一个贺点形的发光管在数码管显示器的右下角作为显示小数点用,它能显示各种数字及部份英文字母。LED数码管显示器有两种不一样的形式:一种是8个发光二极管的阳极都连在一起的,称之为共阳极LED数码管显示器;另一种是8个发光二极管的阴极都连在一起的,称之为共阴极LED 数码管显示器。如下图所示。` 共阴和共阳结构的LED数码管显示器各笔划段名和安排位置是相同的。

51单片机控制4个数码管显示09999

//使用AT89c51单片机控制四个数码管动态显示0-9999 ,12MHz #include void jiayi();//加1函数 void chufa();//除法函数 void xianshi();//显示函数 void delay();//延时函数 sbit P2_0=P2^0;//个位位码 sbit P2_1=P2^1;//十位位码 sbit P2_2=P2^2;//百位位码 sbit P2_3=P2^3;//千位位码 unsigned char qianwei,baiwei,shiwei,gewei; unsigned int count=0; unsigned char code dis[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳极0-9 void main() { while(1) { jiayi(); chufa(); xianshi(); } } void chufa()//将数字的各个位拆开 { qianwei=count/1000;//千位数 baiwei=count%1000/100; //百位数 shiwei=count%100/10; //十位数 gewei=count%10; //个位数 } void jiayi() { count=count+1; if(count==10000) count=0; } void delay()//延时 { unsigned int i,j; for(i=0;i<10;i++) { for(j=0;j<200;j++); } } void xianshi()//显示当前数值

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

相关主题