单片机数字量输入输出实验

合集下载

单片机数字量输入输出实验

单片机数字量输入输出实验

一、实验目的1.熟悉教学板电路及其结构。

2.掌握利用μVision C51 软件编辑、调试(包括仿真调试、单步调试)、运行单片机程序的步骤和方法,掌握利用STC-ISP V39软件和下载线将程序写入单片机的方法。

3.通过实验熟悉51单片机的并行I/O口,并掌握它们的应用。

4.掌握矩阵键盘、LED动态显示的工作原理。

二、实验设备PC机一台、实验教学板一块。

三、实验内容1.实验线路如附图所示,51单片机的P0口输出接8个发光二极管的阴极,P2.4经NPN 三极管9011控制发光管的阳极。

P3口支持一个8位行列式键盘,其中P3.4~P3.7供键盘扫描输出,P3.2、P3.3作键盘扫描输入。

实验要求:编程实现键盘对发光二极管的控制,每按一个按键,使对应的二极管点亮。

2.51单片机P0口输出同时接4个数码管的阴极,P2.0~P2.3,经NPN三极管9011接数码管的阳极,该端口用于分别控制相应数码管的导通。

实验要求:编程实现对任意按键动作的次数进行计数(最大99次),同时将计数值实时显示。

四、实验步骤1.将实验板与PC机通过COM口连接。

启动PC机,进入μVision软件环境,选择建立新工程文件,即可开始输入源程序。

2.完成汇编、编译、连接,若有错误,则修改源程序,直至编译、连接通过为止。

3.接上实验板上的电源。

4.运行“STC-ISP V39.EXE”,将程序代码下载到实验板的单片机中。

操作的顺序是:1)选择单片机(MCU TYPE)型号。

如:“STC89C51RC”要与实验板上所装单片机的型号一至。

2)打开文件(Open File)。

即把要下载到单片机的程序文件(已通过编译了的机器码文件——二进制(.Bin)或十六进制(.Hex)的)调到“文件缓冲区”,这时可看到右边的“文件缓冲区”有数字变化。

3)选择串行通信口。

选对时,软件上的小灯会变绿。

否则小灯是灰色。

且在左下窗口提示“出错信息”。

4)下载:按“Download/下载”按键下载。

单片机P1口输入输出实验

单片机P1口输入输出实验

单片机P1口输入输出实验
单片机可靠的复位是保证单片机正常运行的关键因素。 因此,在设计复位电路时,通常要使RST引脚保持10ms以上 的高电平。当RST从高电平变为低电平之后,单片机就从 0000H地址开始执行程序。本电路是上电自动复位。 将8个LED接在单片机P1端口的P1.0-P1.7引脚上,注意 LED有长短两个引脚,分别表示正负极,其中较短的负极接 单片机,较长的为正极,通过限流电阻R与Vcc相连。 本实验只需将8个LED与P1口相连。单片机的P0、P1、 P2、P3端口都可以用来控制LED。(反过去再看设备)
单片机I/O口输入输出实验 (或单片机数字量输入输出实验)
单片机P1口输入输出实验
实验重点:硬件设计、程序设计、现象分析 实验难点:实际应用
指导教师:刘美俊 李世军
单片机P1口输入输出实验
单片机端口是集数据输入缓冲、数据输出驱动 及锁存等多项功能一体I/O的电路,特别是把握它 准双向、多功能的特点。单片机4个并行端口是P0、 P1、P2、P3。本实验只讨论P1端口。
8、思考题
1)说明单片机各个引脚的功能及作用,比较P0,P3端口的异同? 2)时钟周期、机器周期的关系是什么?在单片机外部晶振为12M时,下面 的延时子程序延时了多少时间?当晶振为6M时呢? DELAY: MOV R5,#08H DL1: MOV R6,#00H DL2: MOV R7,#80H DJNZ R7,$ DJNZ R6,DL2 DJNZ R5,DL1 RET
单片机4个并行端口P0、P1、P2、P3有着不同 的结构特点和功用。
单片机P1口输入输出实验
4、硬件设计
89C51
C1 C2
图2 P1口某一I/O口线反转输出电路
单片机P1口输入输出实验

