独立式按键和一位数码显示
单片机应用技术(c语言知识版第3版)[王静霞]习题集标准答案
![单片机应用技术(c语言知识版第3版)[王静霞]习题集标准答案](https://img.taocdn.com/s3/m/9d3b53556f1aff00bed51eb2.png)
习题 11.1 单项选择题(1) A (2)C (3)C1.2 填空题(1)硬件系统、软件系统(2)时钟电路、复位电路(3)XTAL1、XTAL2、RESET、EA(4)晶振1.3 问答题什么是单片机?它由哪几部分组成?什么是单片机应用系统?答:单片微型计算机(Single Chip Microcomputer)简称单片机,是指集成在一个芯片上的微型计算机,它的各种功能部件,包括CPU(Central Processing Unit)、存储器(memory)、基本输入/输出(Input/Output,简称I/O)接口电路、定时/计数器和中断系统等,都制作在一块集成芯片上,构成一个完整的微型计算机。
单片机应用系统是以单片机为核心,配以输入、输出、显示等外围接口电路和控制程序,能实现一种或多种功能的实用系统。
1.4 上机操作题(1)参考程序:#include <reg51.h> //包含头文件reg51.h,定义了51单片机的专用寄存器//函数名:delay//函数功能:实现软件延时//形式参数:无符号整型变量i,控制空循环的循环次数//返回值:无void delay(unsigned int i) //延时函数{unsigned int k;for(k=0;k<i;k++);}void main() //主函数{while(1){P1=0x00;delay(20000); //调用延时函数,实际参数为20000P1=0xff;delay(20000); //调用延时函数,实际参数为20000}}(2)参考程序:#include <reg51.h> //包含头文件reg51.h,定义了51单片机的专用寄存器//函数名:delay//函数功能:实现软件延时//形式参数:无符号整型变量i,控制空循环的循环次数//返回值:无void delay(unsigned int i) //延时函数{unsigned int k;for(k=0;k<i;k++);}void main() //主函数{while(1){P1=0x55;delay(20000); //调用延时函数,实际参数为20000P1=0xff;delay(20000); //调用延时函数,实际参数为20000}}习题 22.1 单项选择题(1)C (2)A (3)A (4)A (5)A (6)D (7)C (8)A (9)A (10)C 2.2 填空题(1)外部程序存储器、外部数据存储器、内部程序存储器、内部数据存储器(2)程序存储器(3)工作寄存器组、位寻址区、用户RAM(4)1us、2us(5)按键复位、上电复位(6)2、高2.3 回答题(1)P3口的第二功能是什么?答:P3口各引脚的第二功能如下表。
独立按键的工作原理
![独立按键的工作原理](https://img.taocdn.com/s3/m/17d779aaf9c75fbfc77da26925c52cc58ad6905e.png)
独立按键的工作原理
独立按键是指通常用于电脑键盘、遥控器、电子器件等设备上的按键。
它们被设计为独立的物理结构,可以单独按下并产生相应的信号。
独立按键的工作原理可以分为两类:机械按键和触控按键。
1. 机械按键
机械按键通常由按键帽、按键轴、金属弹片、固定支撑件和电路板等组成。
当按键被按下时,按键帽向下施加力量。
这个力量会通过按键轴传递给金属弹片,使其产生形变。
金属弹片的形变会改变其接触状态,进而在电路板上的触点之间产生通断操作。
电路板上的触点连接到控制器电路,当触点触发时,它会向控制器发送一个特定的电信号。
控制器通过接收到的信号来识别按键的按下,并执行相应的操作。
2. 触控按键
触控按键使用电容或电阻触控技术来检测按键操作。
对于电容触控按键,电容传感器被置于按键下方。
当手指接触到按键时,手指和电容传感器之间会形成一个电容耦合。
这个电容耦合的变化会被电路检测和处理,并转换为数字信号,从而识别出按键被按下的操作。
对于电阻触控按键,控制电路会将一个非常小的电流通过由两个导电层构成的按键表面。
当手指接触到按键时,手指和导电层之间的电阻值会发生变化。
电路检测到这种变化后,将其转化为数字信号,以识别按键操作。
总之,独立按键的工作原理可以通过机械或触控技术实现。
无论是机械按键还是触控按键,它们都能够产生相应的信号,用于识别按键被按下的操作。
独立式键盘程序
![独立式键盘程序](https://img.taocdn.com/s3/m/e67b9ad19fc3d5bbfd0a79563c1ec5da50e2d6c4.png)
51单片机:键盘控制程序2009-11-14 16:12键盘控制1.功能说明:用八位指拨开关(DIP)作单片机的输入,控制输出端口连接的八只LED发光二极管。
如若DIP1开关为 ON(向右拨动)则LED1亮,其它开关作用同。
程序:LOOP: MOV A, P3 ; 从P3读入DIP开关值MOV P1, A ; 从P1输出03: JMP LOOP ; 无穷循环04: END ;程序结束2.功能说明:用DIP开关中的低4位作二进制的输入,控制输出端数码管显示器的输出。
程序:01: MOV DPTR,#TABLE ; 存表02: MOV P0, #0FFH ; LED全灭03: LOOP: MOV A, P3 ; 从P3口读入DIP开关值04: ANL A, #0FH ; 高4位清0,取低四位05: ACALL CHANG ; 转成七段显示码06: MOV P0, A ; 从P0输出07: JMP LOOP ; 转移LOOP处,循环08: CHANG: MOVC A,@A+DPTR ; 取码09: RET ; 返回转换显示码子程序10: TABLE: DB 0C0H, 0F9H, 0A4H, 0B0H ;11: DB 99H, 92H, 82H, 0F8H ;12: DB 80H, 90H, 88H, 83H ;13: DB 0C6H, 0A1H, 86H, 8EH ; 显示码表14: END ;程序结束3.功能说明:用两个按键开关K1和K2作输入,K1为电源指示灯开关,K2为工作指示灯开关。
分别控制电源指示灯(P1.0接的LED)和工作指示灯(P1.7接的LED)的接通和关闭。
接通电源时,电源指示灯是在亮的状态。
当按K2时,工作指示灯亮,电源指示灯灭。
按K1时,电源指示灯亮,工作指示灯灭。
程序:01: START: MOV P1, #11111110B ; P1.0所接LED亮02: JB P2.5 , $ ; 判断P2.5(K2键)是否为103: ON: MOV P1, #01111111B ; P1.7所接LED亮04: JNB P2.4, START ; 判断P2.4(K1键)是是否为005: JMP ON ; 未按K1键,则跳至ON06: END ;程序结束4.功能说明:由四个按键开关组成独立式键盘,控制灯左移、右移和闪烁。
【系统】数字化医疗仪器复习题
![【系统】数字化医疗仪器复习题](https://img.taocdn.com/s3/m/183f2ff1b52acfc788ebc9ef.png)
【关键字】系统《数字化医疗仪器》(数据采集系统)复习题答案2、医学仪器微机数据采集系统2.1、模数与数模转换器应用(1)判断题ADC0809可以利用转换结束信号EOC向8031发出中断请求。
(√)(2)单选题①ADC0809芯片的输出允许信号为(B)。
(A)STAT (B)OE (C)EOC (D)ALE②A/D转换器的分辨率是指(D)"(A)A/D转换器的转换电压范围(B)A/D转换器的位数(C)A/D转换器的转换时间(D)能分辨最小的量化信号的能力"(1)判断题A/D转换器转换精度最高的类型是积分式ADC。
(√)(2)单选题①A/D转换器转换速度最快的的类型是(C)。
(A)逐次逼近式(B)积分式(C)并行式(D)计数式②一个八位的ADC器件,当参考电压为+5V时,该芯片能分辨的最小信号电压为:(B)(A)5V (B)19.53mV (C)39.06mV (D)0.05V(1)判断题DAC0832是一个带单缓冲锁存器的8位D/A转换器。
(×)(2)单选题①D/A转换器的分辨率是指(D)(A)转换输出电压范围(B)D/A转换器的位数(C)D/A转换时间(D)输入D/A转换器单位数码所对应的转换输出电压②当单片机接口的两路数模转换电路电压需要同时输出时,必须采用(D)。
(A)单极性输出电路(B)双极性输出电路(C)单缓冲输出电路(D)双缓冲输出电路2.2、数据采集系统(1)判断题数据采集系统中不一定有A/D转换器件。
(×)(2)单选题①如果被测信号变化很缓慢,多道传感数据采集系统可以不用的器件是(C)。
(A)多路模拟开关(B)放大器(C)采样保持器(D)A/D转换器②当采样器的采样频率fS与输入信号最高频率fm两者之间的关系满足(D)时,采样输出信号fS(t)能恢复成输入模拟信号f(t)。
(A)fS≥0.5fm (B)fS≥fm (C)fS≥1.5fm (D)fS≥2fm(1)判断题多路模拟开关的主要用途是把模拟信号同时地送入A/D转换器。
智能抢答器的设计
![智能抢答器的设计](https://img.taocdn.com/s3/m/bf69df7eac02de80d4d8d15abe23482fb4da0200.png)
项目名称:智能抢答器一、选题背景随着我国经济和文化事业的飞速发展,在很多公开竞争场合要求有公正的竞争裁决,诸如证券、股票交易及各种智力竞赛等,因此出现了抢答器。
抢答器一般是由很多电路组成的,线路复杂,可靠性不高,功能也比较简单,特别是当抢答路数很多时,实现起来就更为困难。
因此我们设计了以单片机为核心的新型智能的抢答器,在保留原始抢答器的基本功能的同时又增加了数码管显示。
智能抢答器主要应用于各种知识竞赛、文艺活动等场合。
二、题目要求1.主要教学内容用单片机系统设计智力竞赛抢答器逻辑控制电路,具体要求:(1)抢答组数为3组,输入抢答信号的按键需完成无抖动功能;(2)能迅速、准确地判处抢答者,同时能排除其它组的干扰信号,闭锁其它各路输入使其它组再按开关时失去作用,并能对抢中者有显示和鸣叫指示;(3)每组有1位十进制计分显示电路,能进行加/减计分;(4)当抢答开始后,指示灯应闪亮;当有某组抢答时,指示灯灭,最先抢答一组的灯亮,并发出音响;也可以驱动组别数字显示(用数码管显示);(5)回答问题的时间应可调整,分别为15s、30;主持人应有复位按钮和开始抢答按钮。
2.教学要求选择适当元器件设计单片机外围电路,单片机系统完成抢答、判别选组、计数、显示、定时及音响提示、复位控制功能;仿真实现各电路功能;搭建、调试电路实现设计要求的功能;掌握单片机系统及外围电路的一般设计方法,具备初步的独立设计能力;掌握对单片机系统进行仿真调试的方法和技能;掌握实现电路的实验方法和电路的调试方法。
三、设计方案在设计中采用的是AT89C51作为控制的核心,从而使得各个模块能够相互合作,共同完成,该系统包括共5个模块,通过9个按键控制,主持人5个按键,分别是开始抢答、抢答结束、加减分、复位,三个答题选手各一个按键。
当主持人按下开始抢答后,抢答选手即可按下按键,发出声光提示并且数码管显示该位选手的序号,当主持人没有按下开始抢答时,选手按下抢答时,则出现违规抢答,发出声光提示并且数码管显示该位选手的序号,主持人按下“开始答题”按钮后,数码管开始倒计时,从15到0一秒减一下,也就是抢答倒计时,在数码管显示0之前,4个开关无论哪一个先按下,LED灯就会亮,同时蜂鸣器不在进行鸣叫,从而实现了抢答的功能与显示。
单片机应用技术(C语言版)第2版课后习题答案-王静霞
![单片机应用技术(C语言版)第2版课后习题答案-王静霞](https://img.taocdn.com/s3/m/9858652b2e60ddccda38376baf1ffc4ffe47e240.png)
3
LED数码若采用动态显示方式,下列说法错误的是__________。
A.将各位数码管的段选线并联
B.将段选线用一个8位I/O端口控制
C.将各位数码管的公共端直接连接在+5V或者GND上
D.将各位数码管的位选线用各自独立的I/O端口控制
C
4
共阳极LED数码管加反相器驱动时显示字符“6”的段码是_________。
规定一个机器周期的宽度为12个振荡脉冲周期,因此机器周期就是振荡脉冲的十二分频。
当振荡脉冲频率为12MHz时,一个机器周期为1µs;当振荡脉冲频率为6MHz时,一个机器周期为2µs。
序号
知识点
题型
内容
答案
1
项目三单片机并行I/O端口的应用
3.1单项选择题
下面叙述不正确的是()
A.一个C源程序可以由一个或多个函数组成
P3口各引脚与第二功能表
引脚
第二功能
信号名称
P3.0
RXD
串行数据接收
P3.1
TXD
串行数据发送
P3.2
外部中断0申请
P3.3
外部中断1申请
P3.4
T0
定时/计数器0的外部输入
P3.5
T1
定时/计数器1的外部输入
P3.6
外部RAM写选通
P3.7
外部RAM读选通
3
什么是机器周期?机器周期和晶振频率有何关系?当晶振频率为6MHz时,机器周期是多少?
voiddelay(void)
{inti;
for(i=0; i<10000; i++);
}
10000
12
在单片机的C语言程序设计中,______________类型数据经常用于处理ASCII字符或用于处理小于等于255的整型数。
独立键盘工作原理
![独立键盘工作原理](https://img.taocdn.com/s3/m/7988963f8f9951e79b89680203d8ce2f01666515.png)
独立键盘工作原理
独立键盘是一种与计算机分开使用的输入设备,其工作原理与传统键盘基本相同。
它通过按下键盘上的按键来产生相应的电信号,然后将这些信号传递给计算机进行处理。
在独立键盘内部,每个按键都与一个开关相连。
当按键被按下时,开关闭合,从而导通了电路。
这会触发一个微控制器(或键盘控制器)内的扫描程序,该程序会检测到按键被按下,并将其编码为一个数字或字符。
为了将这些编码信息传输给计算机,独立键盘通常使用一种被称为“键盘扫描码”的协议。
在这个协议中,扫描程序将按键的编码通过一个称为“电脑键盘接口”的连接器传递给计算机。
计算机通过接收键盘发送的扫描码来识别按键。
它将接收到的扫描码与键盘布局映射进行匹配,以确定按下的是哪个键。
然后,计算机会将这个按键信息传递给应用程序,以执行相应的操作或响应。
除了发送按键编码外,独立键盘还可以发送其他类型的信息,例如功能键(如Shift、Ctrl、Alt等键)的状态信息。
这些信息可以帮助计算机识别是否同时按下了功能键,并触发相应的功能。
总的来说,独立键盘工作原理包括按下按键触发开关闭合,扫描程序检测到按键被按下并将其编码,发送给计算机来识别并
执行相应操作。
这种设计使独立键盘成为一种方便、可靠且易于使用的输入设备。
单片机原理及接口技术(C51编程)(第2版)-习题答案 - 第5章习题解答
![单片机原理及接口技术(C51编程)(第2版)-习题答案 - 第5章习题解答](https://img.taocdn.com/s3/m/f12493cc360cba1aa811da6a.png)
第5章思考题及习题5参考答案一、填空1. AT89S51单片机任何一个端口要想获得较大的驱动能力,要采用电平输出。
答:低2.检测开关处于闭合状态还是打开状态,只需把开关一端接到I/O端口的引脚上,另一端接地,然后通过检测来实现。
答: I/O端口引脚的电平3. “8”字型的LED数码管如果不包括小数点段共计段,每一段对应一个发光二极管,有和两种。
答:7,共阳极,共阴极4. 对于共阴极带有小数点段的数码管,显示字符“6”(a段对应段码的最低位)的段码为,对于共阳极带有小数点段的数码管,显示字符“3”的段码为。
答:7DH,B0H5. 已知8段共阳极LED数码显示器要显示某字符的段码为A1H(a段为最低位),此时显示器显示的字符为。
答:d6. LED数码管静态显示方式的优点是:显示闪烁,亮度,比较容易,但是占用的线较多。
答:无,较高,软件控制,I/O口7. 当显示的LED数码管位数较多时,一般采用显示方式,这样可以降低,减少的数目。
答:动态,成本,I/O端口8. LCD 1602是型液晶显示模块,在其显示字符时,只需将待显示字符的由单片机写入LCD 1602的显示数据RAM(DDRAM),内部控制电路就可将字符在LCD上显示出来。
答:字符,ASCII码9. LCD 1602显示模块内除有字节的 RAM外,还有字节的自定义,用户可自行定义个5×7点阵字符。
答:80,显示数据,64,字符RAM,810.当按键数目少于8个时,应采用式键盘。
当按键数目为64个时,应采用式键盘。
答:独立,矩阵11.使用并行接口方式连接键盘,对独立式键盘而言,8根I/O口线可以接个按键,而对矩阵式键盘而言,8根I/O口线最多可以接个按键。
答:8,6412.LCD 1602显示一个字符的操作过程为:首先,然后,随后,最后。
答:读忙标志位BF,写命令,写显示字符,自动显示字符二、判断对错1.P0口作为总线端口使用时,它是一个双向口。
实验四 键盘及显示实验
![实验四 键盘及显示实验](https://img.taocdn.com/s3/m/b15be6d580eb6294dd886c55.png)
实验四键盘及显示实验一、实验目的1、学习自制键盘与单片机的接口及程序处理方法;2、掌握数码管显示电路的构成及程序编制方法。
二、实验仪器设备THGZ—1型单片机·CPLD/FPGA开发综合实验装置1台。
三、实验内容与要求通过键盘输入数据和操作指令,并由LED显示器显示相关数据。
1、独立式键盘与动态LED显示起初显示器全黑,当按KEY1~KEY8任意键后,显示器显示与键号对应的字符(“1”~“8”),每次按键对应字符显示在最右边,前一次的左移一位。
图2-4.1 独立式键盘与动态LED显示实验电路2、矩阵式键盘与动态LED显示①单字符的循环显示起初显示器显示“In ”,按键盘上的“0”~“9”任意键后再按“开始”键,6位LED 显示器马上左循环显示(左移速度0.5s/字符)键入的字符,按“停止”键可以重复以上过程。
图2-4.2 单字符的循环显示实验电路②延时函数的时间测量用定时器/计数器0测量如下延时函数的延时时间。
delaytest(unsigned int time){ unsigned int i,j;for (i=0;i<time;i++)for (j=0;j<65535;j++);}开机显示“good”;按“测量”键后显示“InPArA”表明要通过键盘输入延时函数的实参值,输入实参值并显示该值;按“测量”键后以ms为单位显示测量结果;再按“测量”键将重复以上过程。
图2-4.3 延时函数的时间测量实验电路四、思考题1、比较独立式键盘与矩阵式键盘的异同。
2、键盘处理程序包括哪些过程?2、如何识别键盘上的各键?键值有何意义?3、何为消抖?有何意义?如何实现?实验四源程序清单TEST4-1.C#include <reg51.h>#define KeyISegCodeO P1 /*定义键盘输入口/动态LED显示器段码输出口*/#define BitCtrO P2 /*定义动态LED显示器位控码输出口*/unsigned char DispBuf[6]={10,10,10,10,10,10}; /*显示数组,初始化为不显示*/void delay(unsigned char time) /*延时函数*/{ unsigned char i,j;for (i=0;i<time;i++)for (j=0;j<255;j++);}unsigned char KeyBoardScan() /*键盘扫描函数*/{ unsigned char KeyV alue=0; /*键值,无键按下为0*/BitCtrO=0; /*关闭显示*/KeyISegCodeO=0xff; /*由输出转为输入*/if (KeyISegCodeO!=0xff){ delay(12); /*消抖延时约10ms(fosc=12MHz)*/if (KeyISegCodeO!=0xff){ switch (KeyISegCodeO){ case 0xfe: KeyV alue=1;break; /*KEY1按下,键值为1*/case 0xfd: KeyV alue=2;break; /*KEY2按下,键值为2*/case 0xfb: KeyV alue=3;break; /*KEY3按下,键值为3*/case 0xf7: KeyV alue=4;break; /*KEY4按下,键值为4*/case 0xef: KeyV alue=5;break; /*KEY5按下,键值为5*/case 0xdf: KeyV alue=6;break; /*KEY6按下,键值为6*/case 0xbf: KeyV alue=7;break; /*KEY7按下,键值为7*/case 0x7f: KeyV alue=8;break; /*KEY8按下,键值为8*/}while (KeyISegCodeO!=0xff); /*等待键释放*/}}return(KeyV alue); /*返回键值*/}void display(unsigned char NumLED) /*显示函数*/{ unsigned char code SegCode[16]={63,6,91,79,102,109,125,7,127,111,0}; /*0~9、显黑共阴极段码*/ unsigned char i;BitCtrO=1; /*指向显示器末位*/for (i=0;i<NumLED;i++){ KeyISegCodeO=SegCode[DispBuf[i]]; /*显示当前位*/delay(5); /*延时约4ms(fosc=12MHz)*/BitCtrO=BitCtrO<<1; /*指向前一位*/}}main(){ unsigned char KeyV alue,i;while(1){ KeyV alue=KeyBoardScan(); /*扫描键盘获得键值*/if (KeyV alue!=0){ /*显示缓冲区刷新*/for (i=5;i>0;i--)DispBuf[i]=DispBuf[i-1];DispBuf[0]=KeyV alue;}display(6); /*显示(6位)*/}}TEST4-2.1.C#include <reg51.h>#include <intrins.h>#define KeyROCISegCodeO P1 /*定义键盘行输出列输入/段码输出口*/#define BitCtrO P2 /*定义动态LED显示器位控码输出口*/#define NumRow 3 /*定义键盘行数为3*/#define NumColumn 4 /*定义键盘列数为4*/unsigned char DispBuf[6]={10,10,10,10,11,1}; /*显示数组,初始化为显示"In "*/unsigned char c_50ms=1; /*50毫秒计数*/void delay(unsigned char time) /*延时函数*/{ unsigned char i,j;for (i=0;i<time;i++)for (j=0;j<255;j++);}unsigned char KeyBoardScan() /*键盘扫描函数*/{ unsigned char row=NumRow,RowCode,column=NumColumn,ColumnState; /*行循环、行码、列循环、列状态*/BitCtrO=0; /*关闭显示*/KeyROCISegCodeO=0xf8; /*键盘行线均输出0*/if ((KeyROCISegCodeO|0x0f)!=0xff){ /*有键按下*/delay(12); /*消抖延时约10ms(fosc=12MHz)*/KeyROCISegCodeO=0xf8; /*键盘行线均输出0*/if ((KeyROCISegCodeO|0x0f)!=0xff){ /*确实有键按下,寻找是哪个键*/RowCode=0xfe; /*指向第1行*/for(row=0;row<NumRow;row++) /*扫描共NumRow行*/{ KeyROCISegCodeO=RowCode; /*当前行*/ColumnState=KeyROCISegCodeO|0x0f; /*获取列状态*/for(column=0;column<NumColumn;column++) /*查询共NumColumn列的状态*/if ((ColumnState|0x7f)==0x7f){ while ((KeyROCISegCodeO|0x0f)!=0xff); /*等待键释放*/return(row*NumColumn+column); /*返回键值*/}elseColumnState=_crol_(ColumnState,1); /*指向下一列*/RowCode=_crol_(RowCode,1); /*指向下一行*/}}}return(NumRow*NumColumn); /*返回无键值*/}void display(unsigned char NumLED) /*显示函数*/{ unsigned char code SegCode[12]={63,6,91,79,102,109,125,7,127,111,0,84}; /*0~9、黑、n共阴极段码*/ unsigned char i;BitCtrO=1; /*指向显示器末位*/for (i=0;i<NumLED;i++){ KeyROCISegCodeO=SegCode[DispBuf[i]]; /*显示当前位*/delay(6); /*延时约5ms(fosc=12MHz)*/BitCtrO=BitCtrO<<1; /*指向前一位*/}}main(){ unsigned char i,KeyV alue,lock=0; /*循环,键值,键联锁:0:"停止"键有效、1:数字键有效、2:"开始"键有效*/TMOD=1; /*定时计数器0定时、方式1*/TH0=(65536-50000)/256; /*定时计数器0定时50ms*/TL0=(65536-50000)%256;ET0=1; /*开定时计数器0中断*/EA=1; /*开总中断*/while(1){ KeyV alue=KeyBoardScan(); /*扫描键盘获得键值*/switch (KeyV alue) /*键处理*/{ case 12: break; /*无键按下不处理*/case 11: { if (lock==0){ /*"停止键"有效及处理*/TR0=0; /*关闭T0*/DispBuf[5]=1; /*左边第1个数码管显"I"*/DispBuf[4]=11; /*左边第2个数码管显"n"*/for (i=0;i<4;i++) DispBuf[i]=10; /*后面4个数码管显黑*/lock=1; /*数字键有效*/}} break;case 10: { if (lock==2){ /*"开始"键有效及处理*/TR0=1; /*启动T0*/lock=0; /*"停止"键有效*/}} break;default: { if (lock==1){ /*数字键有效及处理*/DispBuf[0]=KeyV alue; /*右边第1个数码管显键入的字符*/for (i=5;i>0;i--) DispBuf[i]=10; /*其余5个显黑*/lock=2; /*"开始"键有效*/}}}display(6); /*数码管(6个)显示*/}}/**********定时计数器0中断处理程序*********/TC0() interrupt 1 using 1{ unsigned char temp,i;TH0=(65536-50000)/256; /*定时计数器0重新定时50ms*/TL0=(65536-50000)%256;if (c_50ms++>10){ /*0.5s后使键入字符左环移1位*/c_50ms=1;temp=DispBuf[5];for (i=5;i>0;i--) DispBuf[i]=DispBuf[i-1];DispBuf[0]=temp;}}TEST4-2.2.C#include <reg51.h>#include <intrins.h>#define KeyROCISegCodeO P1 /*定义键盘行输出列输入/段码输出口*/#define BitCtrO P2 /*定义动态LED显示器位控码输出口*/#define NumRow 3 /*定义键盘行数为3*/#define NumColumn 4 /*定义键盘列数为4*/unsigned char DispBuf[6]={10,10,13,12,12,9}; /*显示数组,初始化为显示"good "*/unsigned long total; /*T0溢出计数*/void delay(unsigned char time) /*延时函数*/{ unsigned char i,j;for (i=0;i<time;i++)for (j=0;j<255;j++);}void delaytest(unsigned int time) /*延时函数*/{ unsigned int i,j;for (i=0;i<time;i++)for (j=0;j<65535;j++);}unsigned char KeyBoardScan() /*键盘扫描函数*/{ unsigned char row=NumRow,RowCode,column=NumColumn,ColumnState; /*行循环、行码、列循环、列状态*/BitCtrO=0; /*关闭显示*/KeyROCISegCodeO=0xf8; /*键盘行线均输出0*/if ((KeyROCISegCodeO|0x0f)!=0xff){ /*有键按下*/delay(12); /*消抖延时约10ms(fosc=12MHz)*/KeyROCISegCodeO=0xf8; /*键盘行线均输出0*/if ((KeyROCISegCodeO|0x0f)!=0xff){ /*确实有键按下,寻找是哪个键*/RowCode=0xfe; /*指向第1行*/for(row=0;row<NumRow;row++) /*扫描共NumRow行*/{ KeyROCISegCodeO=RowCode; /*当前行*/ColumnState=KeyROCISegCodeO|0x0f; /*获取列状态*/for(column=0;column<NumColumn;column++) /*查询共NumColumn列的状态*/if ((ColumnState|0x7f)==0x7f){ while ((KeyROCISegCodeO|0x0f)!=0xff); /*等待键释放*/return(row*NumColumn+column); /*返回键值*/ }elseColumnState=_crol_(ColumnState,1); /*指向下一列*/RowCode=_crol_(RowCode,1); /*指向下一行*/ }}}return(NumRow*NumColumn); /*返回无键值*/}void display(unsigned char NumLED) /*显示函数*/{ unsigned char code SegCode[18]={63,6,91,79,102,109,125,7,127,111,0,84,92,94,115,119,80,121}; /*0~9、黑、n、o、d、P、A、r、E共阴极段码*/unsigned char i;BitCtrO=1; /*指向显示器末位*/for (i=0;i<NumLED;i++){ KeyROCISegCodeO=SegCode[DispBuf[i]]; /*显示当前位*/delay(6); /*延时约5ms(fosc=12MHz)*/BitCtrO=BitCtrO<<1; /*指向前一位*/ }}void error(){ DispBuf[5]=17; /*显"E"*/DispBuf[4]=16; /*显"r"*/DispBuf[3]=16; /*显"r"*/DispBuf[2]=12; /*显"o"*/DispBuf[1]=16; /*显"r"*/DispBuf[0]=10; /*显黑*/}main(){ unsigned char temp,NumBit,i,KeyV alue; /*临时、数字位数,循环,键值*/ unsigned long result; /*实参值/测量结果*/bit lock=0 ; /*键联锁:0:"测量"键有效、1:数字键/"确认"键有效*/ TMOD=1; /*定时T0定时方式1*/TH0=0;TL0=0;ET0=1; /*开T0中断*/EA=1; /*开总中断*/while(1){ KeyV alue=KeyBoardScan(); /*扫描键盘获得键值*/switch (KeyV alue) /*键处理*/{ case 12: break; /*无键按下不处理*/case 11: { if (lock==0){ /*"测量键"有效及处理*/DispBuf[5]=1; /*显"I"*/DispBuf[4]=11; /*显"n"*/DispBuf[3]=14; /*显"P"*/DispBuf[2]=15; /*显"A"*/DispBuf[1]=16; /*显"r"*/DispBuf[0]=15; /*显"A"*/NumBit=0; /*无数字输入*/lock=1; /*数字/"确认"键有效*/}} break;case 10: { if (lock){ /*"确认"键有效及处理*/if (NumBit>0) /*限定必须输入至少1位实参值*/{ /*获得有效数字位*/for (i=4;i>0;i--)if (DispBuf[i]==10) DispBuf[i]=0;else break;result=10000*DispBuf[4]+1000*DispBuf[3]+100*DispBuf[2]+10*DispBuf[1]+DispBuf[0]; /*获得实参值*/if (result<65536&&result!=0){ total=0; /*T0溢出计数初值0*/TR0=1; /*启动T0*/delaytest((unsigned int)result);TR0=0; /*关闭T0*/result=(total*65536+TH0+TL0)/1000; /*获得ms为单位的测量结果*/if (result<1000000){ /*显示测量结果*/for (i=0;i<6;i++) /*获得测量结果数字位*/{ DispBuf[i]=result%10;result/=10;}for (i=5;i>0;i--) /*去掉测量结果数字位无效0*/if (DispBuf[i]==0)DispBuf[i]=10 ;else break;}elseerror(); /*结果超出显示范围,提示出错*/}elseerror(); /*实参为0或超出65535,提示出错*/}elseerror(); /*实参为0,提示出错*/lock=0; /*"测量"键有效*/}} break;default: { if (lock){ /*数字键有效及处理*/if (NumBit++<5) /*限定只能输入1~5位实参值*/{ if(NumBit!=1){ /*数字位左移*/temp=DispBuf[5];for (i=5;i>0;i--) DispBuf[i]=DispBuf[i-1];DispBuf[0]=temp;DispBuf[0]=KeyV alue;}else{ if (KeyV alue==0){ /*第1位数字为0,提示出错*/error();lock=0; /*"测量"键有效*/}else{ for (i=5;i>0;i--) DispBuf[i]=10;DispBuf[0]=KeyV alue;}}}else{ error();lock=0; /*"测量"键有效*/}}}}display(6); /*数码管(6个)显示*/}}/*******T0中断处理程序*******/TC0() interrupt 1 using 1{ total++;}。
键盘输入与LCD显示原理
![键盘输入与LCD显示原理](https://img.taocdn.com/s3/m/874700c32cc58bd63186bd31.png)
200Ω×8
g
d
dp
b
e
c
8155
0
1
2
3
4
a 5
f
6
PA0~PA7
电路的接法决定了必须采用逐位扫描显示方式。 即从段选口送出某位LED的字型码,然后选通该位LED, 即从段选口送出某位LED的字型码,然后选通该位LED, 并 保持一段延时时间。然后选通下一位,直到所有位扫描完。
要注意的两个问题:
1.字型码通常通过查表指令MOVC来求得. 1.字型码通常通过查表指令MOVC来求得. 2.换位显示时通常要加一段程序使所有的LED全灭. 2.换位显示时通常要加一段程序使所有的LED全灭.
com
com
例:模拟产品计数显示电路
段 显
编 程
ORG 1000H STAR:MOV TMOD,#60H ;定时器T1工作在方式2计数 MOV TH1,#00H ;T1置初值 MOV TL1,#00H MAIN:MOV P1,#0C0H ;数码管显示0 DISP:JB P3.3,DISP ;监测按键信号 ACALLDELAY ;消抖延时 JB P3.3,DISP ;确认低电平信号 DISP1:JNB P3.3,DISP1 ;监测按键信号 ACALLDELAY ;消抖延时 JNB P3.3,DISP1 ;确认高电平信号 SETB TR1 ;启动计数器 DISP2:MOV A,TL1 MOVC A,@A+DPTR ;查表获取数码管显示值 MOV P1,A ;数码管显示计数值 CJNE A,#8E,DISP2 LJMP STAR TAB:0C0H,0F9H,0A4H … … DELAY:MOV R2,#14H DELAY1:MOV R3,#0FAH DJNZ R3,$ DJNZ R2,DELAY1 RET END
最新单片机原理及接口技术-C51编程(张毅刚第二版)-习题答案
![最新单片机原理及接口技术-C51编程(张毅刚第二版)-习题答案](https://img.taocdn.com/s3/m/4df218a6be1e650e53ea99d3.png)
单片机原理及接口技术-C51编程(张毅刚第二版)-习题答案------------------------------------------作者xxxx------------------------------------------日期xxxx单片机原理及接口技术(C51编程)(第2版)-习题答案汇总23单片机答案第1章单片机概述思考题及习题1 参考答案一、填空1。
除了单片机这一名称之外,单片机还可称为( )或( ).答:微控制器,嵌入式控制器.2.单片机与普通微型计算机的不同之处在于其将( )、()和( )三部分,通过内部( )连接在一起,集成于一块芯片上。
答:CPU、存储器、I/O口、总线3。
AT89S51单片机工作频率上限为( )MHz。
答:24MHz。
4。
专用单片机已使系统结构最简化、软硬件资源利用最优化,从而大大降低( )和提高()。
答:成本,可靠性.二、单选1. 单片机内部数据之所以用二进制形式表示,主要是A.为了编程方便 B。
受器件的物理性能限制C.为了通用性 D.为了提高运算数度答:B2. 在家用电器中使用单片机应属于微计算机的.A.辅助设计应用B。
测量、控制应用C.数值计算应用D.数据处理应用答:B3. 下面的哪一项应用,不属于单片机的应用范围。
A.工业控制 B.家用电器的控制C.数据库管理D.汽车电子设备答:C三、判断对错1. STC系列单片机是8051内核的单片机。
对2. AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、1个中断源、1个定时器(且具有捕捉功能)。
对3. 单片机是一种CPU。
错4。
AT89S52单片机是微处理器。
错5. AT89S51片内的Flash程序存储器可在线写入(ISP),而AT89C52则不能.对 6.为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换.对7。
独立式键盘的设计与应用实验报告
![独立式键盘的设计与应用实验报告](https://img.taocdn.com/s3/m/521abafe534de518964bcf84b9d528ea81c72f8c.png)
独立式键盘的设计与应用实验报告实验报告:指导教师:xxx实验者:13410801 xx 13410802 xxx一、实验目的:1.了解直接输入键盘与矩阵键盘的原理。
2.了解键盘寄存器的功能。
3.掌握键盘输入的编程方法。
二、实验要求:1.对所有16个按键进行编码,当按键后,在七段数码管上显示对应的键盘编码(可以使用一个或两个七段数码管)。
2.对所有16个按键进行编码,当按键后,在八个LED上显示对应的键盘编码。
三、实验内容:1.在键盘寄存器KPC中,使能矩阵键盘。
2.必须在使用前添加下面语句:#define KAPS_VALUE (*((volatile unsigned char*)(0x41500020)))3.接下来在button_statusFetch函数中定义变量,其中j用来获取矩阵键盘的键值,具体如下:char j = 0;j = KAPS_VALUE ;4.最后,在直入键盘的分支语句后添加矩阵键盘的分支代码段,即switch(j){}代码段:switch (j){case 0x00: //key-press 5kbd_buff=0x8F12;LED_CS2 = kbd_buff;Delay(400);break;……四、程序编辑:;post_initGpio.sEXPORT post_initGpioAREA post_initGpio ,CODE ,READONLYldr r1,=0x40e00000;GPSR0MOV R0,#0x3000 ;GPIO<13:12>STR R0,[R1,#0x18];GPCR0MOV R0,#0x800 ;GPIO<11>STR R0,[R1,#0x24];GAFR0_L/////////////////////////////////////////////// /// MOV R0,#0x80000000 ;GPIO<15>:F2:nCS1 STR R0,[R1,#0x54];GAFR0_Uldr R0,=0x10 ;0xa5000010STR R0,[R1,#0x58];GPDR0///////////////////////////////////////////////// ldr R0,=0xc1a08000 ;GPIO<15>:nCS1 STR R0,[R1,#0xc];GPSR1MOV R0,#0STR R0,[R1,#0x1c];GPCR1MOV R0,#0STR R0,[R1,#0x28];GAFR1_LLDR R0,=0xc9c ;0xa9558STR R0,[R1,#0x5c];GAFR1_ULDR R0,=0xca0 ;0xaaa590aaSTR R0,[R1,#0x60]LDR R0,=0xca4 ;0xfccf0382STR R0,[R1,#0x10];GPSR2MOV R0,#0x10000STR R0,[R1,#0x20];GPCR2MOV R0,#0STR R0,[R1,#0x2c];GAFR2_L////////////////////////////////////ldrR0,=0xa0000000 ;0xaaaaaaaa ;GPIO<79:78>:nCS<3:2> STR R0,[R1,#0x64];GAFR2_U/////////////////////////////////////////ldr R0,=0x50000400;0x50090402 ;GPIO<95:94,80>:KP_DKIN<1>,KP_DKIN<2>,nCS4 STR R0,[R1,#0x68];GPDR2///////////////////////////////////////////ldr R0,=0x0221ffff ;GPIO<80:78>:nCS<4:2>STR R0,[R1,#0x14]; LDR R0,=0xca8; STR R0,[R1,#0x68]MOV R0,#0x20000STR R0,[R1,#0x118];GPCR3MOV R0,#0STR R0,[R1,#0x124];GAFR3_L////////////////////////////////////////////// ldr R0,=0x020a95c3 ;GPIO<108,105:98>STR R0,[R1,#0x6c];GAFR3_Uldr R0,=0x1408STR R0,[R1,#0x70];GPDR3///////////////////////////////////////////////// / ldr R0,=0x21381;GPIO<108,105:103>STR R0,[R1,#0x10c];config twice:;GAFR0_Uldr R0,=0xa5000010 ;0x0x10STR R0,[R1,#0x58];GAFR1_LLDR R0,=0xa9558 ;0xc9cSTR R0,[R1,#0x5c]LDR R0,=0xaaa590aa ;0xca0STR R0,[R1,#0x60];GPDR1LDR R0,=0xfccf0382 ;0xca4STR R0,[R1,#0x10];GAFR2_L/////////////////////////////////////////////// ////ldr R0,=0xa0000000 ;GPIO<79:78>:nCS<3:2>STR R0,[R1,#0x64];GAFR2_U/////////////////////////////////////////////// //////////////// ////////ldr R0,=0x50090402;GPIO<95:94,80>:KP_DKIN<1>,KP_DKIN<2>,nCS4STR R0,[R1,#0x68]mov pc,r14END;post_initKey.sEXPORT post_initKeyAREA post_initKey, CODE, READONLYnopnopldr r1,=0x41500000;KPCldr r0,=0x3FAFF1C2 ; (0x2FAFF9C3:interrupt) str r0,[r1,#0x0];KPDK; ldr r0,=0x1; str r0,[r1,#0x8]; ;KPREC; ldr r0,=0x1; str r0,[r1,#0x10];KPMK; ldr r0,=0x1; str r0,[r1,#0x18];KPAS; ldr r0,=0x1; str r0,[r1,#0x20]; ldr r0,=0x1; str r0,[r1,#0x0];KPKDIldr r0,=0x707str r0,[r1,#0x48]mov pc,r14END五、实验结果:当按下键盘上的按键时,七段数码管可以显示出对应的编码。
实验五:独立式键盘实验
![实验五:独立式键盘实验](https://img.taocdn.com/s3/m/ac35fdca0c22590102029d3b.png)
实验五:独立式键盘实验4.5.1 实验目的1. 掌握单片机独立键盘接口设计方法。
2. 掌握单片机键盘扫描程序设计方法。
3. 掌握按键功能设计方法。
4. 掌握软件消除按键抖动方法。
4.5.2 实验预习1.熟悉Keil集成编译环境的使用方法。
2. 复习单片机C语言程序设计方法。
3. 复习独立键盘工作原理。
4. 复习按键去抖动方法。
4.5.3 实验原理实验板上提供4个独立按键,与单片机接口如图4.5.1所示,每个按键单独接单片机一个I/O接口。
只要将相应端口设为1,然后判断端口状态,如果仍为1,则按键处于断开(释放)状态,如果为0,则按键处于接通(闭合)状态。
图4.5.1 独立键盘电原理图4.5.4 预作实验任务1. 用Proteus仿真软件绘制独立键盘电路图,包括如图4.5.1所示键盘接口,单片机最小系统以及数码管动态显示电路。
2. 简述按键识别过程中如何等待按键释放。
3. 简述按键抖动对单片机系统工作性能的影响,并简介消除按键抖动的方法。
4. 编写按键识别函数,要求正确识别4个按键的状态,如果有按键按下则返回键值,从左到右四个键值分别为1~4。
并通过仿真或实验板验证(要求用软件的方法消除按键抖动)。
5.为实验板上4个按键设定不同的功能,在数码管上显示数字128,4个按键按下后分别对显示的数字做如下修改:key1:数字+1;key2:数字-1;key3:数字+10;key4:数字-10;流程图如图4.5.2所示,试设计完整程序(按键识别子程序KEYSCAN和动态显示子程序DISPLAY可直接调用这里省略)。
图4.5.2 按键功能设计流程图4.5.5 实验任务1.开机时数码管显示1002.按键key1一次数字加1,按键key2一次数字减1。
加到999时再加1归零,减到000时再减1得999。
3.按住键key3不放实现连加功能,每0.2s加1。
4.按住键key4不放实现连减功能,每0.2s减1。
4.5.6 实验步骤1.分析题意,确定算法,绘制主程序流程图。
单片机按键的识别与显示实验报告
![单片机按键的识别与显示实验报告](https://img.taocdn.com/s3/m/3dce13f50875f46527d3240c844769eae009a324.png)
单片机按键的识别与显示实验报告
一、实验目的
1.掌握单片机I/O的工作方式;
2.掌握单片机以串行口方式0工作的LED显示;
3.掌握按键的识别和LED显示的编程方法。
二、实验器材
1.G6W仿真器一台。
2.MCS—51实验板一台。
3.PC机一台。
4.电源一台。
三、实验内容及要求
8051单片机的PI口作为8个按键的输入端,构成独立式键盘。
四个LED显示器通过四个串/井移位寄存器74L51644接口至8051的串行口,该串行口应工作在方式0发送状态下,RXD端送出要显示的段码数据,TXD则作为发送时钟来对显示数据进行移位操作。
编写一个计算器程序,当某一键按下时可执行相应的加、减、乘、除运算方式,在四个显示器上显示数学算式和最终计算结果。
注:①通过按键来选择加、减、乘、除四种运算方式。
②输入两个数字均为一位十进制数,可预先放在内存中。
独立式键盘处理与二极管显示电路设计
![独立式键盘处理与二极管显示电路设计](https://img.taocdn.com/s3/m/8cee0fadb9f67c1cfad6195f312b3169a451ea1b.png)
独立式键盘处理与二极管显示电路设计1. 引言独立式键盘处理与二极管显示电路设计,是现代计算机硬件设计中的重要部分。
在电子产品中,键盘是人机交互的重要载体,而二极管显示电路是键盘中常用的元件之一。
本文将从独立式键盘处理与二极管显示电路设计的基本原理、设计要点和实际应用等方面展开讨论,帮助读者深入了解这一主题。
2. 独立式键盘处理原理独立式键盘处理是指通过一个独立的处理器来负责键盘输入的处理工作,而不是将键盘输入与计算机主处理器直接相连。
这种设计可以有效降低计算机主处理器的负载,提高系统整体性能。
独立式键盘处理通常采用专用的键盘控制芯片,通过扫描矩阵键盘的方式来实现对键盘输入的有效处理和解码。
3. 独立式键盘处理设计要点在进行独立式键盘处理设计时,需要考虑以下几个要点:- 键盘接口标准:设计时需要选择符合标准的键盘接口,例如PS/2接口或USB接口。
- 键盘扫描方式:需要合理选择键盘的扫描方式,以保证输入的准确性和稳定性。
- 键盘数据传输:设计应该考虑如何将扫描到的键盘数据传输给计算机主处理器。
4. 二极管显示电路原理二极管显示电路是指利用二极管来实现键盘按键状态的显示。
在矩阵键盘中,每一个按键都与一个二极管相连,通过控制二极管的导通和截止状态来实现按键状态的显示。
一般来说,通过合理的电路设计和布局,可以实现较为清晰和准确的按键状态显示。
5. 二极管显示电路设计要点设计二极管显示电路时,需要考虑以下几个要点:- 二极管选型:选择合适的二极管类型和规格,确保其可以满足按键状态显示的需求。
- 电路布局:合理的电路布局可以有效减少干扰和噪声,提高显示效果。
- 驱动电路设计:设计合适的驱动电路,以确保二极管的正常工作和准确显示。
6. 实际应用与个人观点独立式键盘处理与二极管显示电路设计在各类电子产品中都有广泛的应用,如计算机键盘、工控设备键盘等。
通过深入理解和合理设计,可以大大提高电子产品的性能和稳定性。
个人认为,这两个设计领域都充满了挑战和机会,希望能够在未来的工作中有机会深入研究和实践。
一、 独立式键盘接口电路及程序设计
![一、 独立式键盘接口电路及程序设计](https://img.taocdn.com/s3/m/ec1b42a284868762caaed588.png)
3.1 键盘与接口 3.2 LED显示及接口 3.3 键盘/LED显示器接口设计 3.4 CRT显示及接口 3.5 微型打印机及接口
第3章 智能仪器人机接口
人机交互功能即用户与仪器交换信息的功能。 这个功能有两方面的含义:一是用户对智能仪 器进行状态干预和数据输入;二是智能仪器向用户报 告运行状态与处理结果。
3.1 键盘与接口
3.1.1 键盘输入基础知识
一、 键盘的组织
键盘按其工作原理可分为编码式键盘和非编码式键盘。
编码式键盘由按键键盘和专用键盘编码器两部分构成。当键 盘中某一按键被按下时,键盘编码器会自动产生对应的按键代 码, 并输出选通脉冲信号与CPU 进行信息联络。
非编码键盘不含编码器,当某键按下时,键盘只送出一个简 单的闭合信号, 对应按键代码的确定必须借助于软件来完成。
一、 独立式键盘接口电路及程序设计
独立式键盘的每个按键占用一根测试线,它们可以直接与 单片机I/O 线相接或通过输入口与数据线相接,结构很简单。 这些测试线相互独立无编码关系,因而键盘软件不存在译码问 题,一旦检测到某测试线上有键闭合,便可直接转入到相应的 键功能处理程序进行处理。
一个实际三个按 键的独立式键盘接口 电路如右图所示:
3.1.1 键盘输入基础知识
一、 键盘的组织 二、 键盘的工作方式
编程扫描工作方式、中断工作方式和定时扫描工作方式。 (1) 编程扫描工作方式:也称查询方式。 (2) 中断工作方式:程扫描工作方式: 该方式也称查询方式,它是利用 CPU在完成其他工作的空余调用键盘扫描程序,以响应键输入 的要求。当CPU在运行其他程序时,它就不会再响应键输入要 求,因此,采用该方式编程时, 应考虑程序是否能对用户的每 次按键都会做出及时的响应。
独立按键及矩阵键盘控制LED灯
![独立按键及矩阵键盘控制LED灯](https://img.taocdn.com/s3/m/c2dde77c3b3567ec102d8ab2.png)
VCC GND RXD TXD ALE/P PSEN
40 20 10 11 30 29
C
D
E
K15
F
P17
P14
P15
P16
扫描法 和线反转法
+5V
89s52
P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
图3.3 矩阵式键盘接口
0 ee 4 ed 8 eb C e7
矩阵式键盘的结构及原理 矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上, 其结构如下图所示。 由图可知,一个4×4的行、列结构可以构成一个含有16个按键 的键盘,显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘 要节省很多I/O口。 矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过 上拉电阻接到+5V上。当无键按下时,行线处于高电平状态;当有键 按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线 电平决定。这是识别按键是否按下的关键。然而,矩阵键盘中的行线 、列线和多个键相连,各按键按下与否均影响该键所在行线和列线的 电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来 作适当处理,才能确定闭合键的位置。
们将结合实例加以介绍。
4.等待释放 等待释放是为了保证键的一次闭合仅进行一次处
理。求得键码后,然后通过不断进行键扫描,如有键
按下,则继续扫描,否则认为键已释放。 5.按键处理
根据系统功能要求,利用单片机控制完成特定操作。
键盘接口的控制方式 在单片机的运行过程中,何时进行键盘扫描和处
理,可有下列三种情况:
1 de 5 dd 9 db D d7
2 be 6 bd A bb E b7
2 显示与键盘接口
![2 显示与键盘接口](https://img.taocdn.com/s3/m/95647be8f90f76c661371ac9.png)
FE
FE FF FE FF FE FE FE FE
按下
U5PB=FFH
U5PBFFH
U5PB=FFH
闭合
无按键
按下
闭合
释放
13t
14t 15t 16t 17t 18t 19t 20t …
FE
FE FF FE FE FF FE FF … 28
t为采样时间
通过检查最近一段时间的采样 值,可以爬到出按键所处的状 态。实际使用,仅保留最近3-5 次采样值。
二、独立式键盘接口
P.114
1.电路 各键相互独立,每个按键各接一根输入线,通过检测输入 线的电平状态可很容易判断那个键被按下。
(适于键数较少、操作快、同时多键动作场合)
独立式键盘工作电路
test.c
2.按键的状态输入与消抖动
抖动波形
?
触点抖动
?
开始 N 有键闭合吗? Y 延时消抖动 N 确有键闭合吗? Y 判断闭合键键号 N 闭合键释放否? Y 执行键功能 返回 由于采用软件 延时消抖动、 等待键释放, 造成显示不能 及时更新。
PA0
74LS240八反相三态缓冲器 PA0 a b
PA7
动态显示方式
‘1’对应的段亮
FEFCH 输出
PA7 PB0
第 7位
字段输出口 ‘0’对应段亮 左
dp
第 0位
右
P2.0/A8
FEFDH 输出
PB7
字位输出口 ‘1’对应位显示
PB7 PB0
FEFEH 输入
(暂时)
‘1’对应的位显示
控制口 FEFFH 4X4键盘接口 方式字:89H 初始为输入 =10001001B
3
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
独立式按键和一位数码显示
一.实训目的:
1.练习按键编程
2.练习数码显示编程
二.实训任务:
(可以根据实际条件改做类似按键和显示的实验)
1. 8个按键,分别对应一个子程序,按1号键,执行第一个子程序,按2号键执行第二个子程序,依此类推。
2.每个子程序功能是,在一位数码管上显示键号。
三.实训准备:
1.分析电路,准备材料,按图连接电路
2.分析任务,编写程序,并仿真调试
3.要求用散转指令实现多分支
参考仿真文件:按键数码.DSN
参考电路:
技能训练9-2参考电路图
说明:此图省略了单片机的复位和晶振电路,试验时必须要加上。
四.参考程序:
M1: LCALL ANJIAN
MOV A,R7
JZ M1
MOV 20H,A
RL A
ADD A,20H
MOV DPTR,#TAB1
JMP @A+DPTR
TAB1: LJMP PRG0
LJMP PRG1
LJMP PRG2
LJMP PRG3
LJMP PRG4
LJMP PRG5
LJMP PRG6
LJMP PRG7
LJMP PRG8
LJMP M1
PRG0: LJMP M1
PRG1: LCALL DISP
LJMP M1 PRG2: LCALL DISP
LJMP M1
PRG3: LCALL DISP
LJMP M1
PRG4: LCALL DISP
LJMP M1
PRG5: LCALL DISP
LJMP M1
PRG6: LCALL DISP
LJMP M1 PRG7: LCALL DISP
LJMP M1
PRG8: LCALL DISP
LJMP M1 ORG 0080H ANJIAN: MOV R7,#0
MOV A,P2
CPL A
JZ ANJIANE
MOV R6,#8 ANJIANL:CLR C
RRC A
INC R7
JC ANJIANE
DJNZ R6,ANJIANL ANJIANE:RET
NOP
ORG 0100H
DISP: MOV DPTR,#TAB
MOV A,20H
MOVC A,@A+DPTR
MOV P0,A
RET
TAB:DB 3FH,06H,5BH,4FH,66H,6DH ;0,1,2,3,4,5, DB 7DH,07H,7FH,06FH ;6,7,8,9
DB 77H,7CH,39H,5EH,79H,71H ;A,B,C,D,E,F。