《蓝桥杯CT107D单片机竞赛板》:LED模块

Posted 是七喜呀!

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《蓝桥杯CT107D单片机竞赛板》:LED模块相关的知识,希望对你有一定的参考价值。

LED模块

实验简介

实验原理图

实验原理

  • 基本原理:LED阳极接着VCC(电源引脚),根据LED的单向导电性,我们只需软件控制通用输入输出端口中的P0(GPIO引脚),使其输入低电平(0),即可点亮对应的LED,输入高电平(1),熄灭对应的LED,在 LED 管脚上串联一个电阻,
    目的就是为了限制通过发光二极管的电流不要太大,因此这些电阻又可以称为“限流电阻”。
  • 实现须知:使能信号LE得为高电平,即得控制Y4C为高电平,下图知Y4C,受Y4控制,WR输入固定为低电平(0),了解数字电路中与或非门知识,我们得使得Y4输出低电平,才能使的Y4C输出高电平,而Y4为74HC138芯片(38译码器)的一个管脚,查阅对应芯片手册可知,其真值表满足C = 1,B = 0,A = 0,(对应管脚P27,P26,P25),且管脚P2的其他的管脚(0~4)保持原来的状态


实验程序

点亮第一个LED灯

//config.h--用于声明头文件,声明函数,声明一些经常使用的变量
#ifndef _CONFIG_H
#define _CONFIG_H
#include <STC15F2K60S2.H>//对应芯片函数头文件,定义了一些特殊功能寄存器

#endif
#include "config.h"

void led_init()

	P2 = (P2 & 0x1f) | 0x80;//保证低五位不变,且高三位为100
	P0 = 0xff;



void main()

   led_init();
   P0 = ~(0x01);
   while(1);


LED灯闪烁实验

//config.h--用于声明头文件,声明函数,声明一些经常使用的变量或难书写的语句
#ifndef _CONFIG_H
#define _CONFIG_H
#include <STC15F2K60S2.H>//对应芯片函数头文件,定义了一些特殊功能寄存器
#include<intrins.h>//使用_nop_()函数所需的头文件
void Delay100ms();//@12.000MHz

#endif
#include "config.h"

void led_init()

	P2 = (P2 & 0x1f) | 0x80;//保证低五位不变,且高三位为100
	P0 = 0xff;



void main()

   led_init();
   while(1)
   
   P0 = 0xfe;
   Delay100ms();
   P0 = 0xff;
   Delay100ms();
   


void Delay100ms()		//@12.000MHz

	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 5;
	j = 144;
	k = 71;
	do
	
		do
		
			while (--k);
		 while (--j);
	 while (--i);

LED灯一个常亮和一个闪烁

再上一个实验的基础上只需改变main函数中这一部分代码,即可

P0 = 0xee;
Delay100ms();
P0 = 0xef;
Delay100ms();

LED流水灯实验

//config.h--用于声明头文件,声明函数,声明一些经常使用的变量或难书写的语句
#ifndef _CONFIG_H
#define _CONFIG_H
#include <STC15F2K60S2.H>//对应芯片函数头文件,定义了一些特殊功能寄存器
#include<intrins.h>//使用_nop_()函数所需的头文件
void Delay100ms();//@12.000MHz

//typedef unsigned int uint;
#define uchar unsigned char
#define uint unsigned int

void Delay1000ms();		//@12.000MHz
#endif

代码一:非库函数实现

#include "config.h"

void led_init()

	P2 = (P2 & 0x1f) | 0x80;//保证低五位不变,且高三位为100
	P0 = 0xff;



void main()

	uchar i;
   led_init();
   while(1)
   
	for (i = 0; i < 8; i++)
	
		P0 = ~(0x01 << i);
		Delay1000ms();
	
	for (i = 1; i < 8; i++)
	
		P0 = ~(0x80 >> i);
		Delay1000ms();
	
   


void Delay1000ms()		//@12.000MHz

	unsigned char i, j, k;

	_nop_();
	_nop_();
	i = 46;
	j = 153;
	k = 245;
	do
	
		do
		
			while (--k);
		 while (--j);
	 while (--i);


代码二:左右移库函数实现

void main()

	uchar i;
   led_init();
   P0 = 0xfe;
   while(1)
   
	for (i = 0; i < 7; i++)//注意是移动7次
	
		P0 = _crol_(P0, 1);//左移函数,每次向左移动一个单位
		Delay1000ms();
	
	for (i = 0; i < 7; i++)
	
		P0 = _cror_(P0, 1);//右移函数,每次向右移动一个单位
		Delay1000ms();
	
   

以上是关于《蓝桥杯CT107D单片机竞赛板》:LED模块的主要内容,如果未能解决你的问题,请参考以下文章

《蓝桥杯CT107D单片机竞赛板》:独立按键模块

《蓝桥杯CT107D单片机竞赛板》:数码管模块

《蓝桥杯CT107D单片机竞赛板》:定时器模块

《蓝桥杯CT107D单片机竞赛板》:矩阵键盘模块

《蓝桥杯CT107D单片机竞赛板》:蜂鸣器模块

《蓝桥杯CT107D单片机竞赛板》:赛前准备工作