单片机IO口应用实验代码

合集下载

单片机流水灯实验报告

单片机流水灯实验报告

单片机流水灯实验报告1. 实验目的本实验旨在通过使用单片机控制LED灯的亮灭来实现流水灯效果,以加深对单片机控制原理的理解,并培养学生动手实践的能力。

2. 实验器材•单片机开发板•面包板•LED灯•连接线•电源3. 实验原理流水灯是一种常见的LED灯效果,通过控制多个LED灯的亮灭顺序和速度,形成流动的效果。

在本实验中,我们使用单片机通过改变IO口的输出电平来控制LED灯的亮灭。

4. 实验步骤第一步:准备工作•将单片机开发板连接到电脑上,并确保单片机开发环境已经正确安装。

•将面包板连接到单片机开发板上的IO口。

•将LED灯连接到面包板上,确保连接正确。

第二步:编写程序在单片机开发环境中,编写下列代码:#include <reg52.h>sbit LED1=P1^0;sbit LED2=P1^1;sbit LED3=P1^2;sbit LED4=P1^3;void delay(int t) {int i, j;for(i=t;i>0;i--) {for(j=110;j>0;j--);}}void main() {while(1) {LED1=0;delay(1000);LED1=1;delay(1000);LED2=0;delay(1000);LED2=1;delay(1000);LED3=0;delay(1000);LED3=1;delay(1000);LED4=0;delay(1000);LED4=1;delay(1000);}}第三步:烧录程序将编写好的程序烧录到单片机开发板上,确保烧录成功。

第四步:实验测试•将单片机开发板连接到电源上,并打开开关。

•观察LED灯的亮灭情况,是否能够形成流水灯效果。

•如果效果与预期一致,则说明实验成功。

5. 实验结果分析经过实验测试,LED灯能够按照程序中设定的流水灯顺序亮灭,形成了流水灯效果。

说明通过单片机控制IO口输出电平能够实现对LED灯的控制,并且通过改变控制程序中的延时时间可以调整流水灯的速度。

单片机io口实验[单片机IO口控制实验实验报告]

单片机io口实验[单片机IO口控制实验实验报告]

单片机io口实验[单片机IO口控制实验实验报告]一、实验目的1、熟悉MCS-51的I/O结构;2、掌握MCS-51I/O的使用方法;3、掌握MCS-51的中断机制。

二、实验原理1、MCS-51单片机的硬件结构片内结构:2、内部数据存储器:3、SFR的名称及其分布:4、I/O端口地址:5、P0P3端口功能总结:P0P3口都是并行I/O口,但P0口和P2口,还可用来构建系统的数据总线和地址总线,所以在电路中有一个MU某以进行转换。

而P1口和P3口无构建系统的数据总线和地址总线的功能,因此,无MU某P0口的MU某的一个输入端为“地址/数据〞信号。

P2口的MU某勺一个输入信号为“地址〞信号。

在4个口中只有P0口是一个真正的双向口,P1P3口都是准双向口。

原因:P0口作数据总线使用时,需解决芯片内外的隔离问题,即只有在数据传送时芯片内外才接通;不进行数据传送时,芯片内外应处于隔离状态。

为此。

P0口的输出缓冲器应为三态门。

P0口中输出三态门是两只场效应管组成,所以是一个真正的双向口。

P1P3口,上拉电阻代替P0口中的场效应管,输出缓冲器不是三态的一准双向口。

P3口的口线具有第二功能,为系统提供一些控制信号。

因此P3口增加了第二功能控制逻辑。

这是P3口与其它各口的不同之处。

6、P0口结构及特点:⑴P0口结构与运作1个输出锁存器,用于进行输出数据的锁存;2个三态输入缓冲器,分别用于锁存器和引脚数据的输入缓冲;1个多路开关MU某它的一个输入来自锁存器,另一个输入是地址/数据信号的反相输出。

在控制信号的的控制下能实现对锁存器输出端和地址/数据线之间的切换;两只场效应管组成的输出驱动电路。

⑵P0口的特点P0口是一个双功能的端口:地址/数据分时复用口和通用I/O口;具有高电平、低电平和高阻抗3种状态的I/O端口称为双向I/O端口。

P0口作地址/数据总线复用口时,相当于一个真正的双向I/O口。

而用作通用I/O口时,于引脚上需要外接上拉电阻,端口不存在高阻状态,此时P0口只是一个准双向口;为保证引脚上的信号能正确读入,在读入操作前应首先向锁存器写1;单片机复位后,锁存器自动被置1;一般情况下,如果P0口已作为地址/数据复用口时,就不能再用作通用I/O口使用;P0口能驱动8个TTL负载。

STC51单片机IO口模式快速设置

STC51单片机IO口模式快速设置

