第一个LED
话不多说放效果图
实现了流水灯效果(D2常亮应该是板子问题导致的)
原理图
电阻用于限流,防止电流过大烧毁LED
LED正极已经接到 VCC(高电平) 了
现在只要 LED 的负极接低电平就可以产生电流了
共阳极电路
代码
流水灯需要不断改变寄存器P2,让低电平的位不断游走。
核心代码
while(1)
{
curr = (curr << 1) > 0 ? (curr<<1) : 1;
P2 = ~curr;
Delay1000ms();
}
完整代码:
#include <REGX52.H>
#include <INTRINS.H>
void Delay1000ms(); //@12.000MHz
void main(void)
{
unsigned char curr;
P2 = 0;
curr = 1;
while(1)
{
curr = (curr << 1) > 0 ? (curr<<1) : 1;
P2 = ~curr;
Delay1000ms();
}
}
void Delay1000ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 154;
k = 122;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
警告
*** WARNING L10: CANNOT DETERMINE ROOT SEGMENT
这个警告是由于缺少main()函数
输出HEX文件
如果F7无法生成HEX文件,就需要在 KEIL 5 里面设置一下输出目标文件。
正在检测目标单片机
这个问题,重启两次单片机应该可以解决。
通过软件模拟延时
需要包含_nop()的定义
在 INTRINS.H 文件