51单片机流水灯入门(理解IO口的组操作)
2012-11-18 17:26
274 查看
P1口接8个LED的负极,然后LED的正极经过电阻直接接Vcc
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个灯逐个点亮,最后全亮
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; }
相关文章推荐
- java IO文件操作入门经典例子
- Python入门程序:文件操作和IO异常
- java IO文件操作简单基础入门例子,IO流其实没那么难
- 【51单片机学习过程记录】7 中断之 定时计数器0 操作前理解过程
- Linux下C编程入门笔记——文件IO操作(二)
- 快速入门Python中文件读写IO是如何来操作外部数据的?
- Linux下C编程入门笔记——文件IO操作
- java IO文件操作简单基础入门例子,IO流其实没那么难
- 本地eclipse运行hadoop程序,操作远程服务器(供理解和入门)
- 51单片机、AVR单片机和PIC单片机IO口的操作
- Java的IO操作,个人理解。
- Python文件基础操作(IO入门1)
- 我理解的Node.js(二)--IO操作
- 对java io操作的再理解
- WinCE io口操作 流程 入门 请教
- Java 入门 之 IO操作与进程、线程
- java IO文件操作入门经典例子
- Android入门——数据存储之IO文件流操作小结
- (2)51单片机入门案列-移位操作循环点亮LED灯
- Linux下C编程入门笔记——文件IO操作(一)