单片机实验-IO口的输入输出实验

合集下载

实验一 IO开关量输入输出实验

实验一  IO开关量输入输出实验

单片机原理实验报告实验一:IO开关量输入输出实验学院: 物理与机电工程学院专业: 电子科学与技术班级: 2013 级 2 班学号: 201310530208姓名: 何丽丽指导老师: 柳妮实验一IO开关量输入输出实验目的:学习单片机读取IO引脚状态的的方法。

内容:编程读取IO引脚状态。

设备:EL-EMCU-I试验箱、EXP-89S51/52/53 CPU板。

编程:首先要把相关的引脚设置在IO的输入状态,然后写一个循环,不停地检测引脚的状态。

步骤:1、将CPU板正确安放在CPU接口插座上,跳线帽JP2短接在上侧。

2、连线:用导线将试验箱上的的IO1--- IO8分别连接到SWITCH 的8个拨码开关的K1---K8的输出端子K1---K8上,连接好仿真器。

3、实验箱上电,在PC机上打开Keil C环境,打开实验程序文件夹IO_INPUT下的工程文件IO_INPUT.Uv2编译程序,上电,在程序注释处设置断点,进入调试状态,打开窗口Peripherals-->IO-Port-->P0,改变开关状态,运行程序到断点处,观察窗口的数值与开关的对应关系。

程序:ORG 0000HLJMP MAINORG 0030HMAIN:MOV P0,#0FFHMOV A,P0SWAP AMOV P0,ASJMP MAINEND程序分析:从上面的程序可以看出我们需要用导线将试验箱上的的IO1--- IO8分别连接到SWITCH的8个拨码开关的K1---K8的输出端子K1---K8上,连接好仿真器。

在通过SWAP A MOV P0,A这组指令来对P0口所接的对应的发光二极管对应的状态通过拨码开关的开关来控制发光二极管。

结论:通过上面这段程序,我们实现了用拨码开关来控制P0口所接的发光二极管的亮灭。

通过I\O口P0.0—P0.3接拨码开关,P0.4—P0.7一一对应的接发光二极管。

单片机原理及应用实验二报告

单片机原理及应用实验二报告

单片机原理及应用实验二报告实验二:单片机IO口的输入输出实验一、实验目的:1.理解并掌握单片机IO口的输入输出原理;2.掌握基础的输入输出编程技巧;3.熟悉单片机实验的基本流程和实验报告格式。

二、实验器材:1.STM32F103C8T6开发板2.LED灯3.电阻(220Ω)4.面包板、杜邦线等。

三、实验原理:单片机的IO口是实现与外部器件进行通信的重要接口,通过编程,我们可以控制IO口的状态(低电平或高电平)来实现对外部器件的控制或检测。

IO口的输入输出原理主要有两种:1.三态输出方式:通过设置IO口的DDR寄存器来将IO口设置为输出模式(推挽输出),并通过设置IO口的ODR寄存器来控制IO口的输出状态为低电平或高电平;2.上拉输入方式:通过设置IO口的DDR寄存器来将IO口设置为输入模式,同时设置IO口的CR寄存器的PUPD位为上拉使能,通过读取IO口的IDR寄存器可以获取IO口的输入状态。

四、实验步骤:1.连接电路:将STM32F103C8T6开发板的VDD和VSS(即5V和GND)分别连接到面包板的3V3和GND,将LED的阳极(长脚)连接到STM32F103C8T6开发板的PA0引脚,将LED的阴极(短脚)通过一个220Ω的电阻连接到GND。

2. 打开Keil uVision5软件,创建一个新的工程,并选择适合的芯片型号(STM32F103C8T6)。

3.编写代码实现将PA0引脚设置为输出模式,并控制LED的亮灭。

五、实验代码:```c#include "stm32f10x.h"void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);int main(void)GPIO_Configuration(;while (1)GPIO_SetBits(GPIOA, GPIO_Pin_0); // 点亮LEDGPIO_ResetBits(GPIOA, GPIO_Pin_0); // 关闭LED}```六、实验结果与分析:七、实验心得:本次实验主要学习了单片机IO口的输入输出原理,了解了三态输出方式和上拉输入方式,并通过实际编写代码的方式,在STM32F103C8T6开发板上实现了控制LED的亮灭。

实验三 单片机IO口实验

实验三 单片机IO口实验

实验三单片机I/O口实验(P3和P1口应用)一、实验目的⑴掌握P3口、P1口简单使用。

⑵学习延时程序的编写和使用。

二、实验内容P3.3口做输入口,外接脉冲,每输入一个脉冲,P1口按十六进制加一,P1口做输出口,编写程序,使P1口接的8个发光二极管L0—L7按16进制加一方式点亮发光二极管。

三、实验原理图四、实验程序框图五、实验步骤⑴按图连接线路:系统扩展区1的P3.3用插针连至K0, P1.0—P1.7用插针连至L0-L7;⑵在闪动“P.”状态,按PCDBG键;⑶单击DVCC图标;⑷在系统设置选项中设定仿真模式为内程序、内数据;⑸在主菜单中选择联接;⑹选择实验指南/实验项目选择/单片机I/O口实验(P3和P1口应用),再选择实验指南/程序,打开该实验源程序⑺再在主菜单中选择调试,进入实验程序的编译、连接、目标文件的传送(三个步骤一起完成,也可以逐项进行);目标文件传送完后,在程序窗口内的首条指令前有一个蓝色光标出现;⑻连续运行实验程序(内程序,内数据);。

⑼开关K0每拨动一次,L0—L7发光二极管按16进制方式加一点亮。

六、实验代码ORG 0000HLJMP STARTORG 0100HSTART:MOV A,#00HMOV P1,AHA1S1:JB P3.3,HA1S1MOV R2,#10HLCALL DELAYJB P3.3,HA1S1HA1S2:JNB P3.3,HA1S2MOV R2,#10HLCALL DELAYJNB P3.3,HA1S2INC APUSH ACCMOV P1,APOP ACCAJMP HA1S1 DELAY: P USH 02H DELAY1: PUSH 02H DELAY2: PUSH 02H DELAY3: DJNZ R2,DELAY3POP 02HDJNZ R2,DELAY2POP 02HDJNZ R2,DELAY1POP 02HDJNZ R2,DELAYRETEND七、实验现象及结果分析。

实验三-IO和中断实验