S T C51单片机I O口模式快速设置-CAL-FENGHAI-(2020YEAR-YICAI)_JINGBIANSTC51单片机IO口模式的快速设置新型51单片机STC系列,较传统51单片机在性能和速度上有根本性的提高。

速度提高8—12倍;片上RAM大量增加;片上外围模块大量增加,等等。

其中IO口的模式增加为4种(传统51只有1中),以P0口为例:这里,每个端口新增两个寄存器PxM0, PxM1(x=0,1,2,3)。

在设置每一个IO端的模式时都需要对这两个寄存器进行操作。

比如:要将设为推挽输出,设为准双向口,设为高阻输入;设为开路模式,都设为准双向口,那么需要如下的代码:IO_Init(){P0M0=0x30;//0011 0000P0M1=0x90;//1001 0000}这样的设置不便于记忆,很容易写错,且写好的代码可读性差,为此,我们可以通过一个宏定义来解决,具体如下:#define PORT0 0#define PORT1 1#define PORT2 2#define PORT3 3#define BIT0 0#define BIT1 1#define BIT2 2#define BIT3 3#define BIT4 4#define BIT5 5#define BIT6 6#define BIT7 7#define STANDARD 0#define PP_OUT 1#define Z_IN 2#define OD 3#define IOMODE(Port,bit_n,mode) { \switch(Port)\{\case 0:\switch(mode) { \case STANDARD: P0M0&=~(1<<bit_n); P0M1&=~(1<<bit_n); break; \case PP_OUT: P0M0&=~(1<<bit_n); P0M1|= (1<<bit_n); break; \case Z_IN: P0M0|=(1<<bit_n); P0M1&=~(1<<bit_n); break; \case OD: P0M0|=(1<<bit_n); P0M1|=(1<<bit_n); break; \} \break;\case 1:\switch(mode) { \case STANDARD: P1M0&=~(1<<bit_n); P1M1&=~(1<<bit_n); break; \case PP_OUT: P1M0&=~(1<<bit_n); P1M1|= (1<<bit_n); break; \case Z_IN: P1M0|=(1<<bit_n); P1M1&=~(1<<bit_n); break; \case OD: P1M0|=(1<<bit_n); P1M1|=(1<<bit_n); break; \} \break;\case 2:\switch(mode) { \case STANDARD: P2M0&=~(1<<bit_n); P2M1&=~(1<<bit_n); break; \case PP_OUT: P2M0&=~(1<<bit_n); P2M1|= (1<<bit_n); break; \case Z_IN: P2M0|=(1<<bit_n); P2M1&=~(1<<bit_n); break; \case OD: P2M0|=(1<<bit_n); P2M1|=(1<<bit_n); break; \} \break;\case 3:\switch(mode) { \case STANDARD: P3M0&=~(1<<bit_n); P3M1&=~(1<<bit_n); break; \case PP_OUT: P3M0&=~(1<<bit_n); P3M1|= (1<<bit_n); break; \case Z_IN: P3M0|=(1<<bit_n); P3M1&=~(1<<bit_n); break; \case OD: P3M0|=(1<<bit_n); P3M1|=(1<<bit_n); break; \} \break;\}\}有了上面的宏定义,在初始化程序中可以直接这样写IO_Init(){IOMODE(PORT0,BIT7,PP_OUT)IOMODE(PORT0,BIT6, STANDARD)IOMODE(PORT0,BIT5, Z_IN)IOMODE(PORT0,BIT4, OD)IOMODE(PORT0,BIT3, STANDARD)IOMODE(PORT0,BIT2, STANDARD)IOMODE(PORT0,BIT1, STANDARD)IOMODE(PORT0,BIT0, STANDARD)}。

单片机实验单片机并行IO口的应用实验

单片机实验单片机并行IO口的应用实验
LOOP1:MOVR6,#0ABH
LOOP2:MOVR5,#10H
DJNZR5,$;"$"当前的PC值。R5的内容减1不为零
DJNZR6,LOOP2
DJNZR7,LOOP1
RET
END
四、实验报告要求
1、实验目的和要求。
2、设计要求。
3、实验程序流程框图和程序清单。
4、电路原理图。
5、实验结果
6、实验总结。
7、思考题。
五、思考题
1、编程实现LED0至LED7以十六进制计数规律亮灯
原理图:
程序清单:
/*(1)LED0~LED7以秒速率循环右移
蜂鸣器逐位报警*/
ORG0000H
MAIN:MOVA,#B;赋初值
DJNZR6,LOOP2
DJNZR7,LOOP1
RET
END
/*(2)LED0~LED7以十六进制计数规律亮灯*/
ORG0000H
MOVA,#0FFH
LOOP:MOVP1,A
LCALLDELAY
DECA
CJNEA,#0FFH,LOOP
MOVA,#0FFH
LJMPLOOP
DELAY:MOVR7,#0A7H
2、利用单片机并行I/O口控制蜂鸣器。
三、设计要求
1、用Prห้องสมุดไป่ตู้teus软件画出电路原理图。要求在至口
线上分别接LED0至LED7八个发光二极管,在口线上
接一蜂鸣器。
2、编写程序:要求LED0至LED7以秒速率循环右移。
3、编写程序:要求LED0至LED7以秒速率循环左移。
4、编写程序:要求在灯移动的同时,蜂鸣器逐位报警。
LOOP:MOVP1,A;赋值给P1口

单片机IO口控制实验

单片机IO口控制实验

单片机IO口控制实验单片机IO口控制实验是一项基础的实验课程,它涉及到单片机的硬件接口和软件编程,是学习单片机的重要环节之一。

本文将详细介绍单片机IO口控制实验的环境搭建、实验步骤和实验结果等方面。

环境搭建1. 单片机开发板:如STC89C52,AT89C52等。

2. 软件集成开发环境:如Keil,IAR等。

3. 通信工具:USB转串口转换器,串口线等。

4. 其他相关组件:电阻、LED灯、导线等。

实验步骤1. 准备工作将单片机开发板进行电源供应,检查是否正常。

在电脑上安装Keil和STC-ISP等软件工具,安装好后打开Keil,新建一个工程。

3. 写入程序进入Keil中,选择打开工程,新建一个文件,并编写程序。

下面是一个简单的程序示例:#include <reg52.h>void delay(int i) //延时函数{while(i--);}4. 烧录程序在编写好程序后,选择编译,生成一个HEX文件。

将单片机开发板接入电脑,选择工具,打开STC-ISP软件。

选择好COM口和需要烧录的HEX文件,连接单片机开发板和电脑,点击下载。

等待下载成功后,即可将程序烧录到单片机中。

5. 实验验证实验时,可以将LED灯和几个外设连接到单片机的IO口,通过程序控制IO口的电平,达到控制LED灯、外设等的效果。

实验结果实验成功后,可以通过单片机控制LED灯的亮灭、外设的工作状态等,验证程序的正确性。

此外,实验成功还可以提高学生的动手实践能力和编程能力,为后续单片机应用开发打下基础。

结论单片机IO口控制实验是单片机学习中的重要实践环节。

通过实验,可以让学生了解单片机的硬件接口和软件编程,提高学生的实践能力和编程能力,培养学生独立思考和解决问题的能力。

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

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

单片机原理及应用实验二报告实验二:单片机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口实验报告

实验一以下所有KEIL工程、程序均命名为自己姓名的拼音一、实验目的:熟悉KEIL软件的开发,掌握程序下载流程二、实验环境:1.硬件:PC微机、单片机开发板2.软件:KEIL三、实验步骤:1.在KEIL中新建工程文件,在工程文件下新建C文件“姓名首字母.c”并加入到工程中(注意C语言编程时,工程中要保留STARTUP.A51汇编文件)。

2.编写程序,初始化内部数据寄存器0x40开始的100个地址单元,写入0x55,然后复制到0x60开始的存储器中,使用软件仿真的方式调试程序,观察程序模拟运行的结果:#include "reg52.h"unsigned char *p,*q;unsigned char i;int main(){p=0x40;for(i=0;i<10;i++){*p=0x55;p++;}for(i=0;i<10;i++){*p=*q;q++;p++;while(1);}}调试时,在调试界面中依次找到a) 变量观察窗口b) 存储器窗口c) 单步运行d) 全速运行程序运行结果(存储器窗口截图):3.编写程序,控制实验板上的LED灯:D1-D3点亮,D4-D7熄灭,D8点亮#include”reg52.h”sbit P1_4=P1^4;int main(){P1_4=0;P0=0x1E;While(1);}4.编写C语言程序,实现LED灯循环点亮#include "reg52.h"void delay (unsigned z){while(z--);}int main(){unsigned char i;P1&=~(0x01<<4);P0=0xff;i=0x01;while (1){P0=~i;i=i<<1;if(i==0x0)i=0x01;delay(10000);}}四、实验总结。

单片机常用c代码

单片机常用c代码

单片机常用c代码在单片机领域,C语言是最常用的编程语言之一。

它具有简单易学、灵活高效的特点,被广泛应用于单片机系统的开发中。

本文将介绍一些常用的单片机C代码,为读者提供参考和学习的资源。

一、IO口控制单片机的IO口是与外部设备连接的重要接口,通过控制IO口的高低电平来实现与外部设备的通信。

以下是常见的IO口控制代码示例:1. 设置IO口为输出模式:```c#define LED_PIN 0 // 指定IO口引脚号void setup() {pinMode(LED_PIN, OUTPUT); // 设置IO口为输出模式}void loop() {digitalWrite(LED_PIN, HIGH); // 设置IO口为高电平delay(1000); // 延迟1秒digitalWrite(LED_PIN, LOW); // 设置IO口为低电平delay(1000); // 延迟1秒```2. 设置IO口为输入模式:```c#define BUTTON_PIN 1 // 指定IO口引脚号void setup() {pinMode(BUTTON_PIN, INPUT); // 设置IO口为输入模式}void loop() {if (digitalRead(BUTTON_PIN) == HIGH) { // 判断IO口电平是否为高电平// 执行相应操作}}```二、定时器控制定时器是单片机中的重要组件,可用于实现精确的时间控制和周期性任务。

以下是常见的定时器控制代码示例:1. 设置定时器计数器和预分频值:void setup() {TCCR1B = (1 << CS12) | (1 << CS10); // 设置定时器1的预分频为1024}void loop() {// 执行相应操作}```2. 设置定时器中断服务程序:```cISR(TIMER1_COMPA_vect) {// 定时器1比较匹配中断服务程序}void setup() {TCCR1B = (1 << WGM12) | (1 << CS12) | (1 << CS10); // 设置定时器1的CTC模式和预分频为1024OCR1A = 15624; // 设置定时器1的比较匹配值,实现1秒中断一次TIMSK1 = (1 << OCIE1A); // 允许定时器1比较匹配中断}void loop() {// 执行相应操作}```三、串口通信串口通信是单片机与计算机或其他外部设备进行数据交互的常用方式。

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 小灯闪烁视频
(灯亮时的图片)。

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点亮,可以实现灯的左右移。

单片机IO口应用及键盘实验4-1

单片机IO口应用及键盘实验4-1
由程序和电路直接相应(预先设定功能,采用相应指令)
其他:
通道0作为I/O输出时,需要上拉电阻。驱动 MOS电路时,阻值为4.7K欧姆,驱动LED 显示器时为470欧姆;
通道0作为数据/地址线工作时,不需要上拉 电阻;
并口输出应用举例
VCC
R
VCC 220
2k Px.x
OUT LED
继电器
2 键盘扩展原理
消除键抖:JNB P口,分支
延迟程序
JB
P口,分支
按下一次键,在很短时间内弹起,算一次键抖
K3,K4处理程序结构
按键按下 消抖
寄存器加一/减一
寄存器判断
没有达到要求, 寄存器值赋值给A
达到要求, 寄存器值修改, 再把值送入A
查表显示
逻辑分析
先制一张表,表里面放入要显示的数值0~9共 十个数,表中数值地址也为0~9
KeyDown: CLR UpDown ;第四个键按下后的处理 KEY_RET: RET
采用中断方式 ?如何编程?
3 键盘实验(独立键盘)
键盘硬件连接如图 实验要求: 编写程序实现: 1)按K1,数码管显示0;按K2,数码管显示9 2)按K3,数码管当前数值加一 按K3,数码管当前数值减一
键盘的按键有触点式和非触点式 ; 按键开关的抖动问题 数字、功能、命令 键号、键值 重键
图2
键盘
键盘的类型: 独立式 行列式(或矩阵式) 键盘的工作方式 编程扫描(查询法) 定时扫描 中断
键盘和单片机的连接
和I/O相连:将每个按键的一端接到单片机的I/O口,另 一端接地,如图3所示是实验板上按键的接法,四个 按键分别接到P3.0 、P3.1、P3.2和P3.3
单片机I/O口应用及键盘实验

