复习单片机:流水灯(内含2种方法(左移操作符法+crol法)+设计思路+原始代码)
思路1:
根据流水灯实现原理,即 IO 口由低往高或者由高往低逐个输出低电平特点,那么我们可以将移位操作以及循环结合进来。
进入 main 函数后首先定义一个变量 i,然后进入 while 循环,由于要实现 8个 LED 从 D1->D8 循环点亮,因此可以使用 for 循环语句循环 8 次,每循环一次,点亮的小灯向右移动一个,而 D1-D8 是连接到 P2.0-P2.7 的,因此输出的低电平要左移一位,因此可以使用 LED_PORT=~(0x01<<i);语句实现。0X01<<i 表示 i增加 1 次,0x01 中的 1 就移动多少位,因为 1(高电平)不会让 LED 点亮,需要取反后变为低电平 0 才能点亮,所以最后的结果需要取反后给 LED_PORT 口,并且每次循环都要延时一段时间,这样才能分辨出来 LED 在实现流水灯。
代码如下:
原始代码如下:
#include"reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
#define LED_PORT P2
void delay_time(u16 ten_us)
{
while(ten_us--);
}
void time()
{
while(1)
{
u8 i=0;
for(i=1;i<=8;i++)
{
LED_PORT=(~0x01<<1);//循环亮灯
delay_time(50000);//延时
}
}
}
思路2:
使用左移_crol_、右移_cror_函数
除了使用 for 循环语句实现移位,KEIL C51 软件内还有对应的移位库函数,
左移函数是_crol_(),右移函数是_cror_(),要使用这两个函数在我们的程序中
必须包含 intrins.h 头文件。这两个移位函数大家可以百度了解下,其内部实现
过程是看不到的,该移位函数实现的移位功能就相当于一个队列内循环移动,如
果是左移,那么最高位就被移到最低位了,次高位变为最高位,依次类推。
代码如下:
原始代码如下:
#include"reg52.h"
#include"intrins.h"
//使用corl和cror函数需要头文件
typedef unsigned char u8;
typedef unsigned int u16;
#define PORT_LED P2
u8 delay_time(u16 ten_us)
{
while(ten_us--);
}
void main()
{
while(1)
{
u8 i=0;
for(i=0;i<=8;i++)//左移
{
PORT_LED=(_crol_(PORT_LED,1));
//crol是左移操作函数,需要传参
//第一个参数是目标值,第二个是移动几个
delay_time(50000);
}
for(i=0;i<7;i++)//右移
{
PORT_LED=(_cror_(PORT_LED,1));
//crol是右移操作函数,需要传参
//第一个参数是目标值,第二个是移动几个
delay_time(50000);
}
}
}
复习单片机:流水灯(内含2种方法(左移操作符法+crol法)+设计思路+原始代码)相关推荐
- 简单51单片机c语言编程流水灯,51单片机如何实现流水灯?51单片机实现流水灯的三种方法详细分析...
描述 首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平 ...
- 51单片机流水灯的三种实现方法
首先,介绍下原理.下图为主控芯片和流水灯模块的原理图.流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯.相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可. ...
- 单片机流水灯三种实现
单片机流水灯的三种实现方式(由上至下,再重下到上) 原理图 一般使用单片机的P1口 输出,不需要加上拉电阻: 由原理图可以看出这里采用低电平输出. 一.采用数组方式进行字节定义,最好理解的方式 #in ...
- 51单片机(二)流水灯的几种实现方法
流水灯的几种实现方法 一.暴力法 二.数组法 三.循环左移法 一.暴力法 直接对P1寄存器的每一位进行重命名,然后点亮第一个-->延时-->熄灭第一个.点亮第二个-->延时--> ...
- 【单片机基础】stc89c52单片机实现流水灯的三种编程方式
效果图 实现流水灯的第一种方式 /* 来回点亮LED的第一种方法 */ #include <reg52.h>//包含51一些特殊功能寄存器 #define uchar unsigned c ...
- 51单片机制作花式流水灯的三种方式总结与仿真运行
制作流水灯,一共有三种方式,分别是左右移位,延时,与定时器(计数器)方式 其中移位方式较为简便,常与简单的延时一同使用在各类工程中.除此之外,也可以直接操作寄存器改变灯的亮度. 延时方式通过改变占空比 ...
- 51单片机流水灯制作
文章目录 51单片机流水灯制作 初试与复试 初试 复试 制作 分工 制作之硬件 制作之软件 总结 51单片机流水灯制作 我不得不承认自己的毅力实在是太差了,原先准备一星期写一篇博客的目标一致没有实现, ...
- 51单片机流水灯现象1
**` 51单片机流水灯程序 `** 初学者小白,分享上课时写的小程序和普中科技程序,感兴趣的可以瞧瞧. 程序如有相同冒犯了. /*********************************** ...
- c语言流水灯程序详细讲解,用c语言编写单片机流水灯程序详解
用C语言编写的单片机流水灯程序 一.硬件电路 因为电路用单片机控制,所以电路非常简洁.其电路原理图见下图,印制板图如下图所示. ? 电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组 ...
- AT89C51单片机流水灯c语言程序及详解(扫盲教程)
AT89C51单片机是我们学习单片机必学的一个单片机,也是单片机入门的教材,下面给大家展示一下流水灯的编写方法适合初学者 首先先在proteus画出仿真图,方便仿真程序 下面来编写程序,先来写入头函数 ...
最新文章
- Ubuntu下Sublime Text 3解决无法输入中文的方法
- 如何解决Linux操作系统找不到网卡的问题
- java定时器返回future_java 定时器线程池(ScheduledThreadPoolExecutor)的实现
- 串联矩阵matlab代码,Matlab串联矩阵函数【horzcat】详细解析
- 给选择模型的子模型添加COL
- (原创) 对饱和状态NPN晶体管内部机制的理解分析
- mysql table fetching_MySQL死锁分析一例
- 网络安全管理实践(第2版)
- ExtJs页面布局总结(转载)
- 关于QT报C:\Program Files (x86)\sogoupinyin\Components\的错误
- wps excel日历_Excel处理日历
- python前缀_【python刷题】前缀和
- 星际争霸、魔兽争霸3、红色警戒之完全对比
- Web前端-Vue中给input框赋值
- iSCSI引入FC/SAN
- 梦回大明湖畔遇见情窦初开的数据库,寻梦的开始,大明湖畔的夏雨荷-你在哪呢?
- 谷物大脑(来自樊登读书会)
- k8s教程(pod篇)-容器获取pod信息(Downward API)
- 计算机辅助设计中图元单位,CAD图形单位快捷键
- Python Network(一)基础入门(节点和边基本概念,网络统计量)
热门文章
- 教你如何购买阿里云香港服务器(教程)
- 有关vista系统的激活工具
- python大数据书籍推荐-清华大学出版社-图书详情-《从零开始学Python大数据与量化交易》...
- 相片打印机原理_【视界网】什么是便携式打印机以及工作原理有哪些呢?
- Docker 运行stress
- Excel如何冻结多行多列
- 什么是IPv6,IPv6有什么优势
- 在ADS仿真或者查看S参数的方法
- GSM网络结构及主要接口标注(附中英翻译)
- 信息学奥赛一本通 1293:买书 | OpenJudge NOI 2.6 6049:买书