单片机STM32实验报告

单片机STM32实验报告

实验报告课程名称:单片微机原理与车载系统学生姓名蒋昭立班级电科1601学号***********指导教师易吉良成绩2018年12 月17 日实验1 GPIO实验1.1 实验目的1)熟悉MDK开发环境;2)掌握STM32单片机的GPIO使用方法。

1.2 实验设备1)一台装有Keil和串口调试软件的计算机;2)一套STM32F103开发板;3)STlink硬件仿真器。

1.3 基本实验内容1)熟悉MDK开发环境,参考《STM32F1开发指南(精英版)-寄存器版本_V1.0》第3章,安装MDK 并新建test工程,运行例程,在串口窗宽观察结果,并记录如下:从图片可以看出,例程运行成功,没有错误。

2)按键输入实验,《STM32F1开发指南(精英版)-寄存器版本_V1.0》第8章。

实现功能:3 个按钮(KEY_UP、KEY0和KEY1),来控制板上的2 个LED(DS0 和DS1)和蜂鸣器,其中KEY_UP 控制蜂鸣器,按一次叫,再按一次停;KEY1 控制DS1,按一次亮,再按一次灭;KEY0 则同时控制DS0 和DS1,按一次,他们的状态就翻转一次。

理解连续按概念及其实现代码。

参数mode 为0 的时候,KEY_Scan 函数将不支持连续按,扫描某个按键,该按键按下之后必须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次触发,而坏处就是在需要长按的时候比较不合适。

当mode 为1 的时候,KEY_Scan 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。

寄存器方法实现不支持连续按的关键代码,以及程序运行后的效果。

由程序可知,给KEY_Scan函数输入的值为0,为不支持连按模式。

寄存器方法实现支持连续按的关键代码,以及程序运行后的效果。

由程序可知,给KEY_Scan函数输入的值为1,为支持连按模式。

3)采用库函数方法实现按键输入实验,参考《STM32F1开发指南(精英版)-库函数版本_V1.0》第8章。

单片机核心板实验指导书

单片机核心板实验指导书

实验一独立键盘实验一、实验目的1.学习独立键盘的使用方法。

2.学习延时子程序的编写和使用。

二、实验说明本实验提供了4个按键的小键盘,如果有键按下,则相应输出为低电平,否则输出为高电平。

MCU判断有键按下后,要有一定的延时,防止由于键盘抖动而引起误操作。

编写一个程序,能读出键盘操作的编号,并在数码显示器上显示。

三、实验内容及步骤实验时把AT89S52插到40P锁紧座中,以下不再说明。

1.独立键盘的接口接P1口,P0,P3(S2,S3拨到ON的位置)分别接动态显示的段码、位码口S10的1-4位拨到ON的位置,拨码开关S1打到ON的位置,其他都打到关的位置。