单片机数字io的使用的例程

单片机数字io的使用的例程

以下是一个简单的单片机数字I/O使用的例程,以Arduino为例:
c
// 定义LED引脚为数字引脚13
#define LED_PIN 13
void setup() {
// 初始化数字引脚为输出模式
pinMode(LED_PIN, OUTPUT);
}
void loop() {
// 循环让LED灯闪烁
digitalWrite(LED_PIN, HIGH); // 点亮LED灯
delay(1000); // 等待1秒钟
digitalWrite(LED_PIN, LOW); // 熄灭LED灯
delay(1000); // 等待1秒钟
}
在这个例程中,我们首先定义了一个LED_PIN常量,表示要使用的数字引脚号。

然后在setup()函数中,使用pinMode()函数将该引脚初始化为输出模式。

在loop()函数中,使用digitalWrite()函数控制LED灯的亮灭,并使用delay()函数控制亮灭的时间间隔。

这样就可以实现一个简单的LED闪烁程序。

需要注意的是,具体的数字I/O使用方式会根据所使用的单片机型号和编程语言有所不同,因此需要根据实际情况进行调整。

单片机实验报告二 单片机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。

单片机实验报告IO口控制

单片机实验报告IO口控制

单片机实验报告实验名称:I/O口控制实验姓名:学号:班级:实验时间:一、实验目的1、Keil C51软件的介绍,Proteus软件的应用,及结合使用。

