C51/C52--led流水灯、静态数码管

目录

一、led流水灯(flowing water lamp)

二、静态数码管


一、led流水灯(flowing water lamp)

        我们在点亮一个led灯的基础上,对8个led灯按照某种特定的点亮规律进行操作,从而形成像水按顺序流动的效果。

        为了减少画图的时间,直接使用一个将10个led集成在一起的器件(LED-GROVE-BARGRAPH)这个器件(1-10)是阳极,(11-20)是阴极。反过来则无法点亮。

C51/C52--led流水灯、静态数码管_第1张图片C51/C52--led流水灯、静态数码管_第2张图片

上图为点亮效果(色彩丰富)。

接下来我们使用keil4来编写程序:

新建工程,选择芯片(直到芯片型号可以直接搜),然后点击OK。

C51/C52--led流水灯、静态数码管_第3张图片

 之后就会跳出一个对话框,这个的意思是说 “ 是否需要将STARTUP.A51这个文件复制进工程 ” ,我们这里编写的是普通的程序,就不需要啦。后期使用其他操作系统就可能需要了。

所以我们这里点击“否(N)”。

C51/C52--led流水灯、静态数码管_第4张图片

 记住,一定要创建main.c文件,不然你往哪里写程序。打开“魔术棒”选“Output”选项,勾选Create Hex File这个选项,不然就没有hex文件去给proteus使用了。

程序编写完成后直接烧入,效果就是从1-8依次点亮。(其实写流水灯的方法很多,只要按要求点亮指定的灯就可以了)。

C51/C52--led流水灯、静态数码管_第5张图片

 

//从上往下依次点亮
#include 
#include 

void delay(int a)
{
	int i;
	for(i=0;i
//这是从下往上循环依次点亮
#include 
#include 

void delay(int a)
{
	int i;
	for(i=0;i>i;
			delay(10000);
		}
	}
}

 如何实现像数据加载一步一步上升呢?如下所示(延时多次只是为了更好观察效果)

#include 
#include 

void delay(int a)
{
	int i;
	for(i=0;i>1;
			P1=~P1;
			delay(10000);
			delay(10000);
			delay(10000);
			delay(10000);
			delay(10000);
			P1=~P1;
		}
	}
}

二、静态数码管

        静态数码管(直接搜seg就可以找到),共阴共阳已标出。 

C51/C52--led流水灯、静态数码管_第6张图片

共阴编码:[0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,0x39,0x5e,0x79,0x71];  0~F

共阳编码:[0xc0, 0xf9, 0xa4, 0xb0,0x99,0x92,0x82,0xf8, 0x80 ,0x90 , 0x88,0x83,0xc6 ,0xa1,0x86,0x8e];  0~F

我们以上一个程序的图进行修改,这次使用的是P0口,P0口需要接一个上拉电阻。

由于P0口在做输入输出是,输出低电平的时候是没有问题的。

但是,在输出高电平时,输出的高电平为高阻态,不能称为正真意义上的高电平,所以需要外接一个上拉电阻,提高P0口的输出电流。

电路如下图所示(显示结果如下图):

C51/C52--led流水灯、静态数码管_第7张图片 

#include 
#include 

char code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c,0x39,0x5e,0x79,0x71};

void delay(int a)
{
	int i;
	for(i=0;i

你可能感兴趣的:(c51/c52单片机,单片机)