单片机:第五讲-按键与数码管的程序设计
单片机原理及应用——C51编程+Proteus仿真(第3版)课件第5章 开关键盘显示器接口设计

在【例5-1】基础上,编写控制发光二极管反复循环点亮的流水灯。 【例5-2】电路仍采用图5-2,制作由上至下再由下至上反复循环点亮显
示的流水灯,3种方法实现。
(1)数组的字节操作实现 建立1个字符型数组,将控制8个LED显示的8位数据作为数组元素,依
次送P1口。参考程序:
#include <reg51.h> #define uchar unsigned char uchar tab[ ]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f ,
// 读入P1口的状态,送入state // 屏蔽P1口的高6位 // 判P1口低2位开关状态
{
case 0: P2=0x01; break; case 1: P2=0x02; break; case 2: P2=0x04; break; case 3: P2=0x08; break;
// 点亮P2.0脚LED //点亮P2.1脚LED // 点亮P2.2脚LED //点亮P2.3脚LED
} }
//左移初值赋给temp
// temp中的数据取反后送P1口 // 延时 // temp 中数据左移一位 // 赋右移初值给temp
// temp中的数据取反后送P1口 // 延时 // temp 中数据右移一位
15
程序说明: 注意使用移位运算符“>>”、“<<”与使用循环左移函数 “_crol_”和循环右移函数“_cror_” 区别。左移移位运算“<<”是将高位 丢弃,低位补0 ;右移移位运算、“>>”是将低位丢弃,高位补0。而循环 左移函数“_crol_” 是将移出的高位再补到低位,即循环移位;同理循环 右移函数“_cror_” 是将移出的低位再补到高位。
单片机按键程序设计

单片机按键程序设计单片机按键的基本原理其实并不复杂。
通常,按键就是一个简单的开关,当按键按下时,电路接通,对应的引脚电平发生变化;当按键松开时,电路断开,引脚电平恢复到初始状态。
在程序设计中,我们需要不断检测引脚的电平变化,从而判断按键是否被按下。
在实际的按键程序设计中,有多种方式可以实现按键检测。
其中一种常见的方法是查询法。
这种方法是通过不断地读取按键对应的引脚状态来判断按键是否被按下。
以下是一个简单的查询法示例代码:```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void main(){while(1) //无限循环{if(key == 0) //如果按键按下,引脚为低电平{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;while(key == 0);//等待按键松开}}}```上述代码中,我们首先定义了按键连接的引脚`key`,然后在主函数的无限循环中不断检测按键引脚的状态。
当检测到按键按下时,执行相应的操作,并通过`while(key == 0)`等待按键松开。
除了查询法,还有中断法可以用于按键检测。
中断法的优点是能够及时响应按键动作,不会因为程序的其他操作而导致按键响应延迟。
```cinclude <reg51h> //包含 51 单片机的头文件sbit key = P1^0; //定义按键连接的引脚void int0_init()//中断初始化函数{IT0 = 1; //下降沿触发中断EX0 = 1; //使能外部中断 0EA = 1; //开总中断}void int0() interrupt 0 //外部中断 0 服务函数{//执行按键按下的操作//比如点亮一个 LED 灯P2 = 0xfe;}void main(){int0_init();//初始化中断while(1);//无限循环,保持程序运行}```在上述代码中,我们首先在`int0_init` 函数中对中断进行了初始化设置,然后在`int0` 函数中编写了按键按下时的处理代码。
单片机实验报告——矩阵键盘数码管显示

单片机实验报告信息处理实验实验二矩阵键盘专业:电气工程及其自动化指导老师:***组员:明洪开张鸿伟张谦赵智奇学号: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单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
单片机课程设计报告---数码管显示4X4矩阵键盘按键号