实验三-IO和中断实验
紧急情况。
用C程序来实现上述交通灯时序的功能,延时 时间可通过示波器大致地校准。
三、实验内容
4、中断方式输入的交通灯时序:
将P3.2作为单片机的中断信号INT0; 利用中断方式,读取P3.2的电平; 实现上述交通灯时序;
用C程序编写中断程序函数,以及初始化和主 程序。
0输出1Hz方波,正常交通;
马灯效果: 1、C51实验开发板
1块
一个灯右循环间隔时间0.
1、P1口直接输出,驱动LED指示灯,演示跑马灯效果:
1、P1口直接输出,驱动LED指示灯,演示跑马灯效果:
P1口做输出口; 编写程序,使发光二极管指示灯循环点亮。
4、PC机
1台
P1连接至8只发光二极管接口JP8; 0输出占空比为75%、2Hz矩形波,紧急情况。
实验三 I/O和中断实验
一、实验目的
1、掌握单片机基本I/O口的使用特点,
了解本扩展I/O口的方法;
2、掌握单片机中断机制,
掌握单片机中断的使用特点和编程方法。
二、实验仪器
1、C51实验开发板
1块
2、直流温压电源
1台
3、仿真器
1只
4、PC机
1台
5、示波器
1台
三、实验内容
1、P1口直接输出,驱动LED指示灯,演示跑 马灯效果:
0
三、实验内容 用C程序来实现上述交通灯时序的功能,延时时间可通过示波器大致地校准。
实验三 I/O和中断实验
P3口作为输入口,查询P3.
2作为单片机的中断信号INT0;
掌握单片机中断的使用特点和编程方法。
4了、解中本断扩方展式I/O输口入的的1方交法、通;灯时P序1: 口直接输出,驱动LED指示灯,演示跑

实验二 IO口的输入与输出

实验二  IO口的输入与输出
实验一 软件和硬件的认识
主讲人:
宋淇
一、实验目的:
了解IO口的结构 熟源自IO口的特性 掌握IO口的控制二、实验仪器:

ATmage16实验板 一块 ISP单片机下载线 一条 PC机 一台
三、实验原理:
作为通用数字I/O 使用时,AVR 所有的I/O 端口都具有真正的读- 修改 - 写功能。这意味着用SBI 或CBI 指令改变某些管脚的方向( 或者是端口电 平、禁止/ 使能上拉电阻) 时不会改变其他管脚的方向( 或者是端口电平、 禁止/ 使能上拉电阻)。输出缓冲器具有对称的驱动能力,可以输出或吸收 大电流,直接驱动LED。所有的端口引脚都具有与电压无关的上拉电阻。 并有保护二极管与VCC 和地相连,如 Figure23 所示。在控制I/O时,分别 由方向寄存器DDRX与数据寄存器PORTX控制I/O的状态,如下表。
Figure 23. I/O 引脚等效原理图
所有的寄存器和位以通用格式表示:小写的“x” 表示端口的序号, 而小写的“n” 代表位的序号。但是在程序里要写完整。例如,PORTB3 表示端口B 的第3 位,而本节的通用格式为PORTxn。物理I/O 寄存器和 位定义列于P63“I/O 端口寄存器的说明” 。 每个端口都有三个I/O 存储器地址: 数据寄存器 – PORTx、 数据方向 寄存器 – DDRx 和端口输入引脚地址– PINx。数据寄存器和数据方向寄 存器为读/ 写寄存器,而端口输入引脚为只读寄存器。但是需要特别注 意的是,对PINx 寄存器某一位写入逻辑"1“ 将造成数据寄存器相应位的 数据发生"0“ 与“1“ 的交替变化。当寄存器MCUCR 的上拉禁止位PUD 置位时所有端口引脚的上拉电阻都被禁止。
端口引脚配置图

单片机数字输入输出与IO口编程实践指南

单片机数字输入输出与IO口编程实践指南

单片机数字输入输出与IO口编程实践指南引言:单片机是一种集成电路芯片,具有微处理器、内存和输入输出设备等功能模块。

在现代电子设备和嵌入式系统中,单片机广泛应用于各种领域。

在单片机编程中,数字输入输出(Digital Input Output,简称DIO)和IO口编程是基础而重要的部分。

本文将介绍单片机数字输入输出基础知识和IO口编程的实践指南。

一、数字输入输出的基本概念1.1 数字输入输出(DIO)的定义数字输入输出(DIO)是单片机进行与外部世界的交互的方式。

通过DIO,单片机可以从外部接收数据(输入)和向外部发送数据(输出)。

1.2 二进制表示在单片机中,数字信号被表示为二进制数值。

通常,0表示低电平(或逻辑低),1表示高电平(或逻辑高)。

1.3 IO口的分类单片机的IO口可分为输入口和输出口。

输入口用于接收外部信号,输出口用于向外部发送信号。

1.4 IO口的引脚编号单片机上的每个IO口都有一个引脚编号,通过这个编号可以确定特定的IO口。

二、数字输入输出的实现方式2.1 接口标准单片机的数字输入输出通常与外部设备通过特定的接口标准连接,如GPIO、UART、SPI、I2C等。

2.2 GPIO(通用输入输出)接口通用输入输出(GPIO)接口是最常见和基础的IO接口。

它提供了通用的数字输入输出能力,并且可以配置为输入口或输出口。

2.3 IO口的配置在单片机的程序中,需要对IO口进行相应的配置,包括输入模式、输出模式、输入电平触发方式、输出电平和驱动能力等。

三、IO口编程实践指南3.1 IO口初始化在进行IO口编程之前,首先需要进行IO口的初始化。

初始化包括设置IO口为输入还是输出、设置输入口的电平触发方式、设置输出口的初始电平等。

3.2 数字输入实践数字输入是指单片机通过IO口接收来自外部的数字信号。

为了正确读取到外部信号,需要配置IO口为输入模式,并设置电平触发方式。

3.3 数字输出实践数字输出是指单片机通过IO口向外部发送数字信号。

51单片机-IO口实验报告

51单片机-IO口实验报告

《信息技术综合实践》课程实验报告
1.打开KeiluVision2应用程序,新建一个工程,将IO.c文件添加到新建的工程中(将头文件中的头文件中的regx修改为reg),在输出中选择生成相应的HEX文件并保存到相应文件夹中
2.打开KeiluVision2应用程序,新建一个工程,将IO.c文件添加到新建的工程中(将头文件中的头文件中的regx修改为reg),在输出中选择生成相应的HEX文件并保存到相应文件夹中,进行文件的编译和调试。

3.进行实验箱的连线。

4.打开下载器,擦除并将生成的HEX文件调入Flash,然后选择“自动”。

5.通过示波器观察实验现象
5.1 示波器波形图
5.1.1(i的范围是小于500,波形图如下所示)
由图可知:当不修改i的范围时,波形的频率比较高,约在150Hz左右。