2.用软件将“…\程序\ KEY”文件夹下的“4KEY.hex”下载到单片机中(运行程序,按动键盘,则LED相应显示键码。

四、源程序(光盘中附带)实验二动态扫描显示实验一、实验目的1.掌握数字、字符转换成显示段码的软件译码方法2.动态显示的原理和相关程序的编写二、实验说明动态显示,也称扫描显示。

显示器由8个共阴极数码管构成。

单片机的P0口输出显示段码;P3口输出位码。

三、实验内容及步骤单片机P0输出段码,P3口输出位控码,输出8个字符。

1.S1、S2、S3都打到ON的位置其他开关打到关的位置2.用软件将“…\程序\6LED.hex”文件夹下的“6LED.hex.hex”下载到单片机中。

3.运行程序,LED相应显示“543210”。

四、流程图及源程序(程序光盘中附带)1.流程图五、源程序(光盘中附带)实验三RS232串行口通信实验一、实验目的1.了解8051串行口的工作原理以及发送的方式2.了解PC机通讯的基本要求二、实验说明8051串行口经RS232电平转换后,与PC机串行口相连。

PC机使用串口调试应用程序V2.2.exe,实现上位机与下位机的通讯。

本实验使用查询法接收和发送资料。

上位机发出指定字符,下位机收到后返回原字符。

波特率设为4800。

三、实验内容及步骤1.插上核心板,核心板的S4、S8打到ON的位置,其他都打到关的位置。

数字量输入输出实验

数字量输入输出实验

数字量输入输出实验一、实验目的了解P1口作为输入输出方式使用时,CPU 对P1口的操作方式。

二、实验环境1、软件环境要求Windows XP操作系统以及Keil C51 单片机集成开发环境。

2、硬件环境要求电脑一台,TD-51单片机系统,开关及LED显示单元,单次脉冲单元。

三、实验内容编写实验程序,将P1口的低4位定义为输出,高4位定义为输入,数字量从P1口的高4位输入,从P1口的低4位输出控制发光二极管的亮灭。

提高部分:LED灯控制要求:通过KK1实现LED灯工作方式即时控制,完成LED灯左循环、右循环、间隔闪烁功能。

四、实验分析P1口是8位准双向口,每一位均可独立定义为输入输出,输入位置1。

通过A的左/右移位及赋值55H、0AAH,再将A值送入P1,可实现LED灯左循环、右循环、间隔闪烁功能。

五、实验步骤(一)基础实验程序及实验程序流程图如下。

实验程序:ORG 0000HLJMP MAINORG 0100HMAIN:MOV P1,#0F0H ;将开关状态送入P1高位MOV A,P1 ;送入ASWAP A ;高低位互换MOV P1,A ;将开关状态送入P1低位JMP MAIN ;循环SJMP $END程序流程图:图1 LED开关控制显示功能图图2 实验接线图实验步骤:1. 按图2所示,连接实验电路图,图中“圆圈”表示需要通过排线连接;2. 编写实验程序,编译链接无误后进入调试状态;3. 运行实验程序,观察实验现象,验证程序正确性;4. 按复位按键,结束程序运行,退出调试状态;5. 自行设计实验,验证单片机其它IO 口的使用。

(二)提高实验程序及实验程序流程图如下。

实验程序:实验程序流程图:ORG 0000HLJMP MAINORG 0100HMAIN:KT: ;检查KK1SETB P3.3JNB P3.3,KTCLR P3.3LL1: ;左循环MOV A,#01HX1:MOV P1,ACALL DELAYRL ASETB P3.3JNB P3.3,X1CLR P3.3LL2: ;右循环MOV A,#80HX2:MOV P1,ACALL DELAYRR ASETB P3.3JNB P3.3,X2CLR P3.3LL3: ;间隔闪烁MOV A,#55HMOV P1,ACALL DELAYMOV A,#0AAHMOV P1,ACALL DELAYSETB P3.3JNB P3.3,LL3CLR P3.3JMP KTDELAY: ;延时子程序MOV R2,#00H图3 实验流程图MOV R3,#00HABC:DJNZ R2,ABCDJNZ R3,ABCRETSJMP $END实验步骤:(1)按图4连接实验电路;(2)编写实验程序,编译、链接无误后启动调试;(3)运行实验程序,每按一次KK1+,观察实验现象;(4)验证程序功能,实验结束按复位按键退出调试。

单片机实验报告

单片机实验报告

单片机实验报告班级:09050541学号:0905054116姓名:王昆鹏实验1 P1口实验一、实验目的:1.学习P1口的使用方法。

2.学习延时子程序的编写和使用。

二、实验设备:CPU挂箱、8051CPU模块三、实验内容:1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

四、实验原理:P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。

作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。

软件延时,如果用c编程时,通过使用keil的软件模拟,调试观察子函数(delay)延时时间。

(具体延时可以自行设定)使用汇编语言的软件延时,可以计算其指令的周期数,大概估算其软件延时。

五、实验原理图:P1口输出、输入实验六、实验步骤:执行程序:P1.0~P1.7接发光二极管L1~L8。

七、程序框图:循环点亮发光二极管(具体延时可以自行设定)八、程序代码NAME T1_1ORG 0000HLJMP STARTORG 0030HSTART: MOV A,#0FEH //将1111 1110赋给A LOOP: RL A //A循环左移MOV P1,A //把A赋给端口P1LCALL DELAY //延时0.16sJMP LOOP //循环;延时函数DELAY: MOV R1,#200DEL1: MOV R2,#200DEL2: DJNZ R2,DEL2DJNZ R1,DEL1RETEND实验2 中断口实验一、实验目的:1.学习外部中断技术的基本使用方法。

2.学习中断处理程序的编程方法。

二、实验设备:CPU挂箱、8051CPU模块三、实验内容:通过设定两个中断使能和触发方式,并编写相应的中断服务子函数,改变led灯的变化情况。

当按下KEYBOARD的按键时8个led都灭,当把k1向上拉再复位后,4个led亮,4个灭。

四、实验原理:参考《单片机原理及接口技术》第三版,北京航空航天大学出版社。

单片机STM32实验报告

实验报告课程名称:单片微机原理与车载系统学生姓名蒋昭立班级电科1601学号16401700119指导教师易吉良成绩2018年12 月17 日实验1 GPIO实验1.1 实验目的1)熟悉MDK开发环境;2)掌握STM32单片机的GPIO使用方法。

