首页 > 代码库 > 51单片机第一弹---流水灯

51单片机第一弹---流水灯

转行搞硬件。。acm算是走到头了,毕竟电子是自己专业的特色。。

初撸单片机,买的板子是STC89C52(某宝58大洋淘来的。。) 郭天祥新概念的那本书(好像有点不配套不过凑活着弄了也。。)

说一下容易犯的错误吧。

1.串口驱动搞了1个多小时。。一直安装不上,后来跟着教程做的

2.书上写的控制LED端口的是P1 ,但实际上买的这快板子是P2 ,最开始搞了半天老是点不亮灯,后来一想会不会端口错了,换成0试试?换了不行,又换了2.。亮了(这是个问题,以后要找学长问问,怎么根据开发板看出来每个模块的端口?我找了一会也没找到。。)

3.工程式的代码敲起来有点不太习惯。。而且吐槽一下Keil 4 ,没缩进还能不能愉快的玩耍了。。

内容:

  一:LED工作原理

       贴张原理图。。

            技术分享

最开始看书上讲的原理很抽象。。这张图不错,很清楚

二:代码实现流水灯

基本思路:初始化状态为1111 1110 即只有最左边的灯亮,然后间隔性的往右移动0,(用到位移函数_crol_(a,b)  将a左移b位,循环左移并非像<< 运算似的最低位补0,右移自己脑补) 用到延时函数。。其实就是用循环卡住,大约O(24700000)==10ms 

 

#include<reg52.h>
#include<intrins.h>
#define GPIO_LED P2
#define uint unsigned int
#define uchar unsigned char
void Delay10ms(uchar n);
void main()
{
	uchar i;
	GPIO_LED=0xfe;//1111_1110
	while(1)
    {
		for(i=0;i<7;i++)
		{
			GPIO_LED=_crol_(GPIO_LED,1);
			Delay10ms(1);
		}
		for(i=0;i<7;i++)
		{
			GPIO_LED=_cror_(GPIO_LED,1);
			Delay10ms(1);
		}
    }
}
void Delay10ms(uchar n)
{
	uchar i,j,k;
	while(n--)
	{
	    i=50;
		while(i--)
		{
		    j=38;
			while(j--)
			{
			    k=130;
				while(k--);
			}
		}
	}
}

51单片机第一弹---流水灯