需要掌握知识:C语言基础,二进制,十进制和十六进制的转换,二进制的逻辑运算符(与或非等)
需要安装软件:KEIL,STC-isp
1.LED灯原理图:
本开发板为共阳极LED灯,即右侧VCC位置为电源正极,此时只需在LED左侧引脚低电平(让对应的P0口输出低电平)即可点亮该LED灯。
1.添加开发板头文件。
头文件里包含数据接口的声明,即包含了STC15F2K60S2单片机的内容。
#include<STC15F2K60S2.H>
2.初始化。
P2=0XA0;P0=0X00; //关闭蜂鸣器
P2=0X80;P0=0XFF; //关闭所有LED灯
下图为74HC138的原理图:
下表可见当P25,26,27口输入对应高低电平时,Y口输出对应信号,且Y口同时只能有一个低电平(也就是在同一时刻只能控制一个元件)。
P2=0X80 即将P2口调节成二进制的 1000 0000,这条语句等同于P25 = 1,P26=0,P27=0;此时Y4口输出低电平,可以用M74HC573M1R芯片上的P0控制LED灯。
3.点亮LED灯
可以通过下述方式单独控制P01,02,03口,打开LED灯。
P00=0;//点亮第一个LED灯
P01=0;//点亮第二个LED灯
P02=0;//点亮第三个LED灯
也可以用P0=0X**控制所有LED灯(这种方式看上去更加简洁)。
需要注意的是,P0=0X**从右往左编号依次对应P01~P08(示例代码如下)。
以下代码功能为点亮左侧第一个LED灯。
P0=0XFE //1111 1110
P00=0,P01=1,P02=1,P03=1,P04=1,P05=1,P06=1,P07=1,P08=1;
此时就可以解释初始化代码中的P2=0X80;P0=0XFF;先将P2口调整到控制LED灯,然后令P0=0XFF以关闭所有LED灯。
4.延时函数
这个emmm(反正我是直接背的),向这个函数传递的数字即为延迟的毫秒数。
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
有了这个就可以做一些简单的例子了。
5.简单流水灯
这个写法比较低级,但是容易理解。
通过while循环可以让流水灯一直执行。
#include<STC15F2K60S2.H>
void Delayms(int ms);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
while(1)
{
P0=0XFE;
Delayms(250);
P0=0XFD;
Delayms(250);
P0=0XFB;
Delayms(250);
P0=0XF7;
Delayms(250);
P0=0XEF;
Delayms(250);
P0=0XDF;
Delayms(250);
P0=0XBF;
Delayms(250);
P0=0X7F;
Delayms(250);
P0=0XFF;
Delayms(250);
}
}
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
这种比较简洁,但是相对来说比较难理解,因为用到了位运算符,<<位左移,>>位右移,~取反运算符。
#include<STC15F2K60S2.H>
unsigned char num;
void Delayms(int ms);
void main(void)
{
P2=0XA0;P0=0X00;P2=0X80;P0=0XFF;
while(1)
{
for(num=0;num<8;num++)
{
P0=~(0X01<<LED); //~是位运算符中的取反运算符。
Delayms(250);
}
}
}
void Delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=845;j>0;j--);
}
还有一些其他LED可以实现的功能,只要知道原理都可以实现,这里就不多写了。
版权声明:本文为CSDN博主「好好好好好好269」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_59279411/article/details/122293305
暂无评论