5.1.2(将代码中i的范围修改为小于20000,波形图如下所示)
由图可知:将i的范围变大以后,波形的频率变低并且稳定在5Hz左右。

5.2 小灯闪烁视频
(灯亮时的图片)。

单片机实验报告

单片机实验报告

成都理工大学信息科学与技术学院实验报告课程名称: 单片微型计算机系统原理与应用姓名: 贺成佳学号: 201113010803专业: 信息工程任课教师: 林凡强实验一开关量输入一、实验目的○熟悉单片机的P1口作IO口时的输入,输出应用二、程序设计#include <reg52.h>#include <intrins.h>#define uchar unsigned char //数据类型宏定义#define uint unsigned int/**********单片机IO口引脚定义********************************************/#define LED P0sbit K1 = P1^0;sbit K2 = P1^1;/**********函数定义******************************************************/ uchar scan_key();void proc_key(uchar key_v);void delayms(uchar ms);/**********主函数********************************************************/ void main(void){uchar key_s,key_v;key_v = 0x03; //初始化IO口LED = 0xfe;while(1){key_s = scan_key();if(key_s != key_v) //判断按键是否按下{delayms(10); //延时消抖key_s = scan_key();if(key_s != key_v){key_v = key_s;proc_key(key_v);}}}}/**********键盘扫描函数**************************************************/ uchar scan_key(){uchar key_s;key_s = 0x00;key_s |= K2;key_s <<= 1;key_s |= K1;return key_s; //返回按键号}/**********键盘处理函数**************************************************/ void proc_key(uchar key_v)if((key_v & 0x01) == 0){LED = _cror_(LED,1); //循环右移一位}else if((key_v & 0x02) == 0){LED = _crol_(LED, 1); //循环左移一位}}/***********延时函数*****************************************************/ void delayms(uchar ms)// 延时子程序{uchar i;while(ms--){for(i = 0; i < 120; i++);}}三、现象及结果上电时, 点亮P00口LED○按下K1时, LED向右移一位○按下K2时, LED向左移一位实验二 IO驱动实验一、实验目的○了解89C51单片机IO口的功能○熟悉89C51单片机的IO驱动程序的编写方法○掌握驱动程序的加载过程和方法二、程序设计#include<reg52.h>#include <intrins.h>#define uchar unsigned char //数据类型宏定义#define uint unsigned int/*********************引脚定义********************/ #define LED P0/*********************延时函数********************/ void delayms(uchar ms)// 延时子程序{unsigned char i;while(ms--){for(i = 0; i < 120; i++);}}/*********************主函数**********************/void main(void){LED = 0xfe; //初始化P0口while(1){ //延时delayms(250);LED = _crol_(LED,1); //循环右移1位,点亮下一个LED }}三、现象及结果LED流水灯实验三外部中断计数实验一、实验目的○掌握89C51单片机中断系统的工作原理○掌握89C51单片机中断优先级的概念二、程序设计#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/**********************共阳数码管编码表***************************/ unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 30x99,0x92,0x82,0xf8,0x80,0x90, 0xff};// 4, 5, 6, 7, 8, 9, offunsigned char dis_buf[4]; // 显示缓冲区uint int0_cnt=0; //计数初始化/**********************函数定义***********************************/ void update_disbuf();void delayms(uint j);/**********************主函数*************************************/ void main(void){IE=0X81; //开总中断和外中断0IT0=1; //下降沿触发P0=0x00; //初始化io口P1=1;dis_buf[0]=dis_code[0]; //缓冲器初始化dis_buf[1]=dis_code[0];dis_buf[2]=dis_code[0];dis_buf[3]=dis_code[0];while(1){P0=dis_buf[3];P1=0x01; // 显示千位delayms(5);P0=0xff;P0=dis_buf[2]; // 显示百位P1=0x02;delayms(5);P0=0xff;P0=dis_buf[1]; // 显示十位P1=0x04;delayms(5);P0=0xff;P0=dis_buf[0]; // 显示个位P1=0x08;delayms(5);P0=0xff;}}/*********************INT0中断处理函数*****************************/ void ex_int0()interrupt 0{EX0=0; //关闭中断int0_cnt++; //计数器加1if(int0_cnt>9999) //判断int0_cnt=0;dis_buf[3]=dis_code[int0_cnt/1000]; //分离出千位数dis_buf[2]=dis_code[int0_cnt%1000/100]; //分离出百位数dis_buf[1]=dis_code[int0_cnt%100/10]; //分离出十位数dis_buf[0]=dis_code[int0_cnt%10]; //分离出个位数EX0=1; //开中断}/*********************延时函数*************************************/ void delayms(uint j){uchar i;for(;j>0;j--){i=250;while(--i);i=249;while(--i);}}三、现象及结果通过一个安键来提供中断信号,但是由于按键有抖动现象,所以每按一次有可能产生多次计数脉冲,当有外部中断时(用按键K1模拟外部中断),计数器加1实验四计数器实验一、实验目的○学习89C51内部定时/计数器使用方法二、程序设计#include <reg52.h>#include <intrins.h>#define uchar unsigned char //数据类型宏定义#define uint unsigned int#define out P0 //IO端口定义/*******共阳数码管 0 , 1 ,2 ,3 , 4 ,5 ,6 , 7, 8 ,9 ******/ uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x01};uint i = 0; //全局变量uint cnt=0;/***********主函数*******************************************************/void main(void){int j;TMOD=0x15; // 定时器0工作于计数方式,工作方式1,16位计数// 定时器1工作于定时方式,工作方式1,16位定时TH0=0; // 清零计数器TL0=0;TH1=0x4C; // 12M晶振工作下,定时50msTL1=0x00;TR0=1; // 启动定时器0TR1=1; // 启动定时器1IE=0x88;// 打开定时中断1和总中断while(1){P2=0x00; // 输出百位out = seg[cnt/100];P2 = 0x01;for(j=0;j<100;j++);P2=0x00;out = seg[cnt%100/10]; // 输出十位P2 = 0x02;for(j=0;j<100;j++);P2=0x00;out = seg[cnt%10]; // 输出个位P2 = 0x04;for(j=0;j<100;j++);}}/***********计数器T0中断处理函数******************************************/void Timer1_ISR() interrupt 3{static char j = 0;i++;TH1=0x4C; // 重设定时器值,50ms @ 12MHz XTALTL1=0x00;if(++j == 20) // 50ms * 20 = 1S{j = 0;i = (TH0 << 8) | TL0; // 1S内的计数值cnt=i;i=0;TH0 = 0; // 清零计数TL0 = 0;}}三、现象及结果对外部脉冲进行计数,并通过4位数码管显示计数值实验五 RAM读写实验一、实验目的○掌握89C51单片机片内RAM读写方法二、程序设计#include <reg52.h>#include <intrins.h>#define uchar unsigned char //数据类型宏定义#define uint unsigned intuchar data dis_digit; //申明一个全局变量/*********************共阳数码管编码表*****************************************/uchar code dis_code[16]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 30x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};// 4, 5, 6, 7, 8, 9,a,b,c,d,e,fuchar data dis_buf[2];//数据缓冲器uchar data RW_Add; //在DATA区定义一个字符变量void delayms(uchar ms);/*********************主函数***************************************************/void main(void){uchar i;P0 = 0xff; //关闭段码P2 = 0x00; //关闭位选dis_buf[0] = 0xbf; // 显示"-"dis_buf[1] = 0xbf; // 显示"-"dis_digit = 0x01;while(1){RW_Add=0x78; //写入的字节dis_buf[0]=dis_code[(RW_Add&0xf0)>>4]; //写入5dis_buf[1]=dis_code[RW_Add&0x0f]; //写入8dis_digit=0x01;for(i=0;i<2;i++){P0=dis_buf[i]; // 显示数据P2=dis_digit;delayms(5); //延时P0=0xff;dis_digit<<=1; //左移1位}}}/***************延时函数*********************************************************/void delayms(unsigned char ms)// 延时子程序{unsigned char i;while(ms--){for(i = 0; i < 120; i++);}}三、现象及结果向内存中写入数据0x58,然后读出,用两位数码管显示读出的值实验六 PWM发生器实验一、实验目的○熟悉89C51单片机内部定时使用方法○熟悉89C51单片机的IO口使用方法二、程序设计#include<reg52.h>#include <intrins.h>#define uchar unsigned char //数据类型宏定义#define uint unsigned int/**********引脚定义*****************************************************/uchar PWM_T = 0; //占空比控制变量sbit PWM_OUT=P0^0; //占空比输出脚void main(void){bit flag = 1; //控制灯渐亮渐熄方式uint n;TMOD=0x02; //定时器0,工作模式2,8位定时模式TH0=241; //写入预置初值241到定时器0,使15微秒溢出一次(11.0592MHz)TL0=241; //写入预置值TR0=1; //启动定时器ET0=1; //允许定时器0中断EA=1; //允许总中断PWM_OUT=1; //初始化P1while(1){for(n=0;n<30000;n++); //延时,将响应定时器中断if(flag==1)PWM_T++;elsePWM_T--;if(PWM_T>=10) //设置级别为10flag=0;if(PWM_T==0) //限定最低级别为0flag = 1;}}/*********************定时器中断0**************************************/timer0() interrupt 1 using 2{static uchar t ; //t用来保存当前时间在一秒中的比例位置t++; //每15微秒增加1if(t==10) //1.5毫秒的时钟周期{t=0; //使t=0,开始新的PWM周期PWM_OUT=0; //输出0}if(PWM_T==t) //按照当前占空比切换输出为高电平PWM_OUT=1; //输出1}三、现象及结果通过对P0^0脚占空比调整输出10个级别的调整波形,可通过示波器观察,或者是驱动LED,可以看到其亮暗变化实验七 PWM蜂鸣器实验一、实验目的○熟悉89C51单片机内部定时使用方法二、程序设计#include<absacc.h> //头文件#include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charsbit BUZZER=P0^0;//发声音口uchar codeT0_H[16]={0xFF,0xFB,0xFB,0xFC,0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,0xFE,0xFE, 0xFE,0xFE,0xFE}; //定时器延时高位uchar codeT0_L[16]={0xF1,0x4,0x90,0xC,0x44,0xAC,0x9,0x34,0x82,0xC8,0x06,0x22,0x56,0x85 ,0x9A,0xC1}; //定时器延时低位uchar codemusic[32]={8,0,8,9,8,0xB,0xA,0,8,0,8,9,8,0xC,0xB,0,8,0,8,0xF,0xD,0xB,0xA,9,0xE,0, 0xE,0xD,0xB,0xC,0xB,0x0}; //音律选择uchar codemusic_L[32]={2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4,2,1,1,4,4,4,4,4}; //延时长度uchar a,b;void delay_music(uint v) //延时{while(v!=0)v--;}void delay_music1(uint j)//延时{while(j!=0){j--;delay_music(200);}}void delay_music2(uint j)//延时{while(j!=0){j--;delay_music1(80);}}/************************主函数****************************************/ void main(){//uint i;uchar k,n,m;delay_music(100);TMOD=0x11; //初始化定时器TH1=0xfc;TL1=0x66;EA=1; //开中断ET0=0;TR0=0;ET1=0;TR1=0;while(1){ET1=1; //打开定时器TR1=1; //启动计数for(k=0;k<32;k++) //循环32次{n=music[k];m=music_L[k];a=T0_H[n];b=T0_L[n];delay_music2(m);}}}/**********************定时计数器T1中断处理****************************/time1 () interrupt 3 using 3 //定时器中断{TH1=a; //初始化定时器计数器TL1=b;BUZZER=!BUZZER; //蜂鸣器取反}三、现象及结果蜂鸣器演奏歌曲实验八外扩WDG看门狗实验一、实验目的○掌握WDG看门狗的作用二、程序设计#include<reg52.h>#include <intrins.h>#define uchar unsigned char //数据类型宏定义#define uint unsigned int/********引脚定义**************************************************************/ #define LED P0sbit SW1=P1^0;sbit WDT=P1^1;/********延时函数**************************************************************/ void delayms(uchar ms)// 延时子程序{unsigned char i;while(ms--){for(i = 0; i < 120; i++);}}/*********主函数***************************************************************/ void main(void){LED = 0xfe; //初始化LEDWDT=1;_nop_(); //初始化看门狗WDT=0;_nop_();WDT=1;_nop_();WDT=0;while(1){if(SW1) //SW1=1时,喂狗{WDT=1;_nop_();WDT=0;_nop_();WDT=1;_nop_();WDT=0;}delayms(150); //延时delayms(150);LED = _crol_(LED,1);//循环右移1位,点亮下一个LED }}三、现象及结果○当开关SW1置高时,程序清除硬件看门狗 LED流水灯正常运行○当开关SW1置低时,程序不清除看门狗,导致程序复位,LED流水灯无法正常运行。