1.2 实验设备1)一台装有Keil和串口调试软件的计算机;2)一套STM32F103开发板;3)STlink硬件仿真器。

1.3 基本实验内容1)熟悉MDK开发环境,参考《STM32F1开发指南(精英版)-寄存器版本_V1.0》第3章,安装MDK 并新建test工程,运行例程,在串口窗宽观察结果,并记录如下:从图片可以看出,例程运行成功,没有错误。

2)按键输入实验,《STM32F1开发指南(精英版)-寄存器版本_V1.0》第8章。

实现功能:3 个按钮(KEY_UP、KEY0和KEY1),来控制板上的2 个LED(DS0 和DS1)和蜂鸣器,其中KEY_UP 控制蜂鸣器,按一次叫,再按一次停;KEY1 控制DS1,按一次亮,再按一次灭;KEY0 则同时控制DS0 和DS1,按一次,他们的状态就翻转一次。

理解连续按概念及其实现代码。

参数mode 为0 的时候,KEY_Scan 函数将不支持连续按,扫描某个按键,该按键按下之后必须要松开,才能第二次触发,否则不会再响应这个按键,这样的好处就是可以防止按一次多次触发,而坏处就是在需要长按的时候比较不合适。

当mode 为1 的时候,KEY_Scan 函数将支持连续按,如果某个按键一直按下,则会一直返回这个按键的键值,这样可以方便的实现长按检测。

寄存器方法实现不支持连续按的关键代码,以及程序运行后的效果。

由程序可知,给KEY_Scan函数输入的值为0,为不支持连按模式。

寄存器方法实现支持连续按的关键代码,以及程序运行后的效果。

由程序可知,给KEY_Scan函数输入的值为1,为支持连按模式。

3)采用库函数方法实现按键输入实验,参考《STM32F1开发指南(精英版)-库函数版本_V1.0》第8章。

实验二D/A转换实验

&实验二D/A转换实验一、实验目的1. 理解D/A转换芯片0832与单片机接口及编程方法。

2. 了解D/A转换的基本原理。

3. 了解单片机系统中扩展D/A转换的基本方法。

二、实验原理及内容1.实验原理DAC0832内部具有输入寄存器和DAC寄存器两级数据寄存器,它不需要外加其它电路便可以与单片机的数据总线相连。

DAC0832引脚说明如下:D0~D7:8位数据输入。

I out1和I out2:DAC电流输出1和DAC电流输出2,I out1和I out2之和为一常量。

R FB:反馈信号输入端。

