LED灯系列
本系列为stc89c52RC单片机开发板上LED灯相关操作思路和代码
点此链接转到专栏目录链接: http://t.csdn.cn/skf2j
提示:以下是本篇文章正文内容,下面案例可供参考,不喜勿喷
1)原理
原理图
所有二极管正极接电源(vcc),负极接单片机I/O口(本单片机接P1口)(单片机P1口有内部上拉电阻,端口初始电平为高电平)
当P1口某一引脚输出低电平时,对应的LED灯亮
J4和J5两电阻限制电流,保护电路
2)单个LED灯常亮
a.思路
通过程序控制LED灯对应的P0口某个管脚输出低电平,就能让指定LED亮起来
b.代码
/**********************************************
本程序利用端口操作点亮stc89c52单片机上的一个LED灯
**********************************************/
#include <STC89C5xRC.H>
void main()
{
P1=0xfe; //1111 1110 对整个P1口进行操作
while(1); //结束程序
}
或
/***************************************************************************
本程序利用位操作点亮本程序操作端口点亮stc89c52单片机开发板上的一个LED灯
****************************************************************************/
#include <STC89C5xRC.H>
void main()
{
P10=0; //对控制单个LED灯的引脚进行位操作
while(1); //结束程序
}
c.小结
要让LED灯亮有两种方式
1.对整个P1口进行操作,把二进制用十六进制表示
2.对P1口的单个管脚进行操作
3)单个LED灯闪烁
a.思路
要让指定LED闪烁,只需要让指定LED灯连接的I/O口管脚周期性输出高低电平即可
b.代码
该代码直接进行位操作,对端口进行操作此处省略
/******************************************************
本程序可使stc89c52单片机开发板上的一个LED灯按一定频率闪烁
******************************************************/
#include <STC89C5xRC.H>
void main()
{
unsigned long int i;
while(1)
{ //直接进行位操作
P1=0x00; //点亮D1LED灯
for(i=10000;i!=0;i--); //空循环实现不精确延时
//也可以使用stc烧录软件生成较精准延时函数
P1=0xff; //熄灭LED灯
for(i=10000;i!=0;i--);
}
}
c.小结
闪烁的核心是一定LED按一定周期进行亮灭交替(可使用延时函数控制)
4)LED流水灯
a.思路
要实现LED流水灯,只要使单片机上LED轮流亮灭即可
b.代码
1)) 参照LED灯闪烁代码将每个LED灯亮灭单独写出(过于繁琐,此处省略)
2)) 使用位运算符(左移:<< ,右移:>>)
/********************************************************
本程序使用位运算符实现stc89c52单片机开发板上的流水灯
********************************************************/
#include <STC89C5xRC.H>
void main()
{
unsigned int i;
int temp=0x01; //0000 0001
while(1)
{
if(temp==0x80)temp=0x01; //使LED灯循环点亮
P1=~temp; //按位取反
temp=temp<<1; //temp左移一位
for(i=50000;i!=0;i--); //空循环实现延时
}
}
3)) 使用循环位移函数(左移函数_crol_(),右移函数_cror_())
/********************************************************
本程序使用循环位移函数实现stc89c52单片机开发板上的流水灯
********************************************************/
#include <STC89C5xRC.H>
#include <intrins.h> //包含循环位移函数_crol_()
void main()
{
unsigned int i;
int temp=0xfe; //1111 1110
while(1)
{
P1=temp;
temp=_crol_(temp,1); //temp循环左移一位
for(i=50000;i!=0;i--); //空循环实现延时
}
}
c.小结
条条大路通罗马,解决问题的方法有多个
5)独立按键控制LED灯亮灭
独立按键原理
当按键按下时,其对应端口电位变为低电平
提示:独立按键按下和抬起都会产生按键抖动一般在5~20ms,可能导致程序误判,可以使用延时函数避开按键抖动
a.思路:
当按键按下并抬起后改变指定LED灯的亮灭状态
b.代码:
在这里插入代码片
c.小结:
6)独立按键控制LED灯移动
7)独立按键控制LED灯二进制
总结
写完总结