STC学习笔记1-简易呼吸灯的制作视频:
[media]http://player.youku.com/player.php/sid/XMzU0MzI1NzQ0/v.swf[/media]
介绍:只需要三个元件做一个简易的呼吸灯,可以随意调整呼吸的时间和呼/吸时间比。
比模拟电路搭的呼吸灯简洁并且成本低很多,但是可控性绝对比模拟电路制作的好。
材料:
STC15F104E单片机一片
100Ω电阻一个
LED一个,颜色随意
还有必备的一个STC单片机程序下载器,这个可以参考官网的MAX232串口下载器
或者购买的成品USB下载线。
需要引出四个引脚VCC,TX,RX,GND即可。
电路原理图:
其中P3.0和P3.1接下载线下载。虽然可以在工作状态下载,不过避免干扰,我们尽量少使用P3.0和P3.1引脚。
编写以下程序:
有两个版本,一个是单纯的渐亮渐灭;第二个是亮灭时间比不同的,更接近实际的呼吸曲线。
版本1,渐亮渐灭时间一样,但是肉眼看上去效果不好:
代码:
- #include
- 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);
- }
- }
- }
- }
版本2,渐亮渐灭时间不一致,但是视觉效果比较好(亮灭时间比9:4,灭到尽的时候等待500ms。):
代码:
- /*
- STC15F104E 呼吸灯
- 时钟频率5.004MHz
- 灯在P3.3引脚
- By:Ansifa 2012-1-25
- */
- #include
- 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);
- }
- }
- }
- }
用Keil uVersion2编辑编译。
用STC-ISP下载程序下载程序。
注意,是先按STC-ISP软件上的按钮,然后关闭单片机电源,再打开,才能进行开始下载:
如果使用USB下载线下载,但是软件一直卡死在等待连接单片机的话,先检查TX,RX有没接反。还有单片机有没电源。
然后降低下载软件波特率:“最低波特率”=1200和“最高波特率”=1200,一般就能下载,如果不行的话,要考虑换一个下载线。
上图的MAX232串口下载线是最稳定的。在任何速率都能使用。