LED的点亮
- 观察原理图,看LED所连接的io口
- 观察LED的连接方式(共阴or共阳),确定高低电平点亮方式(高or低)
< 图示为蓝桥杯比赛用板的LED部分原理图 >
LED闪烁
-
实现原理:给io口赋高低电平控制LED的开关
-
软件延时函数:使用STC软件生成,存在误差
-
软件延时方法
- STC-isp 软件
- 软件延时计算器
- 选择参数,设定定时时长
-
自定义延迟函数:
- 先设置一个1ms的延迟函数
- 将第一行括号里的viod 改成uint型字符
- 将while(x–)加在nop前一行
- 将while(x–)后面的全都缩进到这里边
void Delay(unsigned int x) //@11.0592MHz { unsigned char data i, j; while(x--) { _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } }
-
程序思路:
- 对P0口整体赋值控制所有LED
- 对P0中的8个io口单独赋值,控制单独的LED
-
程序实例:
前置代码
#include <STC15F2K60S2.H> //头文件引用 #include "HC138.h" //HC138编码器头文件 #include <intrins.H> /*************变量声明区*************/ unsigned char LED=0xfe;//LED数据变量1111 1110 (流水灯方式二需要此声明) void Delay500ms(void) //500ms的延时函数 { unsigned char data i, j, k; i = 22; j = 3; k = 227; do { do { while (--k); } while (--j); } while (--i); }
方式一
void main() //主函数
{
HC138(4);
while(1)
{
P0=0xff;//1111 1111 全灭
Delay500ms();
P0=0x00;//0000 0000 全亮
Delay500ms();
}
}
方式二
void main() //主函数
{
HC138(4);
while(1)
{
P00=1;//P00高电平 L1灭
Delay500ms();
P00=0;//P00低电平 L1亮
Delay500ms();
}
}
LED流水灯
- 实现原理:给P0口不断变换的高低电平,从而达到LED流水灯的效果
- 程序思路:
- 给P0直接赋不同的值,从而达到流水灯的效果
- 通过内置的库函数实现流水灯效果
_crol_ 循环左移 _crol_(对象,位数) _cror_ 循环右移 注: _crol_为一个值,需要把这个值赋给一个变量 所属库: intrins.h
- 程序实例:
方式一:
void main()
{
HC138(4);
while(1)
{
P0=0x7f; //0111 1111
Delay(500);
P0=0xbf; //1011 1111
Delay(500);
P0=0xdf; //1101 1111
Delay(500);
P0=0xef; //1110 1111
Delay(500);
P0=0xf7; //1111 0111
Delay(500);
P0=0xfb; //1111 1011
Delay(500);
P0=0xfd; //1111 1101
Delay(500);
P0=0xfe; //1111 1110
Delay(500);
}
}
方式二:(注:使用本方式时需要提前声明变量LED)
void main()
{
HC138(4);
while(1)
{
P0=LED;//将LED的值赋给P0
Delay(500);//延时500ms
LED=_crol_(LED,1);//将LED的数据进行左移一位的操作
}
}