DAC0832的输出是电流型的,为了取得电压输出需在电压输出端接运算放大器,R FB即为运算放大器的反馈电阻端。

反馈电阻在片内。

ILE:允许输入锁存信号。

1WR:锁存输入数据的写信号和锁存输入寄存器输出数据的写信号。

WR和2XFER:传送控制信号。

CS:片选信号。

DAC0832输出是电流型的,但实际应用中往往需要电压输出信号,所以电路中采用运算放大器来实现电流转换为电压。

本实验系统上,采用参考电压为5V,所以当数字量输入在00H~FFH范围时电压输出量为0~+5V,这种方式称单极型输出,若电压输出为±5V,则称为双极型输出。

实际应用中需要单极性输出,也需要双极型输出,所以电路应用两片运放LM741来实现两种极性的输出。

实验系统中原理图如图8-2所示。

DAC0832与单片机接口:0832的D0~D7接单片机P0口;DAC0832的片选接单片机的P2.7,为了避免模块之间的冲突,P2.7通过跳线J505与DAC0832相连。

DAC0832的WR信号接单片机的写信号WR,U506和U507是单运放LM741完成电流到电压和正负电压的转换。

单片机对DAC0832控制过程:使能CS 、XFER ,向寄存器中写入需转换数据。

2.实验内容1)将扩展板的电源J501与主板的电源接口J2或J14连接起来;将扩展板的信号接口J500与主板的信号接口J15或J13连接起来;将主板上的拨码开关5、6、7、8拨到ON ;2)在keil 编程环境下编写程序,完成实验功能。

单片机输入和输出


2. 状态信息 输入设备的“准备就绪”,输出设备的“忙”信号等。CPU根据外设的状态, 决定是否输入或输出数据。
3.控制信息 控制信息是在传选过程中.CPU发送给外设的命令.用于控制外设的工作。 例如,控制设备的起停
7.1.3
I/O端口的地址分配
首先清楚I/O接口(Interface)和I/O端口(Port)的概念。
扩展I/O口与外部RAM统一编址 使用同样的指令MOVX访问 注意控制总线RD/WR的接法
7.2 微型机与外设之间的数据传送方式 微型机与外设之间的数据传送方式可归纳为三种:程序传送、中断传送和 DMA传送。 7.2.1 程序传送 不是传送程序 程序传送,是指CPU与外设之间的数据传送在程序控制下进行的一种方式, 它又分为无条件传送和条件传送两种。 1.同步传送方式(无条件传送) 当外设速度和单片机的速度相比拟时,常采用同步传送方式,最典型的同 步传送就是单片机和外部数据存储器之间的数据传送。 适用于对简单的I/O设备(如开关、LED显示器、继电器等)的操作,或 者I/O设备的定时固定或已知的场合。 2.查询传送方式(条件传送,异步式传送) 查询外设“准备好”后,再进行数据传送。 优点:通用性好,硬件连线和查询程序十分简单, 缺点:效率不高。 为提高效率,通常采用中断传送方式。
(2)模拟量 当微型机用于控制、检测或数据采集时.大量的现场信息是连续变化的物理量 (如温度、压力、流量.位移等).这些物理量经过传感器变换成电量,并经放大 得到模拟电压或电流.这些模拟量必须再经过A/D转换后.把它们变成数字量 才能输入计算机。计算机的输出也必须先经过D/A转换,把数字量变成模拟量 后再控制执行机构。
3.信息转换
4.通信联络
7.1.2 I/O接口的构成

实验三P3.3口输入、P1口输出实验

实验三 4.1 P3.3口输入、P1口输出实验系别专业:电子系12级电信2班学号:3121003210姓名:李书杰指导老师:刘志群老师4.1.1 实验要求1. 复习Keil C51调试硬件的操作方法。

2. 复习单片机作为通用I/O口的注意事项。

3. 复习单片机操作I/O口的程序设计方法。

