版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 单单 片片 机机 原原 理理 实实 验验 指指 导导 书书前前 言言 由于单片机具有高可靠性、超小型、低价格、容易产品化等特点,在仪器仪表智能化、实时工业控制、实时数据采集、智能终端、通信设备、导航系统、家用电器等控制应用领域,具有十分广泛的用途。由于目前在国内单片机应用中, mcs-51 系列单片机仍然是一种主流单片机,所以本实验指导书为学习 mcs-51 单片机的学生和广大的工程技术人员,配合单片机原理课程的教学,结合一种单片机 实验板编写了这本实验指导书。 单片机原理 是一门实践性很强的课程,提高教学质量的一个重要环节是上机实习和训练,无论是学习汇编语言程序设计,还是学习接口电路和外设
2、与计算机的连接,或者软硬兼施地研制单片机应用系统,不通过加强动手是不能获得预期效果的。本实验指导书提供多个实验的指导性材料,有些实验还有一些有一定难度的选做项目,可以根据课时的安排和教学要求进行取舍。为了达到某些实验的目的,书中提供的参考程序与实际应用中的程序会有些差别,所以不一定是最优的。 由于时间紧迫,需要赶课程进度与实验时间的同步,加上编者学识有限,如有不妥之处,欢迎读者批评指正。实实 验验 须须 知知1. 实验前必须阅读教科书的有关部分和本实验指导书,了解实验目的、内容、步骤,做好实验前的准备工作,编写好实验中要求自编或修改的程序;完成实验前要求完成的准备工作后方可以上机实验,否则不得
3、上机操作。2. 各种电源的电压和极性不能接错,严禁带电接线和接插元器件。通电前须经过指导教师检查认可后方能通电。3. 不准随意拨弄各种与实验无关的旋钮和开关,凡与本次实验无关的任何设备都禁止动用和摸弄,注意安全。4. 严禁用手触摸实验系统印制电路板和元器件的引脚,防止静电击穿芯片。5. 实验中若损坏仪器或元器件,应及时向指导教师报告。6. 在实验室内保持安静和卫生,不得随意走动和喧哗,集中精力完成实验。7. 实验完成后,关掉电源,及时整理实验台桌面,保持环境整洁。8. 按规定认真完成实验报告,在规定的时间内缴上实验报告。9. 凡实验或实验报告未能按规定完成的学员,不能参加本课程的考试或考查。实
4、验板如下图所示:isp 下载器如下图所示 : 实验基本步骤1、开电脑后,将 isp 的一端与实验板相连,另一端接到电脑的 usb 上,按下实验板上的电源。2、安装 isp 驱动及 keil 软件。3、打开 keil 软件,根据实验要求编写程序,生产hex 文件。4、打开 isp 烧写器,将 hex 文件导入到实验板内。5、观察现象。单片机实验报告格式实验报告标题一、实验目的二、实验内容三、实验设计及调试:(1)实验分析及内容。(2)实验电路:画出与实验内容有关的简单实验电路。(3)实验设计及调试步骤:根据内容写出实验程序。调试程序,观察结果。(4)实验调试过程中所遇到的问题、解决问题的思路和解
5、决的方法。四、实验后的经验教训总结。五、对实验课的建议目 录实验一实验一 实验板使用,实验板使用,kile c51.实验二实验二 单片机控制单片机控制 led 灯点亮灯点亮.实验三实验三 单片机控制数码管实验单片机控制数码管实验.实验四实验四 中断系统应用实验中断系统应用实验.实验五实验五 定时器定时器/计数器使用计数器使用.实验六实验六 键盘键盘接口接口实验实验.实验一实验一 实验板使用,实验板使用,keil c51 软件使用软件使用一、实验目的一、实验目的1. 熟悉单片机实验版、keil c51软件使用二、实验说明二、实验说明本实验指定某块存储器的起始地址和长度,要求能将其内容置 1。通过
6、该实验学生可以了解单片机读写存储器的方法,同时也可以了解单片机编程、调试方法。三、实验内容及步骤三、实验内容及步骤1.启动 pc 机,安装好 isp 驱动,用 isp 数据通信线连接计算机与实验板(usb 线) 。2.打开 keil uvision2 仿真软件,首先建立本实验的项目文件,接着建立源程序,编译无误后,全速运行程序。3.可把源程序编译成可执行文件,用 isp 烧录器烧录到 89s52 芯片中。四、四、keil c51 软件使用步骤软件使用步骤1. 使用 keil 前必须先安装。安装过程简单,这里不在叙述。2. 安装好了 keil 软件以后,我们打开它。打开以后界面如下:3. 我们先
7、新建一个工程文件,点击“project-new project”菜单,如下图:3. 选择工程文件要存放的路径,输入工程文件名 led,最后单击保存。4. 在弹出的对话框中选择 cpu 厂商及型号 5. 选择好 atmel 公司的 at89s52 后 , 单击确定1 在接着出现的对话框中选择“是”。5. 新建一个 c51 文件 , 单击左上角的 new file 如下图所示 :6. 保存新建的文件,单击 save 如下图: 2 在出现的对话框中输入保存文件名 main.c(注意后缀名必须为.c) ,再单击“保存”,如下图;7. 保存好后把此文件加入到工程中方法如下 : 用鼠标在 source g
8、roup1 上单击右键 , 然后再单击 add files to group source group 1 如下图: 8. 选择要加入的文件 , 找到 main.c 后 , 单击 add, 然后单击 close 9. 在编辑框里输入如下代码 : 10. 到此我们完成了工程项目的建立以及文件加入工程 , 现在我们开始编译工程如下图所示 : 我们先单击编译, 如果在错误与警告处看到 0 error(s) 表示编译通过 ; 11. 生成 .hex 烧写文件,先单击 options for target,如图;12. 在下图中,我们单击 output, 选中 create hex f。再单击“确定”。
9、13. 打开文件夹实验 1,查看是否生成了 hex 文件。如果没有生成,在执行一遍步骤 10到步骤 12,直到生成。 以上是 keil 软件的基本应用,更多的高级应用请大家去查找资料.五、思考题五、思考题如何将存储器块的内容移动到另一位置。实验二实验二 单片机控制单片机控制 led 灯点亮灯点亮一、实验目的一、实验目的1.进一步熟悉编程和程序调试2.学习p1口的使用方法3.学习延时子程序的编写和使用二、实验说明二、实验说明p1口是准双向口,它作为输出口时与一般的双向口使用方法相同。由准双向口结构可知当p1口用作输入口时,必须先对口的锁存器写“1”,若不先对它写“1”,读入的数据是不正确的。三、
10、实验步骤及参考例子三、实验步骤及参考例子实验步骤说明:实验步骤说明:本实验需要用到单片机最小应用系统和十六位逻辑电平显示模块。用 p1 口做输出口,接十六位逻辑电平显示,程序功能使发光二极管点亮。1.使用单片机最小应用系统。用扁平数据线连接单片机 p1 口与 led 灯相连。2.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:缺口朝上。3.打开 keil uvision2 仿真软件,首先建立本实验的项目文件,输入源程序(实验(一) ),进行编译,直到编译无误。生成 hex 文件。5.打开实验板总电源,将 hex 文件下载到实验板内,观察发光二极管显示情况。
11、参考例子参考例子:1) 点亮板子上的第一个灯 d02) 点亮板子上的 d0、d2、d4、d6 灯,与 d1、d3、d5、d7 灯交替闪烁3) 流水灯:从 d0-d7 依次点亮注:在做完实验时记得养成一个好习惯:把相应单元的短路帽和电源开关还原到原来注:在做完实验时记得养成一个好习惯:把相应单元的短路帽和电源开关还原到原来的位置!以下将不再重述。的位置!以下将不再重述。四、参考程序四、参考程序1)#includevoid main()p1=0 xfd;2)#include#define uint unsigned int #define uchar unsigned char void dela
12、y();void main() while(1) p1=0 xaa;delay();p1=0 x55;delay(); void delay()uint x,y;for(x=100;x0;x-)for(y=600;y0;y-) ;3)#include#include #define uint unsigned int #define uchar unsigned char uchar temp;void delay(uint);void main() temp=0 xfe;while(1)for(num=0;num0;x-)for(y=110;y0;y-) ;五、电路图五、电路图xtal1a1
13、1.0592mhzc3a22pfc2a22pfp1.01p1.12p1.23p1.34p1.45p1.56p1.67p1.78rst9p3.0/rxd10p3.1/txd11p3.2/int012p3.3/int113p3.4/t014p3.5/t115p3.6/wr16p3.7/rd17xtal218xtal119vss20p2.021p2.122p2.223p2.324p2.425p2.526p2.627p2.728psen29ale/prog30ea31p0.732p0.633p0.534p0.435p0.336p0.237p0.138p0.039vcc4089c51u1fc3f10uf
14、vccvccp3.0p3.1p1.0p1.1p1.2p1.3p1.4p1.5p1.6p1.7p0.0p0.1p0.2p0.3p0.4p0.5p0.6p0.7eaalepsenp2.7p2.6p2.5p2.4p2.3p2.2p2.1p2.0p3.2p3.3p3.4p3.5p3.6p3.7510*8vccp1.0p1.1p1.2p1.3p1.4p1.5p1.6p1.7resetr2f100r1f1kl0l1l2l3l4l5l6l7六、实验内容六、实验内容请在 keil 环境下编写一下程序:1)点亮最后一个 led2)点亮 1、2、5、6 这四个 led3)让第三个 led 闪烁4)设计出流水灯程序
15、,从 d7d0实验四实验四 单片机控制数码管实验单片机控制数码管实验一、实验目的一、实验目的1. 掌握数码管是如何显示出字符2. 掌握数码管动态显示原理二、实验原理二、实验原理1.数码管两种接法数码管两种接法2. 共阴极数码管编码共阴极数码管编码0 x3f , 0 x06 , 0 x5b , 0 x4f , 0 x66 , 0 x6d , 0 1 2 3 4 5 0 x7d , 0 x07 , 0 x7f , 0 x6f , 0 x77 , 0 x7c , 6 7 8 9 a b 0 x39 , 0 x5e , 0 x79 , 0 x71 , 0 x00 c d e f 无显示3.动态显示原理
16、动态显示原理动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 三、参考例子参考例子1)让第一个数码管显示一个 8 字让第一个数码管显示 8 字,那么别的数码管的位选就要关闭,即只打开第一个数码管的位选。控制位选的 p2 口要输出的数据位 0 xfe(二进制为 111 11110) 。位选确定后,在确定段选,要显示的是 8,那
17、么只有 dp 段为 0,其余段为 1,所以 p0 口要输出0 x7f(二进制 0111 1111)2)在四个数码管上显示 1,2,3,4abcdeggndfdpgndabcefgddpabcdefgdpdpgfedcba5v(a)(b)位选:接 p2 口 左边四个数码管 ds3 ds2 ds1 ds0 对应的 p2 口: 0 x7f 0 xbf 0 xdf 0 xef 右边四个数码管 ds3 ds2 ds1 ds0 对应的 p2 口: 0 xf7 0 xfb 0 xfd 0 xfe段选:接 p0 口3) 在八个数码管上显示 0、1,27.4) 在 8 个数码管上显示 0-9 这十个数字,且从右
18、到左动态变化。具体的现象见单片机的学习板。四、参考程序四、参考程序1)#includevoid main(void)while(1)p2=0 xfe;p0=0 x7f;2)#include#define uint unsigned int#define uchar unsigned charvoid delay();void main(void)while(1)p2=0 xfe;p0=0 x66;delay();p2=0 xfd;p0=0 x4f;delay();p2=0 xfb;p0=0 x5b;delay();p2=0 xf7;p0=0 x06;delay();void delay() /
19、延时程序 1uint x,y;for(x=2;x0;x-)for(y=112;y0;y-);3)#include#define uint unsigned int #define uchar unsigned char uchar num1;uchar num2;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar code wei=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;void delay();void main()whil
20、e(1)for(num1=0;num10;x-)for(y=110;y0;y-);4)#include#define uint unsigned int #define uchar unsigned char uchar num1;uchar num2;uchar num3;uint count;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar code wei=0 x7f,0 xbf,0 xdf,0 xef,0 xf7,0 xfb,0 xfd,0 xfe;void delay(
21、uint);void main()while(1) for(count=0;count100;count+) num3=num2;for(num1=0;num18;num1+) p2=weinum1;if (num39) num3+;else num3=0;p0=tablenum3; delay(1); if(num20;x-)for(y=110;y0;y-);五、原理图五、原理图六、实验内容六、实验内容1)用数码管动态显示,实现 00-999计数器;2)用数码管动态显示,实现 00-59 计数器。3)用数码管动态显示,实现 00-59 秒计时器。 (定时器/计数器)实验四实验四 中断系统应用
22、实验中断系统应用实验一、实验目的一、实验目的1.掌握外部中断技术的基本使用方法2.掌握中断处理程序的编写方法二、实验说明二、实验说明1.外部中断的初始化设置共有三项内容:中断总允许即 ea=1,外部中断允许即exi=1(i=0 或 1) ,中断触发方式设置。中断触发方式设置一般有两种方式:电平触发方式和脉冲(边沿)触发方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚int0(p3.2)和 int1(p3.3)引入,本实验由 int0(p3.2)引入。2.中断控制原理:中断控制是提供给用户使用的中断控制手段。实际
23、上就是控制一些寄存器,51 系列用于此目的的控制寄存器有四个:tcon 、ie 、scon 及 ip。3.中断响应的过程:首先中断采样然后中断查询最后中断响应。采样是中断处理的第一步,对于本实验的脉冲方式的中断请求,若在两个相邻周期采样先高电平后低电平则中断请求有效,ie0 或ie1 置“1”;否则继续为“0”。所谓查询就是由 cpu 测试 tcon 和 scon 中各标志位的状态以确定有没有中断请求发生以及是那一个中断请求。中断响应就是对中断请求的接受,是在中断查询之后进行的,当查询到有效的中断请求后就响应一次中断。4. 8051 的中断系统8051 的中断系统包括 5 个中断源,并提供两个
24、优先级,允许用户对中断源进行独立控制和中断优先级设置.8051 支持的 5 个中断源分别为外部中断 0、定时器 0 溢出中断、外部中断 1、定时器 1 溢出中断和串口中断。 对应的中断号为 0、1、2、3、4;寄存器有 4 个工作组可以切换,为 0-3;c51 中,中断服务程序是以中断函数的方式来时实现的。5.中断函数格式如下: void 函数名() interrupt 中断号 using 工作组 中断服务程序内容; 三、参考例子三、参考例子1) 右边的三个数码管从“000”开始进行加法计数。按动 s2 键时计数暂停,再按继续计数。四、参考程序四、参考程序#include #define uc
25、har unsigned char#define uint unsigned intuchar code table10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f;uchar code wei4=0 xfe,0 xfd,0 xfb,0 xf7; /*/uint cnt;bit flag;/*/void init(void)bitflag=0; /设置标志ea=1;/开中断ex0=1;/外部中断 0 开中断it0=1;/外部中断 0 的触发方式/*/void delay(uint k)uint data i,j;for
26、(i=0;ik;i+)for(j=0;j999)cnt=0;for(i=0;i100;i+)p0=tablecnt/100;p2=wei2;delay(1);p0=table(cnt%100)/10;p2=wei1;delay(1);p0=tablecnt%10;p2=wei0;delay(1);/*/void extern_int0(void) interrupt 0 using 0flag=!flag;五、原理图五、原理图实验五实验五 定时器定时器/ /计数器使用计数器使用一、实验目的一、实验目的1.学习 89c51 内部定时计数器的使用和编程方法2.进一步掌握中断处理程序的编写方法二、实
27、验说明二、实验说明1、51 单片机有。两个 16 位内部定时器/计数器(t/c,timer/ counter) 。若是计数内部晶振驱动时钟,则是定时器;若是计数 8051 的输入引脚的脉冲信号,则它是计数器。定时器实际上也是工作在计数方式下,只不过对固定频率的脉冲计数。由于脉冲周期固定由计数值可以计算出时间,有定时功能。定时器有关的寄存器有工作方式寄存器 tmod 和控制寄存器 tcon。tmod 用于设置定时器/计数器的工作方式 0-3,并确定用于定时还是用于计数。tcon 主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。2、tmod1) m1m0 工作方式控制位 2) c
28、/t 定时器方式或计数器方式选择位 若 c/t=1 时, 为计数器方式; c/t = 0 时, 为定时器方式。 3)gate 定时器/计数器运行门控标志位 当 gate=1 时, t/c 的启动受双重控制,即要求 int0 (或 int1)引脚为高电平且tr0(或 tr1 )置 1 时, 相应的 t/c 才被选通工作。若 gate=0, t/c 的启动仅受 tr0 (或 tr1)控制,即置 1, t/c 就被选通, 而不管 int0 (或 int1)的电平是高还是低。 3、tcontf0、tf1 分别是定时器/计数器 t0、 t1 的溢出中断标志位, 加法计数器计满溢出时置 1, 申请中断,
29、在中断响应后自动复 0。tf 产生的中断申请是否被接受, 还需要由中断是否开放来决定。tr1、tr0 分别是定时器 /计数器 t1、 t0 的运行控制位, 通过软件置 1 后, 定时器 /计数器才开始工作, 在系统复位时被清 0。 4、初始化1)初始化步骤在使用 51 系列单片机的 t/c 前,应对它进行编程初始化,主要是对 tcon 和 tmod编程,还需要计算和装载 t/c 的计数初值。一般完成以下几个步骤:(1)确定 t/c 的工作方式编程 tmod 寄存(2)计算 t/c 中的计数初值,并装载到 th 和 tl;(3)t/c 在中断方式工作时,必须开 cpu 中断和源中断编程 ie 寄
30、存器;(4)启动定时器/计数器编程 tcon 中 tr1 或 tr0 位。2)计数初值的计算(1)定时器的计数初值:在定时器方式下,t/c 是对机器周期脉冲计数的,fosc=6mhz,一个机器周期为12/fosc=2us,则方式 0 13 位定时器最大定时间隔=213*2us=16.384ms方式 1 16 位定时器最大定时间隔=216*2us=131.072ms方式 2 8 位定时器最大定时间隔=28*2us=512us 若 t/c 工作在定时器方式 1 时,要求定时 1ms,求计数值。如设计数初值为 x,则有:(216-x)*2us=1000us 推出 x=216-500因此,th,tl
31、可置 65 536-500(2)计数器的计数初值在计数器方式下:方式 0 13 位计数器的满计数值=213=8192方式 1 16 位计数器的满计数值=216=65 536方式 2 8 位计数器的满计数值=28=256 若 t/c 工作在计数器方式 2 时,则要求计数 10 个脉冲的计数初值,如设计数初值为 x。则有 28-x=10 即 x= 28-10因此,th=tl=256-10三、参考例子三、参考例子1)设单片机晶振频率为 12 mhz,利用定时器在 p1.0 脚输出周期为 2 ms 的方波。 分析:选用定时器 /计数器 t0 作定时器, 输出为 p1.0 引脚, 2 ms 的方波可由间
32、隔 1 ms 的高低电平相间而成, 因而只要每隔 1 ms 对 p1.0 取反一次即可得到这个方波。 机器周期=1212mhz= 1 s 1 ms 内 t0 需要计数 n 次: n= 1 ms1 s = 1000 由于计数器向上计数,为得到 1000 个计数之后的定时器溢出,必须给定时器置初值为:65 536-1000.2) 在 p1.7 端接有一个发光二极管,要求利用 t/c 控制,使 led 亮 1s,灭 1s,周而复始。分析:要求定时 1s,t/c 的三种工作方式都不能满足。 (为什么?)对于较长时间的定时,应采用符合定时的方法。使 t/c0 工作在定时器方式 1,定时 100ms,定时
33、时间到后 p1.0 反相,即 p1.0 端输出周期 200ms 的方波脉冲。另设 t/c1 工作在计数器方式 2,对 t1 输出的脉冲计数,当计满 5 次,定时 1s 时间到,将 p1.7 端方向,改变灯的状态。采用 6mhz 晶振,方式 1 的最大定时才能达到 100 多 ms。对于 100ms,机器周期为 12/fosc=2us,需要计数的次数=100*1000/2=50 000,即初值为 65 536-50 000. 方式 2 满 5 次溢出中断,初值为 256-5.四、参考程序四、参考程序1)查询方式:#includesbit p1_0=p10;void main()tmod=0 x0
34、1; /t/co 工作在定时器方式 1tr0=1; /启动 t/c0for(;)th0=(65536-1000)/256; /预置计数初值tl0=(65536-1000)%256;dowhile(!tf0); /查询等待 tf0 置位p1_0=!p1_0; /p1.0 取反tf0=0; /软件清 tf0中断方式:#includesbit p1_0=p10;void timer0(void) interrupt 1 using 1 /t/c 中断服务程序入口p1_0=!p1_0; /p1.0 取反th0=(65536-1000)/256; /计数初值重装载tl0=(65536-1000)%256
35、;void main()tmod=0 x01; /t/co 工作在定时器方式 1p1_0=0;th0=(65536-1000)/256; /预置计数初值tl0=(65536-1000)%256;ea=1; /cpu 开中断et0=1; /t/c0 开中断tr0=1; /启动 t/c0 开始定时dowhile(1);2)#includesbit p1_0=p10;sbit p1_7=p17;timer0() interrupt 1 using 1 /t/c0 中断服务程序入口p1_0=!p1_0; /p1.0 取反th0=(65536-1000)/256; /计数初值重装载tl0=(65536-
36、1000)%256;timer1() interrupt 1 using 1 /t/c1 中断服务程序入口p1_7=!p1_7; /1s 到,灯改变状态void main()p1_7=0;/置灯初始灭p1_0=1;/保证第一次方向便开始计数tmod=0 x61; /t/co 工作在定时器方式 1,t/c1 工作在计数器方式 2th0=(65536-1000)/256; /预置计数初值tl0=(65536-1000)%256;th1=256-5;tl1=256-5;ip=0x08;/置优先级存储器ea=1; /cpu 开中断et0=1; /t/c0 开中断et1=1; /t/c1 开中断tr0=
37、1; /启动 t/c0 开始定时tr1=1; /启动 t/c1dowhile(1);五、电路图五、电路图六、实验内容六、实验内容1)利用定时/计数器 t1 产生定时时钟,由 p1 口控制 8 个发光二极管,使 8 个指示灯依次一个一个闪动,闪动频率为 10 次/秒(8 个灯依次亮一遍为一个周期),循环。 gatec/tm1m0gatec/tm1m0th1tl1th0tl0t1方式t0方式t1引脚t0引脚机器周期脉冲内部总线tmodtcon外部中断相关位tf1tr1tf0tr0实验六实验六 键盘接口实验键盘接口实验一、实验目的一、实验目的1.掌握独立键盘的检测原理2.掌握矩阵键盘的检测原理二、实
38、验说明二、实验说明1、独立键盘如果系统只需几个按键,可直接采用 i/o 线构成单个按键电路,各个按键之间相互独立,一根线上的按键状态不会影响其他输入线上的工作状态,又称独立式键盘接口电路。检测是否有键闭合,如有键闭合,则去除键抖动,判断键号并转入相应的按键处理。编写单片机的键盘检测程序时,一般在检测按下时加入去抖延时,检测松手时就不用加了。2、矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5v 上。当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。这一点是识别矩阵按键是否被按下的关键。然而,矩阵键盘中的行线、列
39、线和多个键相连,各按键按下与否均影响该键所在行线和列线的电平,各按键间将相互影响,因此,必须将行线、列线信号配合起来作适当处理,才能确定闭合键的位置。扫描方式是利用 cpu 完成其他工作的空余调用键盘扫描子程序来响应键盘输入的要求。在执行键功能程序时,cpu 不再响应键输入要求,直到 cpu 重新扫描键盘为止。键盘扫描程序一般应包括以下内容: (1)判别有无键按下。 (2)键盘扫描取得闭合键的行、列值。 (3)用计算法或查表法得到键值。 (4)判断闭合键是否释放,如没释放则继续等待。 (5)将闭合键键号保存,同时转去执行该闭合键的功能。 三、参考例子三、参考例子1)通过四个按键来控制 led
40、灯的显示情况:s1:d0-d3 点亮s2:d2 点亮s3:d0-d7 点亮s4:d0-d5 点亮分析:s1p3.3 s2p3.2 s3p3.5 s4p3.4s1 按下:p3=0 xf7 p1=0 xf0s2 按下:p3=0 xfb p1=0 xfbs3 按下:p3=0 xdf p1=0 x00s4 按下:p3=0 xef p1=0 xc02)按矩阵键盘上面的 key0-key15,在第一个数码管上分别显示 0-9,a-f。四、参考程序四、参考程序 1)独立键盘#include #define uint unsigned int#define uchar unsigned charuchar f
41、lag;/*/void delay(uint k)uint data i,j;for(i=0;ik;i+)for(j=0;j121;j+);/*/uchar scan_key(void)uchar temp;temp=p3;return temp;/*/void main(void) while(1) p3=0 xff; if(p3!=0 xff) delay(20);if(p3!=0 xff)flag=scan_key(); else flag=0; switch(flag) case 0 xf7:p1=0 xf0;break; case 0 xfb:p1=0 xfb;break; case
42、 0 xdf:p1=0 x00;break; case 0 xef:p1=0 xc0;break; default:p1=0 xff;break; 2) 矩阵键盘#include#define uchar unsigned char#define uint unsigned intuchar code dis_seg716=0 x3f,0 x06,0 x5b,0 x4f,0 x66, 0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71;uchar code dis_bit8=0 xfe,0 xfd,0 xfb,0
43、xf7,0 xef,0 xdf,0 xbf,0 x7f;uchar code skey16=10,11,12,13,3,6,9,14,2,5,8,0,1,4,7,15;uchar code act4=0 xfe,0 xfd,0 xfb,0 xf7;/=void delay(uint k)uint data i,j;for(i=0;ik;i+)for(j=0;j121;j+);/=char scan_key(void)uchar i,j,in,ini,inj;bit find=0;for(i=0;i4;in=in|0 xf0;for(j=0;j4;j+) if(actj=in) find=1;
44、inj=j;ini=i; if(find=0)return -1;return (ini*4+inj);/=void main(void)char c;uchar key_value;while(1)c=scan_key();if(c!=-1)key_value=skeyc;p0=dis_seg7key_value;p2=dis_bit0;delay(2);五、电路图五、电路图1)独立键盘2)矩阵键盘附录附录 keil c51 常用库函数原型常用库函数原型/*-absacc.hdirect access to 8051, extended 8051 and philips 80c51mx me
45、mory areas.copyright (c) 1988-2001 keil elektronik gmbh and keil software, inc.all rights reserved.-*/#define cbyte (unsigned char volatile code *) 0)#define dbyte (unsigned char volatile data *) 0)#define pbyte (unsigned char volatile pdata *) 0)#define xbyte (unsigned char volatile xdata *) 0)#def
46、ine cword (unsigned int volatile code *) 0)#define dword (unsigned int volatile data *) 0)#define pword (unsigned int volatile pdata *) 0)#define xword (unsigned int volatile xdata *) 0)#ifdef _cx51_#define fvar(object, addr) (*(object volatile far *) (addr)#define farray(object, base) (object volat
47、ile far *) (base)#else#define fvar(object, addr) (*(object volatile far *) (addr)+0 x10000l)#define fcvar(object, addr) (*(object const far *) (addr)+0 x810000l)#define farray(object, base) (object volatile far *) (base)+0 x10000l)#define fcarray(object, base) (object const far *) (base)+0 x810000l)
48、#endif*-reg51.hheader file for generic 80c51 and 80c31 microcontroller.copyright (c) 1988-2001 keil elektronik gmbh and keil software, inc.all rights reserved.-*/* byte register */sfr p0 = 0 x80;sfr p1 = 0 x90;sfr p2 = 0 xa0;sfr p3 = 0 xb0;sfr psw = 0 xd0;sfr acc = 0 xe0;sfr b = 0 xf0;sfr sp = 0 x81;sfr dpl = 0 x82;sfr dph = 0 x83;sfr pcon = 0 x87;sfr tcon = 0 x88;sfr tmod = 0 x89;sfr tl0 = 0 x8a;sfr tl1 = 0 x8b;sfr th
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年高考政治(课标版)仿真模拟卷及答案(共五套)
- 秋九级数学上册解直角三角形本章总结提升课
- 山东省泰安市肥城市2024-2025学年七年级上学期期中考试道德与法治试题(含答案)
- 社区垃圾分类计划
- 生物学项目学习计划
- 改进提案征集方案计划
- 促进学生自主学习的有效做法计划
- 优化财务流程提高资金使用效率计划
- 心衰患者的健康教育
- 放射科影像诊断质量提升计划
- 中国移动自智网络白皮书(2024) 强化自智网络价值引领加速迈进L4级新阶段
- GB/T 31486-2024电动汽车用动力蓄电池电性能要求及试验方法
- 2024年卫生系统招聘考试-卫生系统招聘考试(临床医学专业知识)考试近5年真题集锦(频考类试题)带答案
- 2024年安徽省滁州市琅琊区城市管理行政执法局招聘15人历年高频难、易错点500题模拟试题附带答案详解
- 插画风浙江大学浙大介绍大学介绍
- 畜禽解剖生理5消化系统课件
- 供应链金融物流行业发展趋势及前景展望分析报告
- 应收账款保理融资协议
- 期中试卷(1-3单元)(试题)-2024-2025学年六年级上册数学人教版
- 2025届新高考政治复习备考策略及教学建议 课件
- TYNAEPI 0001-2024 有机固废低温绝氧碳化处理工程技术规
评论
0/150
提交评论