《蓝桥杯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模块的主要内容,如果未能解决你的问题,请参考以下文章