课程设计报告书设计名称:单片机原理与应用题目:数码管显示4X4矩阵键盘按键号专业:计算机科学与技术日期:2012 年6月 11日一.设计目的:1) 了解单片机系统实现LED动态显示的原理及方法;2) 较为详细了解8051芯片的性能;3) 能够了解到单片机系统的基本原理,了解单片机控制原理;4) 掌握AT89C51程序控制方法;5) 掌握AT89C51 C语言中的设计和学会分析程序,进而能够根据自己的需要编写代码;6) 掌握4X4矩阵式键盘程序识别原理;7) 掌握4X4矩阵式键盘的设计方法;8) 学习键盘的扫描方式和应用程序设计;9) 培养根据课题需要选学参考书籍、查阅手册和文献资料的能力;10) 能够按课程设计的要求编写课程设计报告,能够正确反映设计和实验成果。
二.设计要求与主要内容:设计要求:单片机的P1口P1.0~P1.7连接4X4矩阵键盘,P0口控制一只P0口控制一只数码管,当4×4矩阵键盘中的某一按键按下时,数码管上显示对应的键号。
例如,1号键按下时,数码管显示“1”,二号按下的时候,数码管显示“2”,14号键按下时,数码管显示“E”等等。
主要内容:1)4×4矩阵键盘程序识别原理。
2)每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。
矩阵的行线和列线都连接到AT89C51中,通过按键K0~K16,来在数码管显示不同的值。
实验步骤:1) 启动keiuvision3 2)新建工程命名为单片机的C语言设计与应用3)新建文件并另存为C51c.c 4)在SourceGroop1导入文件 5)编写代码,并生成C语言设计与应用.hex文件。
6)在Proteus中设计电路图7) 将keil与Proteus联机调试,记下实验记录,得出实验结果。
三.设计程序原理:(包含仿真图和流程图)1)主程序流程图2)程序流程图 若无按键按下若无按键按下若无按键按下若无按键按下结束,返回3)仿真图四.程序代码#include<reg51.h>#define uchar unsigned char#define uint unsigned int//段码ucharcodeDSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};sbit BEEP=P3^7;//上次按键和当前按键的序号,该矩阵中序号范围 0~15,16 表示无按键uchar Pre_KeyNo=16,KeyNo=16;//延时void DelayMS(uint x){ uchar i;while(x--) for(i=0;i<120;i++);}//矩阵键盘扫描void Keys_Scan(){ uchar Tmp;P1=0x0f; //高 4 位置 0,放入 4 行DelayMS(1);Tmp=P1^0x0f; //按键后 0f 变成 0000XXXX,X 中一个为 0,3 个仍为1,通过异或把3个1变为 0,唯一的0变为1switch(Tmp) //判断按键发生于 0~3 列的哪一列{ case 1: KeyNo=0;break;case 2: KeyNo=1;break;case 4: KeyNo=2;break;case 8: KeyNo=3;break;default:KeyNo=16; //无键按下}P1=0xf0; //低 4 位置 0,放入 4 列DelayMS(1);Tmp=P1>>4^0x0f; //按键后 f0 变成 XXXX0000,X 中有 1 个为 0,三个仍为 1;高4位转移到低 4 位并异或得到改变的值switch(Tmp) //对 0~3 行分别附加起始值 0,4,8,12{case 1: KeyNo+=0;break;case 2: KeyNo+=4;break;case 4: KeyNo+=8;break;case 8: KeyNo+=12;}}//蜂鸣器void Beep(){uchar i;for(i=0;i<100;i++){ DelayMS(1);BEEP=~BEEP;}BEEP=0; }//主程序void main(){ P0=0x00;BEEP=0;while(1){ P1=0xf0;if(P1!=0xf0) Keys_Scan(); //获取键序号if(Pre_KeyNo!=KeyNo){ P0=~ DSY_CODE[KeyNo];Beep();Pre_KeyNo=KeyNo;}DelayMS(100);} }五.实验结果:当按键按下k0,显示管显示0,当按键按下k1时显示1,显示管可以显示1,2,3,4,5,6,7,8,9,A,B,C,D,F.六.实验体会:这次的实验提高了我的设计能力与对电路的分析能力。
51汇编按键数码管程序

51单片机汇编按键数码管程序1、硬件设计本设计实现用按键控制数码管从0到9显示。
首先设计硬件电路,连接晶振电路、按键连接到外部中断引脚P3.2、数码管使用共阴数码管连接P2.0~P2.6,如图1。
图1 硬件电路2、程序设计ORG 0000HLJMP MAIN ;跳转到主函数ORG 0003H ;中断入口LJMP INT0SUB ;中断服务函数ORG 0040H ;程序存放起始地址MAIN: MOV SP,#30H ;堆栈指针指向30HMOV A,#81H ;赋值81H,用于配置外部中断MOV IE,A ;使能外部中断MOV A,#01H ;用于配置触发方式MOV TCON,A ;触发方式选择下降沿触发MOV R0,#00H ;按键初始值为零MOV DPTR,#TABLE ;数据表首地址LCALL DISPLAY ;调用显示函数JMP MAIN;共阴数码管0~9数据表TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDISPLAY:MOV A,R0 ;取出按键值MOV B,#0AH ;用于按键值处理DIV AB ;A除以BMOV A,B ;将余数放到累加器AMOVC A,@A+DPTR ;取出数据对应数码管数据 MOV P2,A ;数码管显示JMP DISPLAY ;显示循环INT0SUB: ;按键外部中断服务函数INC R0 ;R0自加1RETI ;中断返回DELAY30: MOV R7,#0FFH ;延时函数D0: MOV R6,#0FFHD00: MOV R5,#0FFHD1: DJNZ R5,D1;D10: DJNZ R6,D10;DJNZ R7,D0RETEND ;结束。
基于单片机的键盘和LED数码管工作原理

