51—led流水灯相关(笔记)

一、单片机关键字sbit
sbit:位定义关键字
三种用法:

1.Sbit变量名=地址值
2.sbit位变量名=SFR名^变量位地址值
3.sbit位变量名=SFR地址值^可变位地址值

二、程序demon——点亮LED
原理图,LED1由P10口控制,所以P10需要1个低电平既可以点亮
在这里插入图片描述

#include <reg52.h> //引用51头文件

sbit LED1 = P1^0; //位定义LED1的IO口

void main()
{
	LED1 = 0;  //拉低点亮
	while(1);//程序停留
}

程序烧录:
在这里插入图片描述

运行结果:
在这里插入图片描述
三、LED闪烁
使8个LED灯闪烁,原理是切换P1 IO口的高低电平状态
在这里插入图片描述

#include <reg52.h> //引用51头文件

unsigned int i;
void main()
{
	while(1)
	{
		P1 = 0x00;  //拉低点亮
		i = 65535;
		while(i--);
		P1 = 0xff;//拉高熄灭
		i = 65535;
		while(i--);
	}
}

四、流水灯程序
1.软件延时的计算
使用keil中的debug调试确定一个for循环的时间,依此为依据确定1ms所需几次for循环

#include <reg52.h>	//51头文件
#include <intrins.h>//包含循环右移函数_cror头文件

#define uchar unsigned char	 //宏定义
#define uint  unsigned int	 //宏定义

sbit LED1 = P1^0; //位定义LED1硬件接口
uchar i;   //申明循环计数变量
uchar temp;//P1口状态暂存变量

//毫秒级延时函数
void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 120; y > 0 ; y--);
}

//主函数
void main()
{
	temp = 0x7f; //定义LED灯初始状态,从LED8开始亮
	P1 = temp;	 //赋值给P1,点亮LED8
	delay(1000); //延时1000毫秒
	while(1)	//大循环
	{
		for(i = 0; i < 8; i++)
		{
			temp = _cror_(temp,1);//循环右移,LED从左至右点亮
			P1 = temp;
			delay(1000);	
		}
	} 
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值