(二)重拾单片机 第一天 LED灯
由图知道 低电平 亮,高电平 灭
控制第一个 LED1 亮灭程序代码,如下
#include<reg52.h>
#define uchar8 unsigned char
#define uint16 unsigned int
sbit LED1=P1^;
/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/********* *******************/
void DelayMS(uint16 val)
{
uint16 i,j;
for(i=;i<val;i++)
for(j=;j<;j++); } void main()
{ while()
{
LED1=;
DelayMS();
LED1=;
DelayMS(); } }
__________________________________________________________________________________________________________________________
流水灯程序代码:
#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char
#define uint16 unsigned int
#define LED P1
/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/********* *******************/
void DelayMS(uint16 val)
{
uint16 i,j;
for( i=;i<val;i++)
for(j=;j<;j++); } void main()
{ int i; while()
{
LED=0xff ; // 这里端口全被设置为 1111 1111 ,相当于 全灭 for(i=;i<;i++)
{ LED=LED<<; // 选择了左移循环
DelayMS(); } } }
1、2亮
1、2、3亮
1、2、3、4亮
。。。。。。
1、2、3。。。。。8 全部亮
________________________________________________________________________________________________________________
跑马灯程序代码:
#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char
#define uint16 unsigned int
#define LED P1
/*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/********* *******************/
void DelayMS(uint16 val)
{
uint16 i,j;
for( i=;i<val;i++)
for(j=;j<;j++); } void main()
{ LED =0xfe; while()
{
LED=_crol_(LED,);
DelayMS(); } }
只有一个LED灯 亮。
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
程序目标: 实现LED跑马灯 先从左向右移动,后从右向左移动,循环往复
方案一: 数组的字节操作
#include<reg52.h>
#define uchar8 unsigned char
#define uint16 unsigned int
#define LED P1
uchar8 code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f, 0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe} ; /*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/************************* *******************/
void DelayMs(uint16 val)
{
uint16 i,j;
for( i=;i<val;i++)
for(j=;j<;j++); } void main()
{ int i; while()
{ for(i=;i<;i++)
{ LED=tab[i];
DelayMs(); } } }
方案二: 移位运算符的实现
#include<reg52.h>
#define uchar8 unsigned char
#define uint16 unsigned int
#define LED P1 /*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/************************* *******************/
void DelayMs(uint16 val)
{
uint16 i,j;
for( i=;i<val;i++)
for(j=;j<;j++); } void main()
{ int i;
uchar8 temp; while()
{ temp=0x01; // 0000 0001
for(i=;i<;i++)
{
LED= ~temp;
DelayMs();
temp=temp<<; } temp=0x80; // 1000 0000
for(i=;i<;i++)
{
LED= ~temp;
DelayMs();
temp=temp>>; } } }
方案三:运用循环左右移函数来实现
#include<reg52.h>
#include<intrins.h>
#define uchar8 unsigned char
#define uint16 unsigned int
#define LED P1 /*****************************/
// 函数名称: DelayMS( )
// 函数功能: 延时
// 入口函数: 延时毫秒
// 出口函数: 无
/************************* *******************/
void DelayMs(uint16 val)
{
uint16 i,j;
for( i=;i<val;i++)
for(j=;j<;j++); } void main()
{ int i;
uchar8 temp; while()
{ temp=0xfe; // 1111 1110
for(i=;i<;i++) // 注意这里i<7 ,不再是 i<8
{
LED= temp;
DelayMs();
temp=_crol_(temp,); // 执行左移函数,将 temp 中的函数循环左移一位 } for(i=;i<;i++)
{
LED= temp;
DelayMs();
temp=_cror_(temp,); // 右移函数 } } }
(二)重拾单片机 第一天 LED灯的更多相关文章
- 重拾c++第一天(1):环境配置
时过多年,c++基本不记得了,故在此记录相关重拾记录. 学习语言第一步当然是环境配置了(笑),由于暂无用c++进行大型项目开发的需求,所以先下载dev进行过渡. 安装过程非常简单,值得注意的是配置时选 ...
- 重拾C++第一天_WDS
1.面向对象编程的三大特点:封装.继承.多态 2.C++中若不指定类中成员的访问权限默认就是private的(class默认是private的,struct默认是public的). 3.C++规范中类 ...
- 重拾MVC——第一天:数据库连接与SqlDbHelper
这个 SqlDbHelper 是我参考网上的和以前用过的 SqlDbHelper 自己写的一个非常简单的东西,主要是记录自己的学习情况 首先在Web.config中配置数据库连接字符串: <co ...
- 重拾c++第一天(3):数据处理
1.short至少16位:int至少与short一样长:long至少32位,且至少与int一样长:long long至少64位,且至少与long一样长 2.sizeof 变量 返回变量长度 或者s ...
- 重拾c++第一天(2):基本语法
1.输出方法: cout<<"输出语句" 2.输出时换行为 cout<<endl or "\n" 3.连续赋值是合法的,从右往左依次赋值 ...
- 【蓝桥杯单片机02】LED的基本控制
[蓝桥杯单片机02]LED的基本控制 广东职业技术学院 欧浩源 在CT107D单片机综合训练平台实现LED的基本控制和其他单片机开发平台不一样,不单单是控制几个LED实现跑马灯这么简单.因为在这个平 ...
- 单片机学习(二)开发板LED灯的控制
目录 开发板上LED灯相关的电路图 点灯 LED闪烁 LED流水灯 其他效果 灯光二进制计数器 进阶版流水灯 开发板上LED灯相关的电路图 这是P2相关7个引脚的电路图,在默认情况下它是直接接着VCC ...
- 《STM32CubeMX配置STM32H743XI工程》第一讲《初始化UART,重定义printf函数,点亮一个LED灯》
1.打开STM32CubeMX软件->新建一个工程(软件自行到ST官网下载安装) 2.输入对应的芯片型号(本次基于野火STM32H743XI Pro 开发板)点击Start Project生成项 ...
- 嵌入式学习笔记(综合提高篇 第一章) -- 利用串口点亮/关闭LED灯
1 前言 从踏入嵌入式行业到现在已经过去了4年多,参与开发过的产品不少,有交换机.光端机以及光纤收发器,停车场出入缴费系统,二维码扫码枪,智能指纹锁以及数字IC芯片开发等; 涉及产品中中既有 ...
随机推荐
- Abstract Algebra chapter 7
7.7:Encrypt each of the following RSA messages x so that x is divided into blocks of integers of len ...
- 局部变量、结构体和main函数
在函数中定义的变量称为自动局部变量.因为每次调用该函数时,它们都自动“创建”,并且它们的只对于函数来说是局部的,局部对象的变量都会默认为空.局部变量的值只能在定义该变量的函数中访问,不能从函数之外访问 ...
- zabbix basic concept
tomcat/mysql/hadoop http://www.linuxidc.com/Linux/2014-06/103776p2.htm http://www.aikaiyuan.com/2993 ...
- 通过宏定义判断是否引入的是framework,反之则使用双引号,实用!
例: #if __has_include(<TestHead/TestHead.h>) #import <TestHead/TestHead.h>#else#import &q ...
- 【Android测试】【第十一节】Uiautomator——简介
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4872244.html 前言 在App的测试中,除了单元测试 ...
- ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案
原文:ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案 根据实际JPG图片进行配准后,发布的地图,利用ArcGIS API for Silverlight在网页 ...
- 101个LINQ示例,包含几乎全部操作
Restriction Operators Where - Simple public void Linq1() { , , , , , , , , , }; var lowNums = from n ...
- 实验一补充内容 Java开发环境的熟悉-刘蔚然
本次实验 PSP时间统计 步骤 耗时百分比 需求分析 5% 设计 10% 代码实现 67% 测试 15% 分析总结 3%
- Anacodna之conda与 virtualenv对比使用教程,创建虚拟环境
conda创建虚拟环境 1.查看包 conda list查看安装了哪些包 conda env list查看有哪些虚拟环境 conda -V查看conda的版本 2.创建虚拟环境,命名为myflaska ...
- Selenium2学习-016-WebUI自动化实战实例-014-Selenium 窗口选择
在日常的 WebUI 自动化测试脚本编写过程中,经常需要打开新的页面,或者在多个打开的页面之间进行切换,以对页面元素进行相应的操作,以模拟用户的行为,实现 UI 的自动化测试.在过往的时间中,经常有初 ...