基于单片机的键盘和LED数码管工作原理摘要:键盘和显示器是微机最常见的输入输出设备。
本文介绍键盘和LED显示器的基本工作原理,并给出在8051基础上的电路结构及C语言代码。
关键字:键盘,LED,单片机键盘是微型计算机系统中最基本、最常见的输入设备。
在各种工业过程的计算机控制和监视系统中,广泛应用发光二极管向用户提供提示。
由发光二极管可以构成7段/8段LED显示器,用于显示工作状态、参数数值和故障位置。
一.键盘的工作原理键盘实际上是一组按键开关的集合,平时按键开关总是处于断开状态,当按下键时它才闭合。
(一)键盘的基本介绍1.键盘的功能键盘接口必须具有4个基本功能:1.去抖动2.防串键3.识别被按键并产生与之对应的键码4.释放键而键码产生后如何去实现按键的特定功能,是操作系统和应用程序的任务2.键盘的分类根据按键开关的排列方式,键盘可分为线性键盘和矩阵键盘。
线性键盘:硬件连接和接口程序都很简单,只适用于按键少的场合,因为线性键盘有多少按键,就需要有多少根连线与微机输入端口相连。
矩阵键盘:将按键排成n行m列,每个按键占据行列的一个交点,需要的外连接线数目是m+n,而容许的最大按键数是m*n,显然可以减少微机接口的连线,是一般微机常采用的键盘结构。
3.键盘与单片机的连接方式矩阵键盘的连接方法有多种。
可直接连接于单片机的I/O口线;可利用扩展的并行I/O口连接;也可利用可编程的键盘、显示接口芯片(如8297)进行连接等等。
其中,利用扩展的并行I/O口连接方便灵活,在单片机应用系统中比较常用。
下图就是通过8255A芯片扩展的并行I/O口连接的矩阵键盘。
图 1 微处理器和键盘接口接线示意(二)键盘的工作过程被按键的识别和键码的产生是键盘接口要解决的主要问题,可以通过软硬结合的方法来解决。
通常识别被按键有两种方法:行扫描法和线反转法。
实际微型计算机系统中以行扫描法应用最广,其基本思想是:由程序对键盘进行逐行扫描,通过检测到的列状态来确定闭合键,需要输出端口、输入端口各1个。
单片机实验五按键及七段数码管实验

单片机实验五按键及七段数码管实验第一篇:单片机实验五按键及七段数码管实验实验五按键及七段数码管实验一、实验目的1、熟悉keil软件;2、掌握矩阵式按键的原理;3、掌握七段数码管显示的原理;4、掌握STC单片机的按键及数码管程序编写及下载;二、实验要求1、编写矩阵式按键的读取程序、七段数码管的动态显示程序,并将程序结合在一起,产生某一按键按下,显示对应键值的程序。
2、编写串行通信的发送及接收程序,实现串行口跟PC及的通信,并在PC机上用串口调试工具观察实验结果;3、利用keil软件调试程序,并产生.hex文件;4、将.hex文件利用STC单片机下载工具下载到单片机最小系统中,并观察LED灯的显示状态;5、提交实验报告,报告包含程序及LED的显示结果。
三、实验内容1、打开keil软件,熟悉软件的菜单、工作界面及工具。
然后按照keil的编程步骤编写程序(创建工程----选择单片机AT89C51----新建源文件----保存为C程序----编写完整的C51程序----将文件添加到工程----编译并修改错误----连接产生.hex文件)。
2、打开STC下载软件,将keil生成的.hex文件打开,下载到最小系统板,测试程序并观察实验结果。
3、按键及七段LED的程序,实现更多的LED与按键结合的效果。
四、实验说明1、程序中使用的按键及LED灯的IO端口要与自己的单片机最小系统板对应;2、按键程序注意抗消抖;3、思考计算器程序如何实现;第二篇:单片机数码管显示实验实验一数码管实验一、实验目的1.了解数码管的显示原理;2.掌握JXARM9-2440 中数码管显示编程方法二、实验仪器JXARM9-2440教学实验箱、ADT1000仿真器和ADT IDE集成开发环境、串口连接线、PC机。
三、实验原理7段LED由7个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。
LED显示器的接口一般有静态显示与动态显示接口两种方式。
单片机实验五 按键实验

