15.LED模块
添加芯片包
打开STC-ISP,选择Keil仿真设置,选择单片机型号IAP15F2K61S2,按添加型号和头文件到Keil中,选择Keil的安装目录
发光二极管
右侧VCC供电,提供1(高电平),若要LED导通,则需要左侧提供0(低电平)
M74HC573M1R为锁存器
当使能(LE)为高时,将上面数据(D)更新给数码管上侧(Q),使能为低时,输出将锁存在已建立的数据电平上,即不更新
若使L1亮则P00=0,然后使能LE抬高,寻找Y4C
WR接地,则Y4=0时,Y4C=1
使用8421编码,C-4,B-2,A-1,CBA-001时选中Y1,CBA-011时选中Y3
使用P25,P26,P27控制Y0-Y7
路径
P27=1;P26=0;P25=0;——Y4=0——Y4C=1——使能LE抬高——P00=0——LI打开
建立模板
选择STC15F2K60S2
外设关闭
将所有二极管关闭
P0=0xff;
P2需要P27,P26,P25-100——Y4=0
P2&0x1f得到P27=0,P26=0.P25=0
(P2&0x1f)|0x80得到P27,P26,P25-100,打开寄存器
P2&=0x1f;关闭寄存器
关闭继电器,蜂鸣器
VCC为1,则N BUZZ为0才能导通
ULN2003驱动(其存在反向器),给ULN2003为1的时候N BUZZ为0
则给P0全为0时ULN2003为0,N BUZZ为1即关闭蜂鸣器
P0=0x00;//关闭蜂鸣器和继电器
(P2&0x1f)|0xa0打开Y5C(0xa0为1010 0000,CBA为101)
Init.c
#include <Init.h>
void System_Init()
{
P0=0xff;//关闭LED
P2=P2&0x1f|0x80;//打开寄存器Y4C
P2&=0x1f;//关闭寄存器
P0=0x00;//关闭蜂鸣器和继电器
P2=P2&0x1f|0xa0;//打开Y5C
P2&=0x1f;//关闭
}
Init.h
#include <STC15F2K60S2.H>
void System_Init();
Led
Led.c
#include <Led.h>
//addr-灯的地址 enable-使能标志位 0不使能 1使能
void Led_Disp(unsigned char addr,enable)
{
//局部静态变量,不会重复刷新初值,只有第一次上电时为初值
static unsigned char temp=0x00;
static unsigned char temp_old=0xff;
//不更改原本其他位的数据,只更改要变的灯的亮灭
if(enable)
temp |= 0x01 <<addr;
else
temp &= ~(0x01 <<addr);
//不同的时候才开关寄存器
if(temp !=temp_old)
{
//原本给0是亮,方便记忆则改为给1是亮
P0 = ~temp;
P2 = P2&0x1f|0x80;
P2 &=0x1f;
temp_old=temp;
}
}
//点亮第二个灯
//Led_Disp(1,1);
Led.h
#include <STC15F2K60S2.H>
void Led_Disp(unsigned char addr,enable);
main.c
//头文件声明区
#include <Init.h>
#include <Led.h>
//main
void main()
{
//关闭外设
System_Init();
while(1)
{
Led_Disp(0,1);
}
}







