在开始之前,先推荐一个十分有用的工具:LED代码段生成器,可自己随意修改,下面是图下面进入正题:
光源闪烁就是光源发出的光随时间呈快速、重复的变化,使得光源跳动和不稳定。当然人的肉眼并不能很容易地觉察到光源的闪
烁,这主要取决于闪烁的频率。一般地,在闪烁频率50Hz以下,人眼都能觉察到光源的闪烁。而在8.8Hz时,人眼是最敏感的。同时,能被觉察的最大闪烁 频率(临界闪烁频率)是随着光源发出的光强而变化的,随着光强增大临界闪烁频率也增大,当光强达到最大后逐渐减小后,临界闪烁频率也相应减小。当光强以大
于50Hz的频率变化时,大多数人就分辨不出光源是否在闪烁了,此时的光源就发出稳定、连续的光,因为这时人眼的反映已经跟不上光源的变化了。例如,人眼
就觉察不到每秒100次闪烁(100Hz)的荧光灯的闪烁现象。(以上是引用)
本人在做实验过程中,测最长时间2ms左右,即延时的最长时间不要大于2ms;
下面是本人修正的LED扫描程序:
/******************************************************/
#include<reg52.h>
#include"mytime.c" //自定义函数
#define uchar unsigned char;
int LED[4]={1,2,3,4}; //4位数码管显示数字
int counter=0;
uchar Table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳段段值(可由上面介绍的工具得到)
uchar Scan[5]={0x70,0xb0,0xd0,0xe0,0xf0}; //位段
extern void display();
void main()
{
while(1)
{
display();
}
}
/*********************************************/
void display()
{
int i;
for(i=0;i<4;i++)
{
P2=Scan[4]; //防止上次的P0与这次的P2相结合
P0=Table[LED];
P2=Scan;
delay_10us(500);
}
}
/****************************结束******************************/
本人还发现上面的delay_10us可以不要,但前提是在有P2=Scan[4]这条语句,否则会显示有问题,
附件:LED工具
https://static.assets-stash.eet-china.com/album/old-resources/2009/9/11/e621b0f6-f456-4f30-aa31-cfd6073f4bde.rar
关闭
站长推荐
/3
tengjingshu_112148725 2009-9-11 09:14