单片机实验 IO口的输入输出实验.

单片机实验 IO口的输入输出实验.

实验二 I/O口输入、输出实验一、实验目的1. 学习I/O口的使用方法。

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

二、参考程序框图三、程序设计1、P0口循环点亮程序 ORG 0030HSTART : MOV P2,#00H; //消影 MOV A ,#01H; // LOOP : MOV P2 ,A; //点亮一个led 灯ACALL DELAY; //延时500ms RL A; //左移一位 AJMP LOOP; //跳转循环DELAY : MOV R7,#10; //延时程序 DE1 : MOV R6,#200; DE2 : MOV R5,#123; DJNZ R5,$; DJNZ R6,DE2; DJNZ R7,DE1; RET END2、I/O口输入输出(方法一)ORG 0000H;START : MOV P2,#00H; //初始化 MOV P0,#00H;MOV P1,#0FFH; //p1口初始化给ffh 值 MOV DPTR,#TABLE; //表地址存入DPTR MOV 50H,#0FEH; //比较初值载入地址50h L0 :MOV A,P1; //按键消抖 CJNE A,#0FFH,L1; AJMP L0; L1 :MOV A,P1;CJNE A,#0FFH,LL1; AJMP L0;LL1 :CJNE A,50H,LL2; //是否与地址50h 中数据相等 MOV P0,A; //相等输出对应led 灯 MOV A,#00H; MOVC A,@A+DPTR;MOV P2,A; //输出表格数据到数码管 LCALL DELAY; //延时LJMP START; //返回程序开头 LL2 :XCH A,50H; //交换数据 RL A; //左移XCH A,50H; //再次交换,此时地址50h 中数据左移一位 INC DPTR; //表格数据地址加一 LJMP LL1; //返回继续比较DELAY : MOV R7,#01H; //延时程序 DE1 : MOV R6,#28H; DE2 : MOVR5,#5AH; DJNZ R5,$;DJNZ R7,DE1; RETTABLE : ;//DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;DB 06H,5BH,4FH,66H,6DH,7DH,07H,7FH; //表格数据 END程序二(方法二)ORG 0000HMOV P2,#00H; //I./O口初始化 MOV P1,#0FFH; //P1口赋FFH 初值 MOVP0,#00H;START : MOV P2,#00H; //P2清0; MOV P0,#00H; //P0清0; MOV R1 ,P1;MOV A,R1; //读P1口CJNE A,#0FFH,L1; //是否有数据输入AJMP START; //无输入则跳转,继续查询 LCALL DELAY;L1 : MOV R1,P1; //消除按键抖动 MOV A,R1;CJNE A, #0FFH,LL1; AJMP START;LL1 : CJNE A,#0FEH,LL2; //是否按键1输入MOV P2,#06H; //是则P2输出相应的按键号码 CPL A; //A取反MOV P0,A; //输出到P0口 LCALL DELAY; //延迟AJMP LP; //跳转到LPLL2 : CJNE A,#0FDH,LL3; //是否按键2输入 MOV P2,#5BH; //以下同上 CPL A; MOV P0,A;LCALL DELAY; AJMP LP;LL3 : CJNE A,#0FBH,LL4; //判断按键3是否按下 MOV P2,#4FH; CPL A; MOV P0,A;LCALL DELAY; AJMP LP;LL4 : CJNE A,#0F7H,LL5; //判断按键4是否按下CPL A; MOV P0,A;LCALL DELAY; AJMP LP;LL5 : CJNE A,#0EFH,LL6; //判断按键5是否按下 MOV P2,#6DH; CPL A; MOV P0,A;LCALL DELAY; AJMP LP;LL6 : CJNE A,#0DFH,LL7; //判断按键6是否按下 MOV P2,#7DH; CPL A; MOV P0,A;LCALL DELAY; AJMP LP;LL7 : CJNE A,#0BFH,LL8; //判断按键7是否按下 MOV P2,#07H; CPL A; MOV P0,A;LCALL DELAY; AJMP LP;LL8 : CJNE A,#7FH,LP; //判断按键8是否按下 MOV P2,#7FH; CPL A; MOVP0,A;LCALL DELAY;LP : AJMP START; //跳转回程序开头 DELAY : MOV R7,#01H; //延时程序DE1 : MOV R6,#28H; DE2 : MOV R5,#5AH; DJNZ R5,$; DJNZ R6,DE2; DJNZR7,DE1; RET END四、思考题1、LED 循环方向更改:RL A; 改成 RR A;1S 的延时程序: DELAY : MOV R7,#20; //延时程序DE1 : MOV R6,#200; DE2 : MOV R5,#123;DJNZ R5,$;DJNZ R6,DE2;DJNZ R7,DE1; RET 2、提高电阻阻值3、一般为5V 或者3.3V 。

