|
STC学习笔记1-简易呼吸灯的制作
介绍:只需要三个元件做一个简易的呼吸灯,可以随意调整呼吸的时间和呼/吸时间比。
比模拟电路搭的呼吸灯简洁并且成本低很多,但是可控性绝对比模拟电路制作的好。
材料:
STC15F104E单片机一片
100Ω电阻一个
LED一个,颜色随意
还有必备的一个STC单片机程序下载器,这个可以参考官网的MAX232串口下载器
或者购买的成品USB下载线。
需要引出四个引脚VCC,TX,RX,GND即可。
电路原理图:
其中P3.0和P3.1接下载线下载。虽然可以在工作状态下载,不过避免干扰,我们尽量少使用P3.0和P3.1引脚。
编写以下程序:
有两个版本,一个是单纯的渐亮渐灭;第二个是亮灭时间比不同的,更接近实际的呼吸曲线。
版本1,渐亮渐灭时间一样,但是肉眼看上去效果不好:
[pre lang="cpp" line="1"]#include <REG51.h>
sbit Pin = P3 ^ 3;
int bright = 0;
void Delay10us(unsigned int a)
{
unsigned int i;
while( a-- != 0)
{
for(i = 0; i < 6; i++) {};
}
}
main()
{
int i;
bit mark=0;
while(1)
{
if(bright == 255||bright==0) mark=!mark;
(mark==1)?(bright++):(bright--);
for(i = 0; i < 255; i++)
{
if(i < bright)
{
Pin = 0;
Delay10us(2);
}
else
{
Pin = 1;
Delay10us(2);
}
}
}
}[/code]
版本2,渐亮渐灭时间不一致,但是视觉效果比较好(亮灭时间比9:4,灭到尽的时候等待500ms。):
[pre lang="cpp" line="1"]/*
STC15F104E 呼吸灯
时钟频率5.004MHz
灯在P3.3引脚
By:Ansifa 2012-1-25
*/
#include <REG51.h>
sbit Pin = P3 ^ 3;
void Delay(unsigned int a)
{
while( a-- != 0)
{
}
}
void Delay2(unsigned long a)
{
while( a-- != 0)
{
}
}
main()
{
int i, delaytime;
bit mark = 0;
int bright = 0;
while(1)
{
if(bright == 0) Delay2(50000);
if(bright == 255 || bright == 0) mark = !mark;
if(mark == 1)
{
bright++;
delaytime = 9;
}
else
{
bright--;
delaytime = 4;
}
for(i = 0; i < 255; i++)
{
if(i < bright)
{
Pin = 0;
Delay(delaytime);
}
else
{
Pin = 1;
Delay(delaytime);
}
}
}
}[/code]
上述程序Keil uVersion2工程文件:
(keil下载地址:http://www.doyoung.net/DOC/KeilC51uV2_PS.zip)
用Keil uVersion2编辑编译。
用STC-ISP下载程序下载程序。
STCISP下载地址:
http://www.stcmcu.com/datasheet/ ... -isp-15xx-v6.07.exe
注意,是先按STC-ISP软件上的按钮,然后关闭单片机电源,再打开,才能进行开始下载:
如果使用USB下载线下载,但是软件一直卡死在等待连接单片机的话,先检查TX,RX有没接反。还有单片机有没电源。
然后降低下载软件波特率:“最低波特率”=1200和“最高波特率”=1200,一般就能下载,如果不行的话,要考虑换一个下载线。
上图的MAX232串口下载线是最稳定的。在任何速率都能使用。
效果视频:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|