4.1.2 实验设备PC 机一台,TD-NMC+教学实验系统4.1.3 实验目的1. 熟悉单片机仿真实验软件Keil C51调试硬件的方法。

2. 了解P3、P1口作通用I/O口的使用方法。

3. 掌握延时子程序的编写和使用方法。

4. 了解单片机对简单I/O的扩展方法。

4.1.4 实验内容实验1根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能:将P1口的低4位定义为输出,高4位定义为输入,数字量从P1口的高4位输入,从P1口的低4位输出控制发光二极管的亮灭。

程序如下:KEY:MOV P1,#0F0H ;令所有行为低电平KEY1:MOV R7,#0FFH ;设置计数常数DJNZ R7,KEY1 ;延时MOV A, P1 ;读取P1口的列值ANL A,#0F0H ;判别有键值按下吗?CPL A ;求反后,有高电平就有键按下JZ EKEY ;无键按下时退出LCALL DEL20 ms ;延时20 ms去抖动SKEY:MOV A,#00 ;下面进行行扫描,1行1行扫MOV R0,A ;R0作为行计数器,开始为0MOV R1,A ;R1作为列计数器,开始为0MOV R3 #0FEH ;R3暂存行扫描字,低4位为行扫描字SKEY2:MOV A,R3MOV P1,A ;输出行扫描字,高4位全1NOPNOPNOPMOV A,P1 ;读列值MOV R1,A ;暂存列值ANL A,#0F0H ;取列值CPL A ;高电平则有键闭合S123:JNZ SKEY3 ;有键按下转SKEY3INC R0 ;行计数器加1SETB C ;准备将行扫描左移1位,;形成下一行扫描字,C=1保证输出行扫描字中高4位全为1,;为列输入作准备,低4位中只有1位为0MOV A,R3 ;R3带进位C左移1位RLC AMOV R3,A ;形成下一行扫描字→R3MOV A,R0CJNE A,#04H,SKEY1 ;最后一行扫(4次)完了吗?EKEY:RET;列号译码SKEY3:MOV A,R1JNB ACC.4,SKEY5JNB ACC.5,SKEY6JNB ACC.6,SKEY7JNB ACC.7,SKEY8AJMP EKEYSKEY5:MOV A,#00HMOV R2,A ;存0列号AJMP DKEYSKEY6:MOV A,#01HMOV R2,A ;存1列号AJMP DKEYSKEY7:MOV A,#02HMOV R2,A ;存2列号AJMP DKEYSKEY8:MOV A,#03HMOV R2,A ;存3列号AJMP DKEY;键位置译码DKEY:MOV A,R0 ;取行号ACALL DECODEAJMP EKEY;键值(键号)译码DECODE:MOV A,R0 ;取行号送AMOV B,#04H ;每一行按键个数MUL AB ;行号×按键数ADD A,R2 ;行号×按键数+列号=键值RET实验2根据TD-NMC+实验平台的单元电路,构建一个硬件系统,并编写实验程序实现如下功能:将P3.3口作状态输入口(接一个逻辑开关,即拨码开关),P1口做输入口(接八只发光二极管D0~D7)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、实验目的1.熟悉教学板电路及其结构。

2.掌握利用μVision C51 软件编辑、调试(包括仿真调试、单步调试)、运行单片机程序的步骤和方法,掌握利用STC-ISP V39软件和下载线将程序写入单片机的方法。

3.通过实验熟悉51单片机的并行I/O口,并掌握它们的应用。

4.掌握矩阵键盘、LED动态显示的工作原理。

二、实验设备PC机一台、实验教学板一块。

三、实验内容1.实验线路如附图所示,51单片机的P0口输出接8个发光二极管的阴极,P2.4经NPN 三极管9011控制发光管的阳极。

P3口支持一个8位行列式键盘,其中P3.4~P3.7供键盘扫描输出,P3.2、P3.3作键盘扫描输入。

实验要求:编程实现键盘对发光二极管的控制,每按一个按键,使对应的二极管点亮。

