栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

51单片机点灯

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

51单片机点灯

小白向单片机笔记一:点灯大师
  • 前言
  • 一、单片机LED原理图
  • 二、点灯代码
    • 代码解释
      • 1.为什么LED闪烁要用两个 delay()函数?
      • 2. 为什么LED=0xfe之类的16进制?
      • 3.为什么for循环中阈值为7而不是8?
  • 总结


前言

点灯包括:单个LED闪烁,所有 LED闪烁,LED左流,LED右流,LED循环流

一、单片机LED原理图


VCC为电源,输出高电平。P20-P27为C51芯片引脚。LED灯点亮,电流只能从左流向右。控制芯片引脚默认输出高电平,LED左右均为高电平,即LED默认不亮。要点亮哪个LED灯,只需控制对应引脚输出低电平即可。

二、点灯代码
#include "reg52.h"
#include "intrins.h" //_crol_()和_cror_()函数要用
typedef unsigned int uint;
typedef unsigned char uchar;
sbit LED0 = P2^0;
sbit LED1 = P2^1;
sbit LED2 = P2^2;
sbit LED3 = P2^3;
sbit LED4 = P2^4;
sbit LED5 = P2^5;
sbit LED6 = P2^6;
sbit LED7 = P2^7;
#define LED P2 //包含8个LED灯

void delay(uint i){
	while(i--){
	}
}					   
void main(){
	while(1){
         
		

		
		

		
		uint i;
		
		
		
		
		
		 

		
		
	} 
}
代码解释 1.为什么LED闪烁要用两个 delay()函数?

因为程序执行速度非常快,只保留第一个delay()函数,LED熄灭后会很快点亮,虽然其在闪烁,但肉眼无法察觉。

2. 为什么LED=0xfe之类的16进制?

因为LED定义为P2的所有引脚,P2的8个引脚分别控制8个LED灯。0xfe转换为二进制为1111 1110。低位0表示P20引脚为低电平,即第一个LED灯点亮,其他熄灭。在左右流水灯中的左右位移函数 _crol_() 和 _cror_() 中移动给定的十六进制数,以此顺序点亮对应LED灯。

3.为什么for循环中阈值为7而不是8?

要控制8个灯依次点亮,而在for循环体外已经控制点亮了第一个灯,即LED=0xfe。所以只要控制其他七个灯即可。

总结

除了数模电忘干净了很多看不懂,其他比较简单。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/943173.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号