IO口输入、输出实验

IO口输入、输出实验

实验一I/O口输入、输出实验2010.04.20一、实验目的:了解LED二极管的工作原理。

掌握LED二极管亮灭左右移的编程方法。

二、实验原理:八个发光二极管L1-L8分别接在单片机的P1.0-P1.7接口上,输出“0”时,发光二极管亮。

我们可以运用输出端口指令MOV P1,A或MOV P1,#DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。

表1三、实验电路原理图四、程序框图实验程序:START: MOV ACC,#0FEH ;ACC中先装入LED1亮的数据(二进制的11111110)MOV P1,ACC ;将ACC的数据送P1口MOV R0,#7LOOP1: RL A ;将ACC中的数据左移一位MOV P1,A ;把ACC左移后的数据送p1口显示ACALL DELAY ;调用延时子程序DJNZ R0,LOOP1 ;没有移动够7次继续移动MOV R1,#7LOOP2: RR A ;将ACC中的数据右移一位MOV P1,A ;把ACC右移后的数据送p1口显示ACALL DELAYDJNZ R1,LOOP2AJMP START ;移动完7次后跳到开始重来,以达到循环流动效果;----- 延时子程序 -----DELAY: MOV R2,#255D1: MOV R3,#255DJNZ R3,$DJNZ R2,D1RET ;延时子程序结束,返回到调用处的下一句END ;程序结束实验现象:实验实现了单一灯的左移右移。

开始时P1.0口的LED点亮,然后P1.1→P1.2→P1.3→┅→P1.7的LED依次点亮,实现了右移。

当P1.7的LED点亮后,P1.6→P1.5→P1.4→┅→P1.0口的LED又依次点亮,实现了左移。

然后循环,从而实现灯的循环左右移。

实验结论:通过单片机对P1口赋值,然后利用移位RL和RR指令使相应的LED点亮,可以实现灯的左右移。

单片机实验报告(相当不错,有具体实验结果分析哦)

单片机实验报告(相当不错,有具体实验结果分析哦)

