第一个LED灯

第一个LED

话不多说放效果图

实现了流水灯效果(D2常亮应该是板子问题导致的)

原理图

HC6800-MS原理图(带引脚号)

image-20211016105234641

电阻用于限流,防止电流过大烧毁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文件

image-20211016110649646

如果F7无法生成HEX文件,就需要在 KEIL 5 里面设置一下输出目标文件。

正在检测目标单片机

image-20211016112201055

这个问题,重启两次单片机应该可以解决。

通过软件模拟延时

image-20211016114745447

image-20211016114437255

需要包含_nop()的定义

在 INTRINS.H 文件

image-20211016115007773

posted @ 2021-10-16 23:40  lucky_doog  阅读(147)  评论(0编辑  收藏  举报