2.51单片机P0口输出同时接4个数码管的阴极,P2.0~P2.3,经NPN三极管9011接数码管的阳极,该端口用于分别控制相应数码管的导通。

实验要求:编程实现对任意按键动作的次数进行计数(最大99次),同时将计数值实时显示。

四、实验步骤1.将实验板与PC机通过COM口连接。

启动PC机,进入μVision软件环境,选择建立新工程文件,即可开始输入源程序。

2.完成汇编、编译、连接,若有错误,则修改源程序,直至编译、连接通过为止。

3.接上实验板上的电源。

4.运行“STC-ISP V39.EXE”,将程序代码下载到实验板的单片机中。

操作的顺序是:1)选择单片机(MCU TYPE)型号。

如:“STC89C51RC”要与实验板上所装单片机的型号一至。

2)打开文件(Open File)。

即把要下载到单片机的程序文件(已通过编译了的机器码文件——二进制(.Bin)或十六进制(.Hex)的)调到“文件缓冲区”,这时可看到右边的“文件缓冲区”有数字变化。

3)选择串行通信口。

选对时,软件上的小灯会变绿。

否则小灯是灰色。

且在左下窗口提示“出错信息”。

4)下载:按“Download/下载”按键下载。

5)把实验板上的供电的直流电源拔掉或关掉3秒钟再插入或打开电源(为单片机上电复位)。

5.观察单片机运行情况,验证程序是否能完成题目给出的控制要求,若不能达到要求,分析原因、查找错误,修改源程序,再次汇编、连接,重新下载、运行,直至达到题目的控制要求。

五、遇到的问题及原因:1.实验一,把程序烧进单片机后,发现按键时,LED灯乱亮,经检查是LED等亮的数组除了问题,修改后可以正常工作。

2.在实验二中,程序烧进单片机后,有一个数码管很暗,并且有重影,修改了延时之后问题结局。

每按一次按键,显示数值会增加好多,后来发现是键盘扫描程序中,检测到按键按下后,没有等待按键释放。

附件一:参考程序流程图实验内容1流程图实验内容2流程图键盘处理程序流程图附件二:实验程序:实验内容1#include <reg52.h>/***************************************************程序名称:键盘功能:采集2*4键盘键值并在LED灯上显示作者:张俊淼备注:***************************************************//**************************************************/#define uint unsigned int#define uchar unsigned char/**************************************************/sbit feng=P2^5;//蜂鸣器控制sbit deng=P2^4;//LED灯总控制sbit LED1=P2^0;//LED数码管第一位sbit LED2=P2^1;//LED数码管第二位sbit LED4=P2^3;//LED数码管第四位sbit int0=P3^2;//外部中断0管脚sbit int1=P3^3;//外部中断1管脚/**************************************************/uchar Buffer[4] = {0xe0, 0xd0, 0xb0, 0x70};//键盘对比数组uchar LEDBuf[9] = {0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f, 0xff};//LED灯编码uchar Key=8;//键盘数值/**************************************************/void init(void);void delay_ms(uint x);/******************************************************************** * 名称 : main()* 功能 : 主函数* 输入 : 无* 输出 : 无***********************************************************************/ void main(){init();//初始化while(1){P0=LEDBuf[Key];//显示键值}}/******************************************************************** * 名称 : init()* 功能 : 初始化* 输入 : 无* 输出 : 无***********************************************************************/ void init(void){EA=1; //开总中断EX0=1; //开外部中断 0IT0=1; //设置成边沿触发方式EX1=1; //开外部中断 1IT1=1; //设置成边沿触发方式feng=0;//关蜂鸣器deng=1;//开启LED总控制LED2=0;//关闭数码管第二位LED3=0;//关闭数码管第三位LED4=0;//关闭数码管第四位P3&=0x0f;//初始化键盘输入端检测}/*************************************************** 名称 : delay_ms(uint x)* 功能 : 毫秒延时程序,对应C51的11.0592MHZ* 输入 : 欲延时毫秒数* 输出 : 无**************************************************/void delay_ms(uint x) //毫秒延时程序{unsigned char j;while(x--){for(j=0;j<123;j++){;}}}/**************************************************************//******************************************************************** * 名称 : Funint0()* 功能 : 外部中断0。