2、学习I/O的使用;3、学习延时子程序的编写和使用;4、掌握单片机编程器使用和芯片烧写方法。

二、实验原理1.灯闪烁实验(1)在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。

(2)系统板上硬件连线:把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。

灯闪烁实验电路原理图(3)程序设计流程2.广告流水灯实验(1)做单一灯的左移右移,八个发光二极管L1~L8分别接在单片机的P1.0~P1.7接口上,输出“0”的时候,发光二极管亮,开始时P1.0->P1.1->P1.2->P1.3->...->P1.7->P1.6->...P1.0亮,重复循环。

(2)系统板上硬件连线:把“单片机系统”A2区的J61接口的P1.0~P1.6端口与D1区的J52接口相连。

要求:P1.0对应着L1,P1.1对应L2,……,P1.7对应着L8。

P1口广告流水灯实验电路原理图(3)程序设计流程:流程图如下3.模拟开关实验(1)监视开关K1(接在P3.0端口上),用发光二极管L1(接在单片机P1.0端口上)显示开关状态,如果开关合上,L1亮,开关打开,L1熄火。

(2)系统板上硬件连线:把“单片机系统”A2区的P1.0端口用导线连接到D1区的LED1端口上;把“单片机系统”A2区的P3.0端口用导线连接到D1区的KEY1端口上;模拟开关实验原理图(3)程序设计流程三、实验内容1 灯闪烁利用单片机的I/O引脚控制一发光二极管,实现闪烁效果。

