深圳做二维码网站设计,网站建设联系方式,金华市建设银行网站,做网站和微信公众号需要多少钱51单片机应用从零开始#xff08;一#xff09;-CSDN博客 51单片机应用从零开始#xff08;二#xff09;-CSDN博客 51单片机应用从零开始#xff08;三#xff09;-CSDN博客 详解 KEIL C51 软件的使用建立工程-CSDN博客 详解 KEIL C51 软件的使用设置工程编绎与连接程序… 51单片机应用从零开始一-CSDN博客 51单片机应用从零开始二-CSDN博客 51单片机应用从零开始三-CSDN博客 详解 KEIL C51 软件的使用·建立工程-CSDN博客 详解 KEIL C51 软件的使用·设置工程·编绎与连接程序-CSDN博客 目录 5. 通过对 P3 口地址的操作流水点亮 8 位 LED
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语言的代码示例
#includereg51.h //包含单片机寄存器的头文件
sfr x0xb0; //P3 口在存储器中的地址是 b0H 通过 sfr 可定义 8051 内核单
片机//的所有内部 8 位特殊功能寄存器,对地址 x 的操作也就是对 P1 口的
操作
/****************************************
函数功能延时一段时间
*****************************************/
void delay(void) { unsigned char i,j; for(i0;i250;i) for(j0;j250;j) ; //利用循环等待若干机器周期从而延时一段时间}
/*****************************************
函数功能主函数
******************************************/
void main(void)
{ while(1) { x0xfe; //第一个灯亮delay(); //调用延时函数x0xfd; //第二个灯亮delay(); //调用延时函数x0xfb; //第三个灯亮delay(); //调用延时函数x0xf7; //第四个灯亮delay(); //调用延时函数x0xef; //第五个灯亮delay(); //调用延时函数x0xdf; //第六个灯亮delay(); //调用延时函数x0xbf; //第七个灯亮delay(); //调用延时函数x0x7f; //第八个灯亮delay(); //调用延时函数 }
}
6. 用不同数据类型控制灯闪烁时间
51单片机可以使用不同的数据类型来控制灯闪烁时间其中包括 整型变量可以使用int型或者unsigned int型来控制灯的闪烁时间比如 int time 1000; // 定义一个int型变量time表示灯闪烁的时间为1000ms长整型变量可以使用long型或者unsigned long型来控制灯的闪烁时间比如 unsigned long time 5000; // 定义一个unsigned long型变量time表示灯闪烁的时间为5000ms浮点型变量可以使用float型或者double型来控制灯的闪烁时间比如 float time 0.5; // 定义一个float型变量time表示灯闪烁的时间为0.5s需要注意的是在使用浮点型变量控制灯的闪烁时间时需要将其转换为整型比如 int time (int)(0.5 * 1000); // 将0.5s转换为500ms然后定义一个int型变量time表示灯闪烁的时间为500ms不同的数据类型可以用于不同的应用场景需要根据具体情况进行选择。
代码示例
#includereg51.h //包含单片机寄存器的头文件
/******************************************************
函数功能用整形数据延时一段时间
******************************************************/
void int_delay(void) //延时一段较长的时间
{ unsigned int m; //定义无符号整形变量双字节数据值域为 0~65535 for(m0;m36000;m) ; //空操作
}
/******************************************************
函数功能用字符型数据延时一段时间
******************************************************/
void char_delay(void) //延时一段较短的时间
{ unsigned char i,j; //定义无符号字符型变量单字节数据值域 0~255 for(i0;i200;i) for(j0;j180;j) ; //空操作
}
/******************************************************
函数功能主函数
******************************************************/
void main(void)
{ unsigned char i; while(1) { for(i0;i3;i) { P10xfe; //P1.0 口的灯点亮int_delay(); //延时一段较长的时间P10xff; //熄灭int_delay(); //延时一段较长的时间} for(i0;i3;i) { P10xef; //P1.4 口的灯点亮char_delay(); //延时一段较长的时间P10xff; //熄灭char_delay(); //延时一段较长的时间} } } 51单片机流水灯是一个简单的练手项目可以帮助初学者熟悉51单片机的基本操作和编程知识。以下是一些总结 流水灯是一种基本的LED控制应用。将多个LED连接在一起依次点亮和熄灭形成一个动态的灯光效果。 51单片机流水灯的原理是将多个LED连接在单片机的输出端口上通过编写程序控制输出端口的高低电平从而实现LED的控制。 在编写51单片机流水灯程序时需要掌握51单片机的单片机指令和汇编语言以及用到的GPIO控制相关的寄存器。 51单片机流水灯有多种实现方式包括轮流点亮每个LED和依次点亮每个LED两种方式。 编写51单片机流水灯程序时需要注意硬件电路的连接和电气特性如LED的电流限制和电阻的选取等。 通过实现51单片机流水灯项目可以加深对单片机GPIO控制和编程知识的理解和掌握。同时也可以为后续更复杂的项目打下基础。 更多推荐 时光の尘_千题千解·Java面试宝典,Linux学习,C学习-CSDN博客