|
最近公司忙,没时间玩,搞了两个小玩意:
1,ULN2003驱动继电器(上位机VC,下位机51)
上位机:
下位机,单片机部分:
下位机,ULN2003继电器部分:
亮灯:
灭灯:
继电器使用HUIKE4100F,动触点250v,3A,可以驱动用来控制大部分家用电器。也就是说此电路稍加改造就可以用作
控制家用电器。实时上,很多家用电器就是用ULN2003控制继电器实现自动控制的。
2,8X8LED点阵
效果如图:
LED点阵最忌讳亮度不均匀,本例以驱动扫描单个LED实现亮度一致。
LED点阵最常用的驱动方式是按列扫描,代码如下:
unsigned char code scanx[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char code scany2[]={0xff,0x81,0x42,0x42,0x81,0x42,0x42,0x81};
void main()
{
xFlag=0;
yFlag=0;
TMOD=0x01;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
EA=1;
ET0=1;
TR0=1;
P0=0x00;
wei=1;
wei=0;
while(1)
{
P0=scanx[xFlag];
P1=scany[yFlag];
}
}
辅以定时器控制xFLAG、yFlag两个参数以控制扫描。
由于没列要点亮的LED个数不同,所以不同列的LED亮度不一致。
为了实现亮度一致,使每次只扫描一个LED,亮度一致性好,代码:
unsigned char xFlag,yFlag;
unsigned char code scanx[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
sbit wei=P2^7;
unsigned char code scany[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xff,
0xff,0xbf,0xff,0xff,0xff,0xff,0xfd,0xff,
0xff,0xbf,0xff,0xff,0xff,0xff,0xfd,0xff,
0xff,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xff,
0xff,0xbf,0xff,0xff,0xff,0xff,0xfd,0xff,
0xff,0xbf,0xff,0xff,0xff,0xff,0xfd,0xff,
0xff,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xff};
void main()
{
xFlag=0;
yFlag=0;
TMOD=0x01;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
EA=1;
ET0=1;
TR0=1;
P0=0x00;
wei=1;
wei=0;
while(1)
{
P0=scanx[xFlag];
P1=scany[yFlag];
}
}
辅以定时器控制xFLAG、yFlag两个参数以控制扫描。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|