51单片机流水灯入门(理解IO口的组操作)
来源:互联网 发布:北大青鸟消防编程公式 编辑:程序博客网 时间:2024/04/29 21:43
P1口接8个LED的负极,然后LED的正极经过电阻直接接Vcc
1:手工实现
1 流水灯单个闪过代码
#include <reg52.h>void delayms(int X){int i, j;for(i = X; i ; --i)for(j = 110;j ; --j);return;}int main(){int i;for(i = 0; i < 8; ++i){P1 = 0xff - (1 << i);delayms(500);}return 0;}
PS:给新同学解释下,单个引脚赋值0的时候点亮
(P1只能采用十六进制数来赋值)
0xff的二进制 : 1 1 1 1 1 1 1 1
如果要点亮第一个: 1 1 1 1 1 1 1 0
同理要点亮第二个: 1 1 1 1 1 1 0 1
即要点亮第二个,需要把 二进制的 11111101转换成十六进制数,然后赋值给P1口。
11111101的由来:
1 1 1 1 1 1 1 1 => 0xff
- 0 0 0 0 0 0 1 0 => 1 << 1
= 1 1 1 1 1 1 0 1 =>OK~
所以代码中赋值语句为 : P1 = 0xff - (1 << i); 记住要给<<加括号哦~ (运算符优先级问题);
最后的delayms为延时函数。
2:8个灯逐个点亮,最后全亮
#include <reg52.h>void delayms(int X){int i, j;for(i = X; i ; --i)for(j = 110;j ; --j);return;}int main(){int i, j = 0xff;for(i = 0; i < 8; ++i){P1 = j <<= i;delayms(500);}return 0;}
2:库函数实现
#include <reg52.h>#include <intrins.h>/* _crol_ (value, ctr) *//* _cror_ (value, ctr) */void delayms(int x){int i, j;for(i = x; i; --i)for(j= 110; j; --j);return ;}int main(){int dps = 0xfe;while(1){P1 = dps;delayms(500);dps = _crol_(dps, 1);}return 0;}
- 51单片机流水灯入门(理解IO口的组操作)
- 51单片机流水灯
- 基于51单片机的花样流水灯仿真(代码)
- 51单片机的流水灯--逻辑实现
- 51单片机、AVR单片机和PIC单片机IO口的操作
- 单片机轻松入门之二:流水灯
- 关于单片机IO口输入输出的理解!
- 51单片机STC89C52 流水灯
- 51单片机流水灯制作
- 51单片机闪烁流水灯
- 51单片机流水灯程序
- 用单片机定时器操作流水灯
- 51单片机学习之流水灯的设计
- 51单片机编程:做一个简易的流水灯
- 51单片机流水灯的三种实现方法
- 初学51单片机——简单的流水灯程序
- 51单片机的流水灯--循环指令实现
- 基于proteus的51单片机仿真实例十一、51单片机的P0口控制实例--流水灯
- (Linux)链接动态库需要注意的路径问题
- 将Cocos2dX渲染到MFC窗口上
- php 生成验证码(带旋转和干扰线条)
- [Matlab]基础教程学习笔记(一):基础和设置和矩阵教程
- 求四个数的最大公约数
- 51单片机流水灯入门(理解IO口的组操作)
- 阿里巴巴分布式服务框架 Dubbo 团队成员梁飞专访
- 字符串移位包含问题研究
- 331 - Mapping the Swaps
- 最完整的htaccess文件用法
- JavaScript 高级语法(function(){})() 语法介绍
- (复习)android 调用系统相机 图库 裁剪-图片上传-客服端-服务器
- jkkk
- Download android source code occur "server certificate verification failed "