学生姓名:学号:专业班级:实验类型:□ 验证□ 综合□ 设计□ 创新实验日期:实验成绩:实验一 I/O 口输入、输出实验地点:基础实验大楼A311一、实验目的掌握单片机P1口、P3口的使用方法。

二、实验内容以P1 口为输出口,接八位逻辑电平显示,LED 显示跑马灯效果。

以P3 口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。

三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。

四、实验说明和电路原理图P1口是准双向口,它作为输出口时与一般的双向口使用方法相同。

由准双向口结构可知当P1口作为输入口时,必须先对它置高电平使内部MOS管截止。

因为内部上拉电阻阻值是20K~40K,故不会对外部输入产生影响。

若不先对它置高,且原来是低电平,则MOS管导通,读入的数据是不正确的。

本实验需要用到CPU模块(F3区)和八位逻辑电平输出模块(E4区)和八位逻辑电平显示模块(B5区)。

2学生姓名:学号:专业班级:实验类型:□ 验证□ 综合□ 设计□ 创新实验日期:实验成绩:五、实验步骤1)系统各跳线器处在初始设置状态。

用导线连接八位逻辑电平输出模块的K0 到CPU 模块的RXD(P3.0 口);用8 位数据线连接八位逻辑电平显示模块的JD4B 到CPU 模块的JD8(P1 口)。

2)启动PC 机,打开THGMW-51 软件,输入源程序,并编译源程序。

编译无误后,下载程序运行。

3)观察发光二极管显示跑马灯效果,拨动K0 可改变跑马灯的方向。

六、实验参考程序本实验参考程序:;//******************************************************************;文件名: Port for MCU51;功能: I/O口输入、输出实验;接线: 用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);;用8位数据线连接八位逻辑电平显示模块的JD2B到CPU模块的JD8(P1口)。

单片机io口实验结论

单片机io口实验结论

单片机io口实验结论单片机IO口实验结论单片机IO口是单片机与外部设备交互的重要接口,通过IO口可以实现输入输出功能。

在进行单片机IO口实验的过程中,我们得出了以下几点结论。

1. 单片机IO口具有输入和输出功能。

通过设置相应的寄存器,可以将IO口配置为输入或输出模式。

输入模式时,可以读取外部信号的状态;输出模式时,可以向外部设备发送信号。

2. 单片机IO口具有高低电平控制能力。

通过设置相应的寄存器,可以将IO口输出高电平或低电平信号。

高电平一般表示逻辑1,低电平表示逻辑0。

通过控制IO口的高低电平,可以与其他设备进行通信。

3. 单片机IO口具有上拉和下拉功能。

当IO口配置为输入模式时,可以通过上拉或下拉电阻来确保输入信号的稳定性。

上拉电阻使得输入信号在未连接时保持高电平,下拉电阻使得输入信号在未连接时保持低电平。

4. 单片机IO口具有中断功能。

通过配置相应的寄存器和中断向量表,可以使IO口在特定条件下触发中断。

当IO口输入信号满足中断触发条件时,可以立即响应中断并执行相应的中断服务程序。

5. 单片机IO口的电流限制。

在使用IO口时,需要注意IO口的电流限制。

如果连接的外部设备需要较大的电流驱动能力,可以通过外部电流放大器或继电器等方式来实现。

6. 单片机IO口的电压范围。

在使用IO口时,需要了解IO口的电压范围。

不同的单片机IO口电压范围可能有所不同,需要根据具体的需求选择合适的单片机型号和IO口。

7. 单片机IO口的电平转换。

当单片机与其他设备进行通信时,可能存在电平不匹配的情况。

可以通过电平转换电路来实现不同电平之间的转换,以确保通信的稳定性。

8. 单片机IO口的使用限制。

在使用IO口时,需要遵守单片机的使用规范和限制。

例如,不同的IO口可能有不同的功能限制、电流限制和电压范围限制,需要根据具体的芯片手册进行配置。

总结:单片机IO口是单片机与外部设备交互的重要接口,通过IO 口可以实现输入输出功能。

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

实验三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)。

单片机实验报告二 单片机IO口实验

单片机实验报告二 单片机IO口实验

南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证⃞综合⃞设计⃞创新实验日期:2019.4.16 实验成绩:实验二单片机I/O口实验(一)实验目的1.掌握单片机最小系统的构成,学习如何控制I/O口来驱动发光二极管,掌握移位和软件延时程序的编写。

2.熟练掌握STC型开发板的使用方法和注意事项。

3.掌握应用STC_ISP烧录过程;(二)设计要求利用51单片机及4个LED发光二极管,设计一个单片机流水灯程序,P4.7 /P4.6/ P1.6/ P1.7 来演示跑马灯。

其中流水灯的变化形式多样。

(三)实验原理STC实验箱单片机型号为IAP15W4K32S4-Student,其在线编程与在线仿真可由Keil uVision4集成开发环境和STC系列单片机在线可编程(ISP)电路实现:1.设置STC仿真器:运行STC-ISP在线编程软件,选择“keil 仿真设置”选项,如图1所示,单击“添加型号和头文件到keil中/ 添加STC仿真器驱动到keil中”,弹出“浏览文件夹”对话框,在浏览文件夹中选择keil的安装目录,单击“确定”按钮即完成添加。

根据所用芯片,单击“将IAP15W4K32S4-Student设置为仿真芯片”。

图12.Keil uVision4环境设置:选择菜单命令Project →Options for Target →Debug,选中“STC Monitor-51 Driver”,勾选“Load Application at Startup”选项和“Run to main()”选项,如图2所示。

单击图2右上角的“settings”按钮,弹出硬件参数设置对话框,如图2所示,根据仿真电路所使用的串口号(本机所用为串口5)选择串口端口,如图3所示:图2图33.STC15单击串口TTL电平通信模块结构如图4所示,P1.6、P1.7、P4.6、P4.7所连接的LED灯为共阳极LED,控制对应I/O口为低电平即可点亮LED。

单片机《输入输出口》实验报告

单片机《输入输出口》实验报告

实验一I/O口输入输出实验一、实验目的1. 掌握单片机的并行I/O口的接口结构、驱动能力特点和应用处理方法;2. 掌握单片机I/O引脚作为输出引脚的使用方法;3. 掌握单片机I/O口配置方法4. 掌握利用单片机I/O口设计单片机应用程序用输入控制输出的方法;5. 掌握单片机控制程序的结构。

二、实验原理及实验内容实验要求:利用单片机并行口做不规则花样流水灯,流水花样不低于16个。

