- 发光二极管
- Light Emitting Diode
- 简称LED
- 用途:照明、屏幕等
点亮一个LED灯
*
- 由于keli里面没有收录国产芯片stc89c52,这款at89c52实际与stc89c52没有区别
#include <REGX52.H>
void main()
{
P2=0xfe;//1111 1110
}
- 进制转换
LED闪烁
#include <REGX52.H>
#include<intrins.h>
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
_nop_();
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
while(1)
{
P2=0xfe;//1111 1110
Delay1ms(500);
P2=0xff;//1111 1111
Delay1ms(500);
}
}
单片机延时问题
非精准延时
- for(i=0;i<100;i++);
for(初始化;逻辑表达式;更改条件)
{
循环体;
}
先执行初始化
再判断逻辑表达式
若成立则执行循环体
执行后更改条件
再判断逻辑表达式
直到表达式不成立
unsigned int x,i;
for(i=0;i<100;i++);
{
x=i+1;
}
- i=100;while(i- -);
while(逻辑表达式)
{
循环体;
}
如果逻辑表达式成立
执行循环体
执行后再次判断
若还成立则继续执行直到表达式不成立
unsigned int x,i=100;
while(i--)
{
x=i+1;
}
- C51数据类型
精准延时
- 利用库函数nod_();
需要先定义头文件为#include<intrins.h>
#include<intrins.h>
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
xms--;//xms=xms-1
_nod_();
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
LED流水灯
#include<REGX52.H>
#include<intrins.h>
void Delay1ms(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
xms--;//xms=xms-1
_nod_();
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main()
{
while(1)
{
P2=0xfe;//1111 1110
Delay1ms(500);//延时500ms,周期为1s
P2=0xfd;//1111 1101
Delay1ms(500);
P2=0xfb;//1111 1011
Delay1ms(500);
P2=0xf7;//1111 0111
Delay1ms(500);
P2=0xef;
Delay1ms(500);
P2=0xdf;
Delay1ms(500);
P2=0xbf;
Delay1ms(500);
P2=7f;
Delay1ms(500);
}
}