(1)c语言代码#include<reg51.h>sbit P10=P1^0;void delay(){long int i;for(i=0;i<7550;i++);}void main(){while(1){P10=1;delay();P10=0;delay();}}(2)系统板上硬件连线(3)时间控制2 广告流水灯利用单片机的任一组I/O引脚控制八个发光二极管,实现广告流水灯效果(1)c语言代码#include<reg51.h>void time(){long int i;for(i=0;i<=38000;i++);}void delay(unsigned char tmp){unsigned char j;while(tmp--){j=255;while(j--);}}code unsigned char tmpled[8]={0Xfe,0Xfd,0Xfb,0Xf7,0xef,0xdf,0xbf,0x7f}; code unsigned char smpled[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; void main(void){unsigned char i;while(1){for(i=0;i<8;i++){P1=tmpled[i];delay(100);}P1=0xff;time();for(i=0;i<8;i++){P1=smpled[i];delay(100);}P1=0xff;time();}}(2)系统硬件电路(3)时间控制3 模拟开关读取单片机的I/O引脚状态来控制发光二极管,引脚状态由外部开关控制。

单片机io口控制led实验报告

单片机io口控制led实验报告

单片机io口控制led实验报告
一、实验背景
单片机是一种集成电路,它可以通过编程来控制各种电子设备。

在这个实验中,我们将学习如何使用单片机的IO口来控制LED灯。

二、实验材料
1. STC89C52RC单片机开发板
2. LED灯
3. 220欧姆电阻
4. 杜邦线
三、实验原理
单片机的IO口可以用来控制数字信号。

当IO口输出高电平时,LED 灯就会亮起来;当IO口输出低电平时,LED灯就会熄灭。

为了保护单片机和LED灯,我们需要使用一个220欧姆的电阻。

这个电阻可以限制电流流过LED灯和单片机之间的连接。

四、实验步骤
1. 将一个杜邦线连接到单片机的P
2.0引脚。

2. 将另一个杜邦线连接到单片机的GND引脚。

3. 将一个220欧姆的电阻连接到P2.0引脚和LED正极之间。

4. 将另一个杜邦线连接到LED负极。

5. 将另一个220欧姆的电阻连接到LED负极和单片机的GND引脚之间。

五、实验结果
当单片机的P2.0引脚输出高电平时,LED灯会亮起来;当P2.0引脚输出低电平时,LED灯会熄灭。

六、实验总结
这个实验展示了如何使用单片机的IO口来控制数字信号。

我们还学习了如何使用电阻来保护单片机和LED灯。

在实际应用中,我们可以使用单片机的IO口来控制各种设备,例如电机、传感器等。

这个实验是学习单片机编程的基础,对于想要深入学习嵌入式系统开发的人来说是非常重要的。

关于单片机的一些小实验_04利用IO口线模拟同步串口驱动74HC595控制八个LED灯花样显示