实验原理:1.LED原理图2.STC15的IO口原理P6m0为0时,P6m1为0时,IO口模式为准双向口(传统8051 I/O口模式,弱上拉)灌电流可达20mA,拉电流为270微安,由于制造误差,实际为270~150微安* P6m0为0时,P6m1为1时,为推挽输出(强上拉输出,可达20mA,要加限流电阻)* P6m0为1时,P6m1为0时,(为高阻输出电流既不能流入也不能流出)P6m0为1时,P6m1为1时,为开漏(Open Drain),内部上拉电阻断开。

开漏模式即可读取外部状态也可以对外输出(高低电平)。

按照表格寄存器内容,我们对8个LED1,也就是P6口进行配置,当P6输出低电平时LED被点亮。

所以配置如下:P6M1 &= 0x00;P6M0 &= 0x00; //作为普通IO口,为弱上拉sbit KEY1=P2^0;sbit KEY2=P2^1;//定义两个按键由于STC15F2K60S2寄存器初始化时默认是:P6M1=0x00;P6M0 = 0x00;3.程序流程图主循环程序流程图三、实验程序#include <STC15.h>#include <intrins.h>#define Uchar unsigned char#define Uint unsigned intint LED[]={0xfc,0xf3,0xcf,0x3f,0xe7,0xdb,0xbd,0x7e,0x7e,0xbd,0xdb,0xe7, 0xfe,0xfb,0xef,0xbf,0xfd,0xf7,0xdf,0x7f};void P6Init()//IO口初始化函数{P6M0=0X00;P6M1=0X00;}void delay3s(void) //误差0us{unsigned char a,b,c;for(c=189;c>0;c--)for(b=230;b>0;b--)for(a=33;a>0;a--);}void main(){Uchar i=0;P0Init();while(1){for(i=0;i<20;i++){P6=LED[i];delay3s();}}}四、实验仪器和设备4.使用了keil软件Proteus 8 Professional软件。

单片机实验IO口的输入输出实验

单片机实验IO口的输入输出实验

单片机实验IO口的输入输出实验单片机实验是一种很好的学习方式,通过对单片机的实验可以快速地提高对单片机的了解,这对于工程师来说是非常有用的。

本文将主要介绍单片机实验中的IO口的输入输出实验。

IO口是单片机上一个非常重要的部分,在单片机实验中,IO口的输入输出是一个非常常见的实验。

IO口可以接收和发送电信号,它可以连接到开关、LED灯、继电器等,可以实现很多功能。

当我们需要将一个信号输入到单片机中时,我们需要使用IO口的输入功能。

当我们需要从单片机中输出一个信号时,我们需要使用IO口的输出功能。

在单片机实验中,我们需要测试IO口的输入功能是否正常。

测试IO口的输入功能有很多方法,其中一个方法是使用开关。

我们需要将一个开关连接到单片机的某个IO口上,当开关打开时,单片机能够获取到一个高电平信号,当开关关闭时,单片机能够获取到一个低电平信号。

通过这种方法我们可以测试单片机的IO口的输入功能是否正常。

我们可以通过编写一个程序,来判断单片机是否正常地读取到开关状态。

下面是一个范例程序:上面的程序中,我们通过判断P2口的高低电平状态,来控制P0口的输出状态。

当P2口接到高电平时,P0口的输出引脚变为高电平,LED灯就会亮。

当P2口接到低电平时,P0口的输出引脚变为低电平,LED灯就会灭。

与IO口的输入实验类似,我们也可以测试IO口的输出功能。

我们可以将一个LED灯连接到单片机的某个IO口上,当我们需要将信号输出时,单片机会控制IO口的输出引脚,从而控制LED灯的亮灭。

下面是一个范例程序:四、总结IO口的输入输出实验是单片机实验中非常常见的实验。

通过这个实验,我们能够测试单片机的IO口的输入输出功能是否正常。

在实际工作中,我们也经常需要控制开关、LED 灯、继电器等,这时候就需要使用IO口来实现控制。

因此,对于工程师来说,掌握IO口的输入输出实验是非常重要的。

51单片机实验报告

51单片机实验报告

开放性实验报告智能实验室姓名:***学号: ********班级:***专业:***********指导老师:****目录实验一IO口的输出应用 (3)一.实验目的 (3)二.实验内容 (3)三.实验器材 (3)四.实验步骤 (3)五.实验结果 (3)六.实验结果分析 (4)程序附录: (4)实验二用STM32驱动小车 (5)一.实验目的 (5)二.实验内容 (5)三.实验器材 (5)四.实验步骤 (5)五.实验结果 (5)六.实验结果分析 (6)程序附录 (6)实验三STM32循迹小车 (7)一.实验目的 (7)二.实验内容 (7)三.实验器材 (7)四.实验步骤 (7)五.实验结果 (7)六.实验结果分析 (8)程序附录: (8)实验四 STM32循迹小车加蜂鸣器 (12)一.实验目的 (12)二.实验内容 (12)三.实验器材 (12)四.实验步骤 (12)五.实验结果 (12)六.实验结果分析 (13)程序附录 (13)实验五 OLED显示 (16)一.实验目的 (16)二.实验内容 (16)三.实验器材 (16)四.实验步骤 (16)五.实验结果 (16)六.实验结果分析 (17)程序附录 (17)总结 (28)实验一IO口的输出应用一.实验目的通过此次实验学习普通IO口作为输出口的应用。

二.实验内容我们通过普通IO口驱动一个LED灯闪烁。

三.实验器材STM32FI03C8T6单片机、LED灯或实验箱。

四.实验步骤1.在MDK开发环境下建立一个工程。

2.程序的编写。

3.程序下载调试五.实验结果本实验的焊接结果如图1所示。

图1 IO口输出实物图六.实验结果分析现象:给单片机供电,LED灯闪烁;原因:LED灯通电,电路连接正确,LED灯一端连接电源,一端连接PC13,P1C13电平由高电平变为低电平,灯亮;反之,灯灭。

程序附录:#include "stm32f10x.h"#include "led.h"#include "delay.h"int main(void){delay_init();LED_Init();while(1){GPIO_SetBits(GPIOC,GPIO_Pin_13);delay_ms(500);GPIO_ResetBits(GPIOC,GPIO_Pin_13);delay_ms(1000);}}实验二用STM32驱动小车一.实验目的通过此次实验熟练掌握STM32的使用二.实验内容通过STM32、驱动模块实现小车直行三.实验器材STM32FI03C8T6单片机、LM298N小车、电池。

实验二单片机IO口的使用

实验二单片机IO口的使用

实验二单片机IO口的使用实验目的:掌握单片机IO口的使用方法,了解IO口的输入输出功能。

一、实验介绍在单片机系统中,IO口是通过端口来实现与外部设备的通信。

