Step1 :【C51】LED灯闪烁、跑马灯、流水灯、实现每次亮两个灯的流水灯
Step1Step1Step1 :【C51】LED灯闪烁、跑马灯、流水灯、实现每次亮两个灯的流水灯
在我所使用的开发板中,LED采用共阳极接法,即所有LED阳极管脚接电源VCC,其阴极管脚接到P2口上。因此,LED发光时,其对应的阴极管脚应为低电平;LED熄灭时,其对应的阴极管脚应为高电平。
LED模块(LED0−7LED_{0-7}LED0−7,8个LED灯):
LED0 | LED1 | LED2 | LED3 | LED4 | LED5 | LED6 | LED7 |
---|
LED灯闪烁
要求:点亮LED0并让其闪烁。
实现方法:循环让LED灯亮一段时间、熄灭一段时间。(需要用到延时函数)
实现代码:
#include<reg52.h>
sbit LED0=P2^0;
void delay(int n);//延时函数
void main()
{while(1)//一个死循环,循环执行LED1亮、灭灯操作{LED0=0;//亮灯delay(1000);//延时约1sLED0=1;//灭灯delay(1000);}
}
void delay(int n)
{int i,j;for(i=1;i<=n;i++)for(j=0;j<100;j++);
}
LED跑马灯
要求:实现LED跑马灯,需要循环让LED0-LED7逐个点亮。
实现方法:移位方法实现跑马灯。(方法不唯一)
LED灯具体亮灭情况如下表:
P2端口值 | LED0 | LED1 | LED2 | LED3 | LED4 | LED5 | LED6 | LED7 |
---|---|---|---|---|---|---|---|---|
0xFE | 亮 | 灭 | 灭 | 灭 | 灭 | 灭 | 灭 | 灭 |
0xFD | 灭 | 亮 | 灭 | 灭 | 灭 | 灭 | 灭 | 灭 |
0xFB | 灭 | 灭 | 亮 | 灭 | 灭 | 灭 | 灭 | 灭 |
0xF7 | 灭 | 灭 | 灭 | 亮 | 灭 | 灭 | 灭 | 灭 |
0xEF | 灭 | 灭 | 灭 | 灭 | 亮 | 灭 | 灭 | 灭 |
0xDF | 灭 | 灭 | 灭 | 灭 | 灭 | 亮 | 灭 | 灭 |
0xBF | 灭 | 灭 | 灭 | 灭 | 灭 | 灭 | 亮 | 灭 |
0x7F | 灭 | 灭 | 灭 | 灭 | 灭 | 灭 | 灭 | 亮 |
实现代码:
#include<reg52.h>
#include<intrins.h>//进行移位操作的头文件
void delay(int times);
void main()
{int i;while(1){P2=0xFE;//P2口的8个引脚被赋值成1111,1110,代表只有P2^0口是低电平,其余都是高电平。//即只有LED0亮,其余LED灯处于熄灭状态。 //8个引脚与0xFE的2进制分别对应!for(i=0;i<8;i++){P2=_crol_(P2,1);//每次循环左移一位。delay(1000);}}
}
void delay(int times)
{times=times*10000;while(times--);
}
LED流水灯
要求:实现LED流水灯,需要循环让LED0-LED7依次点亮。
实现方法:移位方法实现流水灯。(方法不唯一)
LED灯具体亮灭情况如下表:
P2端口值 | LED0 | LED1 | LED2 | LED3 | LED4 | LED5 | LED6 | LED7 |
---|---|---|---|---|---|---|---|---|
0xFE | 亮 | 灭 | 灭 | 灭 | 灭 | 灭 | 灭 | 灭 |
0xFD | 亮 | 亮 | 灭 | 灭 | 灭 | 灭 | 灭 | 灭 |
0xFB | 亮 | 亮 | 亮 | 灭 | 灭 | 灭 | 灭 | 灭 |
0xF7 | 亮 | 亮 | 亮 | 亮 | 灭 | 灭 | 灭 | 灭 |
0xEF | 亮 | 亮 | 亮 | 亮 | 亮 | 灭 | 灭 | 灭 |
0xDF | 亮 | 亮 | 亮 | 亮 | 亮 | 亮 | 灭 | 灭 |
0xBF | 亮 | 亮 | 亮 | 亮 | 亮 | 亮 | 亮 | 灭 |
0x7F | 亮 | 亮 | 亮 | 亮 | 亮 | 亮 | 亮 | 亮 |
实现代码:
#include<reg52.h>
void delay(int times);
void main()
{int i;while(1){for(i=0;i<8;i++){P2=0xFE<<i;//每次逻辑左移i位//注意逻辑移位和循环移位的区别(本文末有提及)delay(1000);}}
}
void delay(int times)
{times=times*10000;while(times--);
}
实现每次亮两个灯的流水灯
要求:每次亮起相邻两个灯,闪烁三次后,移动一位。
实现方法:结合LED灯闪烁和流水灯实验所用的方法,稍加改动即可。
实现代码:
#include<reg52.h>
#include<intrins.h>
void delay(int times);
void main()
{int i,temp,times;while(1){P2=0xFC;//11111100->LED0、LED1亮for(i=0;i<8;i++){temp=_crol_(P2,1);times=3;while(times--!=0)//闪烁三次{P2=temp;delay(1000);P2=0xFF;//11111111->所有LED灯熄灭delay(1000);P2=temp;//因为进行熄灭操作时将P2赋值为了0xFF,即11111111//若不引入temp变量暂存当前P2的值,之后的移位操作将毫无意义//你会发现LED灯一直不会亮(因为P2的8个引脚全为1了,咋移都亮不了)}}}
}
void delay(int times)
{times=times*10000;while(times--);
}
补充知识
①bit 和 sbit 型
它们在内存中都只占一个二进制位,其值可以是“1”或“0”。其中:用 bit 定义的位变量在C51编译器编译时,在不同的时候位地址是可以变化的,而用 sbit 定义的位变量必须与51单片机的一个可以寻址位单元或可位寻址的字节单元中的某一位联系在一起,在C51编译器编译时,其对应的位地址是不可变化的。
bit— 位变量声明,当定义一个位变量时可使用此符号。
sbit— 特殊功能位声明, 也就是声明某一个特殊功能寄存器中的某一位。
sfr-对单字节的特殊功能寄存器的数据声明,声明一个8位的寄存器。
sfr16—对双字节的特殊功能寄存器的数据声明。
②C51的移位操作
循环移位:
_crol_:字符循环左移。将char型变量循环向左移动指定位数后返回(将高位补低位)
_cror_:字符循环右移。将char型变量循环向左移动指定位数后返回(将高位补低位)
_irol_:整数循环左移。将int型变量循环向左移动指定位数后返回(将高位补低位)
_iror_:整数循环右移。将int型变量循环向右移动指定位数后返回(将低位补高位)
逻辑移位:
<<:逻辑左移。左移时,低位补0;高位移出的部分舍弃。
>>:逻辑右移。右移时,高位补0;低位移出的部分舍弃。
Step1 :【C51】LED灯闪烁、跑马灯、流水灯、实现每次亮两个灯的流水灯相关推荐
- FPGA流水灯和跑马灯
FPGA流水灯和跑马灯 流水灯和跑马灯的区别: 流水灯具体实现: 跑马灯具体实现: 流水灯和跑马灯的区别: 流水灯顾名思义就是让 LED 如同流水一般,从无灯亮,到亮一个,再到亮二个,以此类推,亮 3 ...
- STM8S自学笔记-003 GPIO输出:点亮LED灯 and 跑马灯特效
STM8S自学笔记-003 GPIO输出:点亮LED灯 and 跑马灯特效 点亮LED GPIO初始化函数:GPIO_Init() GPIO电平操作库函数:GPIO_WriteHigh().GPIO_ ...
- STM32入门开发--LED模块实现跑马灯
1.案例描述 利用STM32F103ZE开发板实现控制LED灯实现跑马灯现象. 正在不断学习嵌入式开发中,博客还会持续更新,敬请关注! 2.开发环境 keil 5.14 + Windows 10 + ...
- 【CC2530的点对点无线通讯开发(包含BasicRf协议栈、双击、长按、呼吸灯、跑马灯)】
CC2530无线通讯系统 一.实验效果: 二.实验要求: 三.实验代码与简单分析 1.ZigBee板(黑色)**A**模块 2.ZigBee板(黑色)**B** 模块 三.实验总结 一.实验效果: C ...
- 编程实现8盏LED的双向跑马灯
编程实现8盏LED的双向跑马灯,并收录到单片机开发板. 拓展:按下按键1,实现双向跑马灯;按下按键2,跑马灯全灭. #include <reg52.h>sbit LED1 = P1^0; ...
- 电脑无法开机:问题描述1、显示器不亮,鼠标键盘正常。2、显示器不亮,鼠标键盘也不亮。3、主机灯闪烁,风扇转转停停。4、风扇不转,主机没灯,电源损坏。
问题描述 1.显示器不亮,鼠标键盘正常. 2.显示器不亮,鼠标键盘也不亮. 3.主机灯闪烁,风扇转转停停. 4.风扇不转,主机没灯,电源损坏. 解决方法 1.打开主机机箱侧盖,拔掉内存条,用橡皮擦拭金 ...
- 【51单片机Task】:led十六进制控制led灯详解、按键控制流水灯、跑马灯等任务
学习目标: 学习普中51单片机的按键控制led灯. 电路图: 学习内容: LED灯的十六进制怎么算??? 在这给大家算一下:首 ...
- 51单片机点灯、流水灯、跑马灯
使用软件:keil5. proteus8.6 1.点亮一排led灯 代码: #include <reg51.h>void main() {P2 = 0xff; //端口2灯全部亮 } 仿真 ...
- 单片机p0口接8个LED c51语言,51 单片机:在 P0 口接上 8 个 LED,实现每次亮两个灯的流水灯...
要求:每次亮相邻两个灯,分别闪烁五次后,移动一位,汇编. 做而论道编程如下: ;------------------------ ORG 0000H LJMP MAIN ORG 0100H ...
最新文章
- 计算机视觉编程——图像搜索
- python调用c++类内静态函数_Python与C++混合编程 - 2.4 - 使用局部静态对象
- dev gridcontrol 根据数据获取索引_MySQL 索引分析除了 EXPLAIN 还有什么方法?
- php从入门到放弃表情,Lite语言——从入门到放弃(一)
- 【Elasticsearch】10分钟查询一个petabyte的云存储容量
- 浅谈分布式存储系统的数据分布算法
- 我是如何同时在字节和微信成功拿到实习转正offer!
- mysql 查询每个班级的前三名
- owncloud虚拟机扩容及apt修复
- 不再盯着男性发烧友,小米手机要去“撩妹”?
- postgresql模糊查询不区分大小写
- GN_1_在Ubuntu22.04安装GN
- C# 人民币(RMB)转化为大写字母
- 广州工作2个月!差人的公司可以call我
- 多项式拟合(polyfit)及局部加权回归(Lowess)对二维数据基础规律和离群特征学习的分析对比
- 静态成员和非静态成员的区别
- shell 中转换16进制10进制
- cdn内容分发网络介绍
- 逆水寒能不能网页预约服务器,逆水寒怎么预约春暖花开服务器 春暖花开服务器预约流程...
- 矩阵乘法的算法实现 [转载]
热门文章
- Linux配置SAP JCO驱动
- 饼图 + 不规则区域事件处理
- 从零开始的C++ opencv的人脸识别程序——第一个C++程序
- 【财务数字化管理】金蝶ERP系统助力企业数字化转型
- 用直接分解法求方程组的C语言程序,c语言编程求解线性方程组论文
- 计算机专业介绍 英语文章,计算机专业英语文章
- 面向对象的3 大特性封装、继承、多态。咱们今天用代码的形式来解释一下这名声赫赫的3大特性。...
- 了解大数据 之 商业智能BI和大数据
- 元宇宙之NFT行业分析:中国数字藏品行业有望走向规范化、差异化
- 【文本三剑客之一sed】