关于单片机的一些小实验_04利用IO口线模拟同步串口驱动74HC595控制八个LED灯花样显示
/********************************************************************************************
*功能:利用IO口线模拟同步串口驱动74HC595控制LED1~LED8这八个LED灯进行花样流水灯显示。
*硬件条件:1.CPU型号:AT89S52
{
uint8 i;
while(--count != 0)
{
for(i = 0; i < 125; i++); // ";"表示空语句,CPU空转。
}// i从0加到125,在12M晶体下CPU大概耗时1毫秒
}
/********************************************************************************************
*函数名称:main()
*功能:利用IO口线模拟同步串口驱动74HC595控制LED1~LED8这八个LED灯进行花样流水灯显示。
*********************************************************************************************/
typedef signed char int8; //有符号8位整型变量
typedef unsigned short uint16; //无符号16位整型变量
typedef signed short int16; //有符号16位整型变量
typedef unsigned int uint32; //无符号32位整型变量
* 2.晶振:12.000MHz

51单片机50个实例代码

51单片机50个实例代码

51单片机50个例程代码程序里有中断,串口等驱动,直接复制即可使用1-IO输出-点亮1个LED灯方法1/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:点亮P1口的一个LED灯该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit LED=P1^0;// 用sbit 关键字定义LED到端口,//LED是自己任意定义且容易记忆的符号/*------------------------------------------------主函数------------------------------------------------*/void main (void){//此方法使用bit位对单个端口赋值LED=1; //将口赋值1,对外输出高电平LED=0; //将口赋值0,对外输出低电平while (1) //主循环{//主循环中添加其他需要一直工作的程序}}2-IO输出-点亮1个LED灯方法2/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:点亮P1口的一个LED灯该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义/*------------------------------------------------主函数------------------------------------------------*/void main (void){//此方法使用1个字节对单个端口赋值P1 = 0xFF; //P1口全部为高电平,对应的LED灯全灭掉,//ff换算成二进制是1111 1111P1 = 0xfe; //P1口的最低位点亮,可以更改数值是其他的灯点亮//0xfe是16进制,0x开头表示16进制数,//fe换算成二进制是1111 1110while (1) //主循环{//主循环中添加其他需要一直工作的程序}}3-IO输出-点亮多个LED灯方法1/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:点亮P1口的多个LED灯该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit LED0=P1^0;// 用sbit 关键字定义LED到端口,sbit LED1=P1^1;//LED是自己任意定义且容易记忆的符号sbit LED2=P1^2;sbit LED3=P1^3;sbit LED4=P1^4;sbit LED5=P1^5;sbit LED6=P1^6;sbit LED7=P1^7;/*------------------------------------------------主函数------------------------------------------------*/void main (void){//此方法使用bit位对单个端口赋值LED0=0; //将口赋值0,对外输出低电平LED1=1;LED2=0;LED3=1;LED4=0;LED5=1;LED6=0;LED7=1;while (1) //主循环{//主循环中添加其他需要一直工作的程序}}4-IO输出-点亮多个LED灯方法2/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:点亮P1口的多个LED灯该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义/*------------------------------------------------主函数------------------------------------------------*/void main (void){//此方法使用bit位对单个端口赋值P1=0x55; //换成二进制是0101 0101while (1) //主循环{//主循环中添加其他需要一直工作的程序}}5-闪烁1个LED/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:点亮P1口的1个LED灯闪烁该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit LED0=P1^0;// 用sbit 关键字定义LED到端口,//LED是自己任意定义且容易记忆的符号void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){//此方法使用bit位对单个端口赋值while (1) //主循环{LED0=0; //将口赋值0,对外输出低电平Delay(10000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将口赋值1,对外输出高电平Delay(10000);//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}6-不同频率闪烁1个LED灯/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:点亮P1口的1个LED灯闪烁该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit LED0=P1^0;// 用sbit 关键字定义LED到端口,//LED是自己任意定义且容易记忆的符号void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){//此方法使用bit位对单个端口赋值unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255while (1) //主循环{for(i=0;i<10;i++) //加入for循环,表明for循环大括号中的程序循环执行10次{LED0=0; //将口赋值0,对外输出低电平Delay(5000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将口赋值1,对外输出高电平Delay(5000);}for(i=0;i<10;i++){LED0=0; //将口赋值0,对外输出低电平Delay(60000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将口赋值1,对外输出高电平Delay(60000);}//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}7-不同频率闪烁多个LED灯/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:点亮P1口的多个LED灯闪烁该程序是单片机学习中最简单最基础的,通过程序了解如何控制端口的高低电平------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit LED0=P1^0;// 用sbit 关键字定义LED到端口,LED是自己任意定义且容易记忆的符号sbit LED1=P1^1;sbit LED2=P1^2;sbit LED3=P1^3;sbit LED4=P1^4;sbit LED5=P1^5;sbit LED6=P1^6;sbit LED7=P1^7;void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){//此方法使用bit位对单个端口赋值unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255while (1) //主循环{for(i=0;i<10;i++) //加入for循环,表明for循环大括号中//的程序循环执行10次{LED0=0; //将口赋值0,对外输出低电平LED2=1;LED4=0;Delay(5000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将口赋值1,对外输出高电平LED2=0;LED4=1;Delay(5000);}for(i=0;i<10;i++){LED0=0; //将口赋值0,对外输出低电平LED2=1;LED4=0;Delay(60000); //调用延时程序;更改延时数字可以更改延时长度;//用于改变闪烁频率LED0=1; //将口赋值1,对外输出高电平LED2=0;LED4=1;Delay(60000);}//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}8-8位LED左移/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:左移,直至LED全部点亮,左移符号<<------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255Delay(50000);P1=0xfe; //赋初始值for(i=0;i<8;i++) //加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1<<=1;}while (1) //主循环{//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}9-8位LED右移/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:右移,直至LED全部点亮,右移符号>>------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255Delay(50000);P1=0x7f; //赋初始值for(i=0;i<8;i++) //加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1>>=1;}while (1) //主循环{//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}10-LED循环左移/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:循环左移,始终一个led点亮,并循环执行流水动作,左移符号<< 逻辑或符号|------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255Delay(50000);P1=0xfe; //赋初始值while (1) //主循环{for(i=0;i<8;i++) //加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1<<=1;P1=P1|0x01; //左移后,最右端自动赋值0,所以需要该语句赋值1}P1=0xfe; //重新赋初始值//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}11-LED循环右移/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:循环右移,始终一个led点亮,并循环执行流水动作,右移符号>> 逻辑或符号|------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255Delay(50000);P1=0x7f; //赋初始值while (1) , //主循环{for(i=0;i<8;i++) //加入for循环,表明for循环大括号中的程序循环执行8次{Delay(50000);P1>>=1;P1=P1|0x80; //右移后,最左端自动赋值0,所以需要该语句赋值1}P1=0x7f; //重新赋初始值//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}12-查表显示LED灯/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:通过查表获得1个字节的值然后赋值给P1端口,ROM允许情况可以设置更多表格------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/*------------------------------------------------查表表格------------------------------------------------*/unsigned char code table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0x00,0x55,0x55,0xaa,0xaa};//rom允许情况可以无限添加/*------------------------------------------------函数声明------------------------------------------------*/void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255while (1) //主循环{for(i=0;i<16;i++) //加入for循环,表明for循环大括号中的程序循环//执行16次,表明表格中有16个元素{P1=table[i];Delay(30000);}//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}13-双灯左移右移闪烁/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:2个led灯先左移,然后右移,然后同时闪烁------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char i; //定义一个无符号字符型局部变量i//取值范围0~255unsigned char temp;//定义临时变量用于转换while (1) //主循环{temp=0xfc;P1=temp;for(i=0;i<7;i++) //加入for循环,表明for循环大括号//中的程序循环执行7次{Delay(50000); //调用延时程序;更改延时数字可//以更改延时长度;用于改变闪烁频率temp<<=1;temp=temp|0x01; //也可以直接把temp换成P1P1=temp; //之所以加入temp做中间变量,转换//完成后直接赋值到端口,防止直接//操作端口造成的短暂闪烁}temp=0x3f;P1=temp;for(i=0;i<7;i++) //加入for循环,表明for循环大括号//中的程序循环执行7次{Delay(50000); //调用延时程序;更改延时数字可以//更改延时长度;用于改变闪烁频率temp>>=1;temp|=0x80; //等效于temp=temp|0x80P1=temp;}for(i=0;i<3;i++) //加入for循环,表明for循环大括号//中的程序循环执行3次{P1=0xff;Delay(50000);P1=0x00;Delay(50000);} //主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}14-花样灯/*-----------------------------------------------名称:IO口高低电平控制论坛:编写:shifang日期:修改:无内容:花样灯一般有两种方法实现:1、程序循环执行2、查表法这里我们两种都使用一下------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义/*------------------------------------------------花样表格------------------------------------------------*/unsigned char code seg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0x00,0x00,0x55,0x55,0xaa,0xaa};//rom允许情况可以无限添加void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/main(){unsigned char i; //定义一个无符号字符型//局部变量i 取值范围0~255 while(1){P1=0xFE; //第1个LED亮for(i=0;i<8;i++){Delay(20000);P1 <<=1;}P1=0x7F; //第8个LED亮for(i=0;i<8;i++){Delay(20000);P1 >>=1;}P1=0xFE; //第1个LED亮for(i=0;i<8;i++){Delay(20000);P1 <<=1;P1 |=0x01;}P1=0x7F; //第8个LED亮for(i=0;i<8;i++){Delay(20000);P1 >>=1;P1 |=0x80;}//下面通过查表方法获得花样参数for(i=0;i<16;i++)//查表可以简单的显示各种花样实用性更强{Delay(20000);P1=seg[i];}}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}15-PWM调光/*-----------------------------------------------名称:PWM调光论坛:编写:shifang日期:修改:无内容:通过PWM(脉宽调制)调节LED的亮度------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit LED0=P1^0;// 用sbit 关键字定义LED到端口,LED是自己任意定义且容易记忆的符号void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值while (1) //主循环{LED0=1;Delay(60000); //特意加延时,可以看到熄灭的过程for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++){ //PWM_LOW表示低//电平时间,这个循环中低电平时长从1累加到CYCLE(周期)的值,即600次LED0=0; //点亮LEDDelay(PWM_LOW);//延时长度,600次循环中从1加至599LED0=1; //熄灭LEDDelay(CYCLE-PWM_LOW);//延时长度,600次循环中从599减至1}LED0=0;for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--){ //与逐渐变亮相反的过程LED0=0;Delay(PWM_LOW);LED0=1;Delay(CYCLE-PWM_LOW);}//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}16-共阳数码管静态显示/*-----------------------------------------------名称:单个共阳数码管静态显示论坛:编写:shifang日期:修改:无内容:通过赋值给P1,让数码管显示特定的字符或者数字------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义void main (void){P1=0xc0; //二进制为1100 0000 参考数码管排列,//可以得出0对应的段点亮,1对应的段熄灭,结果显示数字"0"while(1){}}17-1个共阳数码管显示变化数字/*-----------------------------------------------名称:单个共阳数码管动态显示变化数字论坛:编写:shifang日期:修改:无内容:通过循环赋值给P1,让数码管显示特定的字符或者数字------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义unsigned char code dofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x77,0x7c,0x39,0x5e,0x79, 0x71,};// 显示数值表0-9void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255while (1) //主循环{for(i=0;i<16;i++) //加入for循环,表明for循环大括号中的程序循环执行10次{P1=dofly_table[i]; //循环调用表中的数值Delay(60000); //延时,方便观看数字变化}//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}18-单个数码管模拟水流/*-----------------------------------------------名称:单个共阳数码管模拟水流论坛:编写:shifang日期:修改:无内容:通过循环赋值给P1,让数码管显示特定流动样式------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义void Delay(unsigned int t); //函数声明/*------------------------------------------------主函数------------------------------------------------*/void main (void){unsigned char i; //定义一个无符号字符型局部变量i 取值范围0~255while (1) //主循环{P1=0xfe;for(i=0;i<6;i++) //加入for循环,表明for循环大括号中的程序循环执行6次Delay(10000);P1<<=1;P1|=0x01;}//主循环中添加其他需要一直工作的程序}}/*------------------------------------------------延时函数,含有输入参数unsigned int t,无返回值unsigned int 是定义无符号整形变量,其值的范围是0~65535------------------------------------------------*/void Delay(unsigned int t){while(--t);}19-按键控制单个数码管显示/*-----------------------------------------------名称:单个共阳数码管动态显示变化数字论坛:编写:shifang日期:修改:无内容:通过循环检测P1口按键输入值,然后用数码管输出,没有按键按下时原值不变------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义unsigned char code dofly_table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};// 显示数值表0-9/*------------------------------------------------主函数------------------------------------------------*/void main (void){while (1) //主循环{switch(P3) //P3口作为独立按键输入端,检测端口电平并做如下判断{case 0xfe:P1=dofly_table[1];break;//0xfe = 1111 1110,//说明连接在端口的按键被按下,显示对应的数字然后跳出循环case 0xfd:P1=dofly_table[2];break;//调用表中的第三个//元素0xa4 下标0 才表示数组中的第一个元素case 0xfb:P1=dofly_table[3];break;case 0xf7:P1=dofly_table[4];break;case 0xef:P1=dofly_table[5];break;case 0xdf:P1=dofly_table[6];break;case 0xbf:P1=dofly_table[7];break;case 0x7f:P1=dofly_table[8];break;default:break; //如果都没按下,直接跳出}//主循环中添加其他需要一直工作的程序}}20-单个数码管指示逻辑电平/*-----------------------------------------------名称:单个共阳数码管指示逻辑电平论坛:编写:shifang日期:修改:无内容:通过循环检测口电平输入值,然后用数码管输出"H" or "L",表示该端口现在连接的是高电平还是低电平------------------------------------------------*/#include<> //包含头文件,一般情况不需要改动,//头文件包含特殊功能寄存器的定义sbit IO_IN=P3^2; //定义IO 信号输入端/*------------------------------------------------主函数------------------------------------------------*/void main (void){while (1) //主循环{if(IO_IN==1)//如果端口检测到1表示高电平P1=0x89; //"H"elseP1=0xc7; //"L"//否则表示低电平,这里使用条件语句if 。

实验二单片机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)。
相关文档
最新文档