IO口可以用来输入控制信号或者输出数据信号,是单片机与外部世界交互的重要接口。

二、实验器材与工具1.单片机开发板2.扁平灯泡3.蜂鸣器4.电阻、电容等元器件5.逻辑分析仪三、实验步骤1.简单的IO口输出实验将一个扁平灯泡连接到单片机的一个IO口上,并将该IO口配置为输出模式。

实验中,可以通过控制该IO口的高低电平来控制灯泡的亮灭。

2.IO口输入实验将一个开关连接到单片机的一个IO口上,并将该IO口配置为输入模式。

实验中,可以读取该IO口的电平状态,来判断开关的状态。

3.组合实验将多个扁平灯泡和开关连接到单片机的IO口上,并通过控制和读取IO口的电平状态来实现各种功能。

可以实现灯泡的闪烁、扁平灯泡的亮度调节、蜂鸣器的控制等功能。

四、实验原理1.IO口模式设置单片机内部有寄存器用于控制IO口的工作模式。

通过设置相应的寄存器来将指定的IO口配置为输入或者输出模式。

2.IO口输出控制IO口的输出控制是通过操作相应的寄存器来实现的。

输出操作可以将指定的IO口设置为高电平或者低电平。

3.IO口输入读取IO口的输入读取也是通过操作相应的寄存器来实现的。

读取操作可以获取指定IO口的电平状态,以判断外部设备的状态。

五、实验总结通过这次实验,我学会了单片机IO口的配置与使用方法。

IO口是单片机与外部设备交互的重要接口,掌握了IO口的使用方法后,可以实现各种功能,如灯光控制、开关检测等。

同时,我也了解到了IO口的原理和应用场景,为以后的电子设计打下了基础。

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

单片机实验-IO口的输入输出实验
实验二 I/O 口输入、输出实验
一、实验目的
1. 学习I/O 口的使用方法。

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

二、参考程序框图
开延时
设置初始数据输左移开始 读入P1口置计数P1口置1 将读入的值P1=0
Y
N
输入值右移Cy=0
N 计数Y 以计数值段码输出
三、程序设计
1、P0口循环点亮程序
ORG 0030H
START : MOV P2,#00H; //消影
MOV A ,#01H; //
LOOP : MOV P2 ,A; //点亮一个led灯ACALL DELAY; //延时500ms
RL A; //左移一位
AJMP LOOP; //跳转循环DELAY : MOV R7,#10; //延时程序
DE1 : MOV R6,#200;
DE2 : MOV R5,#123;
DJNZ R5,$;
DJNZ R6,DE2;
DJNZ R7,DE1;
RET
END
2、I/O口输入输出(方法一)
ORG 0000H;
START : MOV P2,#00H; //初始化
MOV P0,#00H;
MOV P1,#0FFH; //p1口初始化给ffh值
MOV DPTR,#TABLE; //表地址存入DPTR
MOV 50H,#0FEH; //比较初值载入地址50h
L0 :MOV A,P1; //按键消抖
CJNE A,#0FFH,L1;
AJMP L0;
L1 :MOV A,P1;
CJNE A,#0FFH,LL1;
AJMP L0;
LL1 :CJNE A,50H,LL2; //是否与地址50h 中数据相等
MOV P0,A; //相等输出对应led灯
MOV A,#00H;
MOVC A,@A+DPTR;
MOV P2,A; //输出表格数据到数码管
LCALL DELAY; //延时
LJMP START; //返回程序开头LL2 :XCH A,50H; //交换数据
RL A; //左移
XCH A,50H; //再次交换,此时地址50h中数据左移一位
INC DPTR; //表格数据地址加一
LJMP LL1; //返回继续比较
DELAY : MOV R7,#01H; //延时程序
DE1 : MOV R6,#28H;
DE2 : MOV R5,#5AH;
DJNZ R5,$;
DJNZ R6,DE2;
DJNZ R7,DE1;
RET
TABLE : ;//DB 0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H;
DB
06H,5BH,4FH,66H,6DH,7DH,07H,7FH;
//表格数据
END
程序二(方法二)
ORG 0000H
MOV P2,#00H; //I./O口初始化
MOV P1,#0FFH; //P1口赋FFH初值
MOV P0,#00H;
START : MOV P2,#00H; //P2清0;
MOV P0,#00H; //P0清0;
MOV R1 ,P1;
MOV A,R1; //读P1口
CJNE A,#0FFH,L1; //是否有数据输入
AJMP START; //无输入则跳转,继续查询
LCALL DELAY;
L1 : MOV R1,P1; //消除按键抖动
MOV A,R1;
CJNE A, #0FFH,LL1;
AJMP START;
LL1 : CJNE A,#0FEH,LL2; //是否按键1输入
MOV P2,#06H; //是则P2输出相应的按键号码
CPL A; //A取反
MOV P0,A; //输出到P0口
LCALL DELAY; //延迟
AJMP LP; //跳转到LP LL2 : CJNE A,#0FDH,LL3; //是否按键2
输入
MOV P2,#5BH; //以下同上
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL3 : CJNE A,#0FBH,LL4; //判断按键3是否按下
MOV P2,#4FH;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL4 : CJNE A,#0F7H,LL5; //判断按键4是否按下
MOV P2,#66H;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL5 : CJNE A,#0EFH,LL6; //判断按键5是否按下
MOV P2,#6DH;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL6 : CJNE A,#0DFH,LL7; //判断按键6是否按下
MOV P2,#7DH;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL7 : CJNE A,#0BFH,LL8; //判断按键7是否按下
MOV P2,#07H;
CPL A;
MOV P0,A;
LCALL DELAY;
AJMP LP;
LL8 : CJNE A,#7FH,LP; //判断按键8是否按下
MOV P2,#7FH;
CPL A;
MOV P0,A;
LCALL DELAY;
LP : AJMP START; //跳转回程序开头
DELAY : MOV R7,#01H; //延时程序
DE1 : MOV R6,#28H;
DE2 : MOV R5,#5AH;
DJNZ R5,$;
DJNZ R6,DE2;
DJNZ R7,DE1;
RET
END
四、思考题
1、LED循环方向更改:RL A; 改成RR A;
1S的延时程序: DELAY : MOV R7,#20; //延时程序
DE1 : MOV R6,#200;
DE2 : MOV
R5,#123;
DJNZ
R5,$;
DJNZ
R6,DE2;
DJNZ
R7,DE1;
RET
2、提高电阻阻值
3、一般为5V或者3.3V。

单片机上电时I/O口出于高电平,则I/O口的输出电压要经过PNP三极管放大,再对继电器控制。

相关文档
最新文档