实验五:按键实验一、实验要求实验目的:熟悉和掌握矩阵式键盘的工作原理、电路设计和软件编程方法;熟悉和掌握矩阵式减半的行扫描法和行反转法两种键盘扫描识别方法;掌握键盘延时抖动的消除方法,掌握LED静态扫描显示方式。
实验内容:4*4键盘矩阵的横线连接单片机的P1.0~P1.3端口,列线连接P1.4~P1.7端口,1位LED数码管连接单片机的P0口,编程实现:当按下任意一个按键时,LED数码管显示它在4*4键盘矩阵上的序号0~F二、实验原理线反转法的原理线反转法与行扫描法相比更加简练,无论被按键是处于第一行还是最后一行,均经过两步便可获得该键值所在的行列值。
线反转法的工作原理如图1所示,图1中采用8位I/O端口构成一个4*4的矩阵键盘,P1.0~P1.3作为行线,P1.4~P1.7做列线,采用查询方式进行工作。
下面介绍线反转法的具体操作步骤。
第一步:将列线便成为输入线,将行线便成为输出线,并使输出线的输出为全零电平,则列线中的电平由高到低发生变化的列为按键所在列。
第二步:将第一步中的传送方向反过来,即将行线编程位输入线,列线编程位输出线,并输出第一步中的输入列值,则行线中电平由高到低发生变化的行即为按键所在的行。
综合一、二两步的结果,可确定按键所在的行和列,从而识别出按键所在的键。
例如“键9”被按下,第一步在P1.0~P1.3行线输出全零,然后读入列线值位P1.7~P1.4=1101B,即P1.5=0,与P1.5相连的列线有键被按下。
第二步从列线输出刚才得到的值,再读取行线的输入值,则在闭合键所在的行线上值必定为“0”,即从行线读出的值为P1.3~P1.0=1101B。
于是行值和列值合起来得到唯一的一对行列值:11011101B即0DDH,这个值对应“键9”。
可见先反转法非常简单实用。
三、程序设计1、程序流程图图 1 程序流程图2、程序代码ORG 0000HLJMP STARTORG 0100HSTART: MOV SP, #60HKEY0: MOV P1, #0EFHJNB P1.0, K0JNB P1.1, K4JNB P1.2, K8JB P1.3, E1LJMP K12E1: MOV P1, #0DFHJNB P1.0, K1JNB P1.1, K5JNB P1.2, K9JB P1.3, E2LJMP K12E2: MOV P1, #0BFHJNB P1.0, K2JNB P1.1, K6JNB P1.2, K10JB P1.3, E3LJMP K14E3: MOV P1, #07FHJNB P1.0, K3JNB P1.1, K7JNB P1.2, K11JNB P1.3, K15LJMP KEY0K0: MOV P0, #0C0HLCALL DELAYJMP KEY0K1: MOV P0, #0F9HLCALL DELAYJMP KEY0K2: MOV P0, #0A4HLCALL DELAYJMP KEY0K3: MOV P0, #0B0HLCALL DELAYJMP KEY0K4: MOV P0, #99HLCALL DELAYJMP KEY0K5: MOV P0, #92HLCALL DELAYJMP KEY0K6: MOV P0, #082HLCALL DELAYJMP KEY0K7: MOV P0, #0F8HLCALL DELAYJMP KEY0K8: MOV P0, #80HLCALL DELAYJMP KEY0K9: MOV P0, #090HLCALL DELAYJMP KEY0K10: MOV P0, #88HLCALL DELAYJMP KEY0K11: MOV P0, #083HLCALL DELAYJMP KEY0K12: MOV P0, #0C6HLCALL DELAYJMP KEY0K13: MOV P0, #0A1HLCALL DELAYJMP KEY0K14: MOV P0, #086HLCALL DELAYJMP KEY0K15: MOV P0, #08EHLCALL DELAYJMP KEY0DELAY: M OV R3, #60HLP: MOV R4, #0A8HLP1: MOV R5, #0A8HLP2: DJNZ R5, LP2DJNZ R4, LP1DJNZ R3, LPRETEND设计说明:单片机不断查询各列电平,当某列中有某行的电平被置零,则跳转到改行所在语句,在数码管上显示被按键的数字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五讲
按键与数码管的程序设计
本讲内容: 本讲内容:
AVR IO口的输入模式与上拉电阻 口的输入模式与上拉电阻 选择结构语句与按键的查询方式程序设计 数码管基本原理 扫描方式显示多位数码管
主讲人: 主讲人:尹延辉
版权: 版权:力天电子
输入状态IO寄存器设置 输入状态 寄存器设置
主讲人: 主讲人:尹延辉
版权: 版权:力天电子
�
与选择结构语句的结合
判断PIND & (1 << 6)的值,执行相应代码 的值, 判断 的值
主讲人: 主讲人:尹延辉
版权: 版权:力天电子
八段数码管
八段数码管
由八段LED构成 构成 由八段 阴极或阳极并在一起, 各LED阴极或阳极并在一起,称为"位选线":共阴,共 阴极或阳极并在一起 称为"位选线" 共阴, 阳 其余8个引脚各自引出 称为"段选线" 个引脚各自引出, 其余 个引脚各自引出,称为"段选线",各段可以分别控 制
版权: 版权:力天电子
主讲人: 主讲人:尹延辉
按键的查询方式程序设计
PIND & (1 << 6) 1 << 6 :
1左移 位,即:0b01000000 左移6位 左移
PIND & (1 << 6)
将除第6位之外其他位清零 将除第 位之外其他位清零 第6位保持输入的值 位保持输入的值
逻辑运算符和逻辑表达式
逻辑与&&逻辑或 逻辑非! 逻辑或||逻辑非 逻辑与 逻辑或 逻辑非!
if语句结构 语句结构
if(表达式 表达式1) 语句 语句1 表达式 else if(表达式 表达式2) 语句 语句2 表达式 else 语句 语句3
switch语句结构 语句结构 switch(表达式 表达式) 表达式 {case 常量1:表达式 常量 表达式1 表达式 case常量 表达式 常量2:表达式 常量 表达式2 … default:表达式 表达式n} 表达式
10 9 8 5 4 2 3 7 a b c d e f g DP A A 1 6
GND
a
LED
b
LED
c
LED
d
LED
e
LED
f
LED
g
LED
DP
LED
主讲人: 主讲人:尹延辉
版权: 版权:力天电子
多位合一的数码管
多位合一的数码管
将多个八段数码管的段选线分别并在一起, 将多个八段数码管的段选线分别并在一起,位选线引出
输入状态IO寄存器设置 输入状态 寄存器设置
DDRx某一位置 ,相应位的 口被设置为输入 某一位置0,相应位的IO口被设置为输入 某一位置 PORTx某一位置 ,使能对应 口相应位的上拉电阻 某一位置1,使能对应IO口相应位的上拉电阻 某一位置 PINx的对应位是输入的数据,0或1 的对应位是输入的数据, 或 的对应位是输入的数据
AVR单片机软硬件设计教程 入门篇 单片机软硬件设计教程-入门篇 单片机软硬件设计教程
——学单片机就要学 学单片机就要学AVR! 学单片机就要学 !
主 讲: 尹延辉 策 划:张 勇 学习板:LT-Mini-M16
力天电子版权所有 技术交流QQ群:31646346 2008年 9月
VCC 100k~200k R? InPut
InPut
主讲人: 主讲人:尹延辉
版权: 版权:力天电子选择结语句关系运算符和关系表达式
小于<小于或等于 大于>大于或等于 等于==不等于 不等于!= 小于 小于或等于<=大于 大于或等于 小于或等于 大于 大于或等于>=等于 等于 不等于
主讲人: 主讲人:尹延辉
版权: 版权:力天电子
数码管扫描原理
数码管扫描原理
多位数码管的各个位均可以单独显示不同的数据, 多位数码管的各个位均可以单独显示不同的数据,但一个时刻只 能点亮一位 依次点亮多位数码管中的各个位,由于人眼的视觉暂留效应, 依次点亮多位数码管中的各个位,由于人眼的视觉暂留效应,看 起是来多位同时点亮 请观看程序演示