51单片机应用从零开始(四)

51单片机应用从零开始(一)-CSDN博客

51单片机应用从零开始(二)-CSDN博客

51单片机应用从零开始(三)-CSDN博客

详解 KEIL C51 软件的使用·建立工程-CSDN博客

详解 KEIL C51 软件的使用·设置工程·编绎与连接程序-CSDN博客

目录

[5. 通过对 P3 口地址的操作流水点亮 8 位 LED](#5. 通过对 P3 口地址的操作流水点亮 8 位 LED)

[6. 用不同数据类型控制灯闪烁时间](#6. 用不同数据类型控制灯闪烁时间)


5. 通过对 P3 口地址的操作流水点亮 8 位 LED

前面,我们已经通过P3进行了8位流水灯的控制,现在我们通过对 P3 口地址的操作流水点亮 8 位 LED。

使用操作寄存器的方式:

(1)首先需要定义 P3 口的地址,即将 P3 口的地址存入一个寄存器中,比如说:

MOV A, #90H ; 将 P3 口的地址 90H 存入 A 寄存器中 MOV R0, A ; 将 A 寄存器中的值存入 R0 寄存器中

(2)然后需要将 P3 口配置为输出模式,这可以通过将 P3CON 寄存器的相应位设置为 1 来实现,比如说:

MOV A, #80H ; 将 P3CON 寄存器的地址 80H 存入 A 寄存器中 MOV R1, A ; 将 A 寄存器中的值存入 R1 寄存器中 MOV A, #FFH ; 将 P3 端口配置为输出模式,即将 P3CON 的第 7 位设置为 1 ANL R1, A ; 将 R1 寄存器中的值与 FFH 按位与运算,将第 7 位设置为 1 MOVX @DPTR, R1 ; 将 R1 寄存器中的值存入 P3CON 寄存器中

(3)接下来就可以对 P3 口进行操作了,比如说点亮 LED。可以通过将 8 个 LED 的状态存入一个寄存器中,再将该寄存器的值存入 P3 端口,实现点亮 8 个 LED。代码示例:

MOV A, #0FFH ; 将需要点亮的 8 个 LED 的状态存入 A 寄存器中 MOV R2, A ; 将 A 寄存器中的值存入 R2 寄存器中 MOVX @R0, R2 ; 将 R2 寄存器中的值存入 P3 端口,即点亮 8 个 LED

(4)最后可以添加延时等操作,使 LED 闪烁或者呈现其他效果,比如说:

DELAY: MOV R3, #FFH LOOP1: DJNZ R3, LOOP1 DJNZ R2, DELAY RET

使用C语言的代码示例:

复制代码
#include<reg51.h> //包含单片机寄存器的头文件
sfr x=0xb0; //P3 口在存储器中的地址是 b0H, 通过 sfr 可定义 8051 内核单
片机
 //的所有内部 8 位特殊功能寄存器,对地址 x 的操作也就是对 P1 口的
操作
/**************************************** 
函数功能:延时一段时间
*****************************************/ 
void delay(void) 
 { 
 unsigned char i,j; 
 for(i=0;i<250;i++) 
 for(j=0;j<250;j++) 
 ; //利用循环等待若干机器周期,从而延时一段时间
 } 
/***************************************** 
函数功能:主函数 
******************************************/ 
void main(void) 
{ 
 while(1) 
 { 
 x=0xfe; //第一个灯亮
 delay(); //调用延时函数
 x=0xfd; //第二个灯亮
 delay(); //调用延时函数
 x=0xfb; //第三个灯亮
 delay(); //调用延时函数
 x=0xf7; //第四个灯亮
 delay(); //调用延时函数
 x=0xef; //第五个灯亮
 delay(); //调用延时函数
 x=0xdf; //第六个灯亮
 delay(); //调用延时函数
 x=0xbf; //第七个灯亮
 delay(); //调用延时函数
 x=0x7f; //第八个灯亮
 delay(); //调用延时函数 
 }
}

6. 用不同数据类型控制灯闪烁时间

51单片机可以使用不同的数据类型来控制灯闪烁时间,其中包括:

  1. 整型变量:可以使用int型或者unsigned int型来控制灯的闪烁时间,比如:

    复制代码
    int time = 1000; // 定义一个int型变量time,表示灯闪烁的时间为1000ms
  2. 长整型变量:可以使用long型或者unsigned long型来控制灯的闪烁时间,比如:

    复制代码
    unsigned long time = 5000; // 定义一个unsigned long型变量time,表示灯闪烁的时间为5000ms
  3. 浮点型变量:可以使用float型或者double型来控制灯的闪烁时间,比如:

    复制代码
    float time = 0.5; // 定义一个float型变量time,表示灯闪烁的时间为0.5s

    需要注意的是,在使用浮点型变量控制灯的闪烁时间时,需要将其转换为整型,比如:

    复制代码
    int time = (int)(0.5 * 1000); // 将0.5s转换为500ms,然后定义一个int型变量time,表示灯闪烁的时间为500ms

不同的数据类型可以用于不同的应用场景,需要根据具体情况进行选择。

代码示例:

复制代码
#include<reg51.h> //包含单片机寄存器的头文件
/****************************************************** 
函数功能:用整形数据延时一段时间
******************************************************/ 
void int_delay(void) //延时一段较长的时间
{ 
 unsigned int m; //定义无符号整形变量,双字节数据,值域为 0~65535 
 for(m=0;m<36000;m++) 
 ; //空操作 
} 
/****************************************************** 
函数功能:用字符型数据延时一段时间
******************************************************/ 
void char_delay(void) //延时一段较短的时间
{ 
 unsigned char i,j; //定义无符号字符型变量,单字节数据,值域 0~255 
 for(i=0;i<200;i++) 
 for(j=0;j<180;j++) 
 ; //空操作
} 
/****************************************************** 
函数功能:主函数
******************************************************/ 
void main(void) 
{ 
 unsigned char i; 
 while(1) 
 { 
 for(i=0;i<3;i++) 
 { 
 P1=0xfe; //P1.0 口的灯点亮
 int_delay(); //延时一段较长的时间
 P1=0xff; //熄灭
 int_delay(); //延时一段较长的时间
 } 
 for(i=0;i<3;i++) 
 { 
 P1=0xef; //P1.4 口的灯点亮
 char_delay(); //延时一段较长的时间
 P1=0xff; //熄灭
 char_delay(); //延时一段较长的时间
 } 
 
 } 
 }

51单片机流水灯是一个简单的练手项目,可以帮助初学者熟悉51单片机的基本操作和编程知识。以下是一些总结:

  1. 流水灯是一种基本的LED控制应用。将多个LED连接在一起,依次点亮和熄灭,形成一个动态的灯光效果。

  2. 51单片机流水灯的原理是将多个LED连接在单片机的输出端口上,通过编写程序控制输出端口的高低电平,从而实现LED的控制。

  3. 在编写51单片机流水灯程序时,需要掌握51单片机的单片机指令和汇编语言,以及用到的GPIO控制相关的寄存器。

  4. 51单片机流水灯有多种实现方式,包括轮流点亮每个LED和依次点亮每个LED两种方式。

  5. 编写51单片机流水灯程序时,需要注意硬件电路的连接和电气特性,如LED的电流限制和电阻的选取等。

  6. 通过实现51单片机流水灯项目,可以加深对单片机GPIO控制和编程知识的理解和掌握。同时,也可以为后续更复杂的项目打下基础。

更多推荐:

时光の尘_千题千解·Java面试宝典,Linux学习,C++学习-CSDN博客

相关推荐
清风6666665 小时前
基于单片机的螺旋藻生长大棚PH智能控制设计
单片机·嵌入式硬件·毕业设计·课程设计
ting_zh7 小时前
微控制器(Micro Controller Unit, MCU)基础整理
单片机·嵌入式硬件
清风6666667 小时前
基于单片机的图书馆智能座位管理平台
数据库·单片机·嵌入式硬件·毕业设计·课程设计
得单片机的运8 小时前
STM32的以太网的搭建
stm32·单片机·嵌入式硬件·物联网·以太网·iot·w5500
酷飞飞9 小时前
RTC和看门狗基于GD32F407VE的天空星的配置
stm32·单片机·嵌入式硬件·mcu
WD1372980155711 小时前
WD5030A,24V降5V,15A 大电流,应用于手机、平板、笔记本充电器
stm32·单片机·嵌入式硬件·智能手机·汽车·电脑·51单片机
日更嵌入式的打工仔11 小时前
GPIO 中断通用配置指南
stm32·单片机·嵌入式硬件
平凡灵感码头11 小时前
基于 STM32 的智能门锁系统,系统界面设计
stm32·单片机·嵌入式硬件
Truffle7电子12 小时前
STM32理论 —— 存储、中断
stm32·嵌入式硬件·嵌入式·存储·中断
报错小能手12 小时前
linux学习笔记(32)网络编程——UDP
单片机·嵌入式硬件