* 输入 : 无* 输出 : 无***********************************************************************/ void Funint0() interrupt 0{uchar i,x;EX0=0; //关外部中断 0EX1=0; //关外部中断 1delay_ms(30);//延时消抖if(int0==0)//判断按钮是否真的按下{int0=0;P3|=0xf0;//以上两条为进一步检测作准备x=P3&0xf0;//取P3高四位for(i=0;i<4;i++){if(x==Buffer[i])Key=i;//获取键值}while((P3&0xf0)!=0xf0);//等待按键放开}P3=0x0f;//初始化键盘输入端检测EX0=1; //开外部中断 0EX1=1; //开外部中断 1}/******************************************************************** * 名称 : Funint1()* 功能 : 外部中断1。

* 输入 : 无* 输出 : 无***********************************************************************/ void Funint1() interrupt 2{uchar i,x;EX0=0; //关外部中断 0EX1=0; //关外部中断 1delay_ms(30);//延时消抖if(int1==0)//判断按钮是否真的按下{int1=0;P3|=0xf0;//以上两条为进一步检测作准备x=P3&0xf0;//取P3高四位for(i=0;i<4;i++){if(x==Buffer[i])Key=4+i;//获取键值}while((P3&0xf0)!=0xf0);//等待按键放开}P3=0x0f;//初始化键盘输入端检测EX0=1; //开外部中断 0EX1=1; //开外部中断 1}实验内容2#include <reg52.h>/**************************************************/#define uint unsigned int#define uchar unsigned char/**************************************************/sbit feng=P2^5;//蜂鸣器控制sbit deng=P2^4;//LED灯总控制sbit LED1=P2^0;//LED数码管第一位sbit LED2=P2^1;//LED数码管第二位sbit LED3=P2^2;//LED数码管第三位sbit LED4=P2^3;//LED数码管第四位sbit int0=P3^2;//外部中断0管脚sbit int1=P3^3;//外部中断1管脚/**************************************************/uchar LEDBuf[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//LED数码管编码uchar Num=0;//计数值/**************************************************/void init(void);void delay_ms(uint x);void shownum(uchar num);/**************************************************/void main(){init();while(1){shownum(Num);}}/********************************************************************* 名称 : init()* 功能 : 初始化* 输入 : 无* 输出 : 无***********************************************************************/ void init(void){EA=1; //开总中断EX0=1; //开外部中断 0IT0=1; //设置成边沿触发方式EX1=1; //开外部中断 1IT1=1; //设置成边沿触发方式feng=0;//关蜂鸣器deng=0;//关闭LED总控制LED1=0;//关闭数码管第一位LED2=0;//关闭数码管第二位LED3=0;//关闭数码管第三位LED4=0;//关闭数码管第四位P3&=0x0f;//初始化键盘输入端检测}/**************************************************延时程序,对应C51的11.0592MHZ**************************************************/void delay_ms(uint x) //毫秒延时程序{unsigned int i,j;i=0;for(i=0;i<x;i++){j=108;while(j--);}}/******************************************************************** * 名称 : shownum()* 功能 : 数码管显示数字* 输入 : 0~99的要显示的数字* 输出 : 无***********************************************************************/ void shownum(uchar Num){static uchar number[2]={0x00, 0x00};//数码管的个位和十位number[1]=Num/10;number[0]=Num%10;P0=LEDBuf[number[0]];LED3=0;//关闭数码管第三位LED4=1;//开启数码管第四位delay_ms(10);//个位显示延时P0=LEDBuf[number[1]];LED3=1;//开启数码管第三位LED4=0;//关闭数码管第四位delay_ms(10);//十位显示延时}/**************************************************************//******************************************************************** * 名称 : Funint0()* 功能 : 外部中断0。

相关文档
最新文档