一、LED模块
Ⅰ、控制LED亮灭
①实验目的:
1.掌握单片机IO口的基本操作方法 2.掌握软件延迟函数的设计方法
②原理图:
由原理图可知,该板子的LED为共阳极连接,74HC573是锁存器,其中LE处于低电平状态时,P0端口的8位数据线与74HC573内部数据保持器的输入端断开;LE处于高电平状态时,P0端口的8位数据线与74HC573内部数据保持器的输入端连通。因此,我们要通过控制138译码器来控制Y4的高低电平,通过配置P25P26P27来控制Y4,再通过P0输入端,控制LED的亮灭。
③代码:
#include "STC15F2K60S2.H"
#include "intrins.h"
//关闭蜂鸣器
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
//延时200ms
void delay() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 9;
j = 104;
k = 139;
do
{
do
{
while (--k);
}
while (--j);
}
while (--i);
}
void main(void)
{
cls_buzz();
while(1)
{
P2 = ((P2 & 0x1f) | 0x80);
P0 = 0xff; //LED关
P2 &= 0x1f;
delay();
P2 = ((P2 & 0x1f) | 0x80);
P0 = 0x00; //LED开
P2 &= 0x1f;
delay();
}
}
④现象:
8个LED以0.2s为周期闪烁
Ⅱ、LED移位控制
①实验目的:
1.掌握单片机IO口的基本操作方法 2.掌握移位运算符的使用方法
②实验现象:
LED以0.2s为间隔移位操作
③电路图:
④电路分析:
见实验一
⑤代码:
#include <STC15F2K60S2.H>
#include "intrins.h"
//关闭外设
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
//延迟0.2s
void delay(void) //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 9;
j = 104;
k = 139;
do
{
do
{
while (--k);
}
while (--j);
}
while (--i);
}
void main(void)
{
unsigned char i;
cls_buzz();
while(1)
{
for(i = 0; i < 8; i++)
{
P2 = ((P2 & 0x1f) | 0x80);
P0 = 0xfe << i; //左移i位 ,1111 1110
P2 &= 0x1f;
delay();
}
}
}
⑥现象:
Ⅲ:LED流水灯
①实验目的:
1.掌握单片机IO口的基本操作方法 2.掌握移位运算符的使用方法
②实验现象:
LED以0.2s为间隔流水操作
③电路图:
④电路分析:
见实验一
⑤代码:
#include <STC15F2K60S2.H>
#include "intrins.h"
//关闭外设
void cls_buzz(void)
{
P2 = (P2 & 0x1F | 0xA0);
P0 = 0x00;
P2 &= 0x1F;
}
//延迟0.2s
void delay(void)
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 9;
j = 104;
k = 139;
do
{
do
{
while (--k);
}
while (--j);
}
while (--i);
}
void main(void)
{
unsigned char i;
cls_buzz();
while(1)
{
for(i = 0; i < 8; i++)
{
P2 = ((P2 & 0x1f) | 0x80);
P0 = ~(0x01 << i); //左移i位,按位取反
P2 &= 0x1f;
delay();
}
}
}