- 积分
- 207
- 在线时间
- 238 小时
- 最后登录
- 2012-8-17
- 阅读权限
- 50
- 精华
- 0

- UID
- 327390
- 帖子
- 142
- 精华
- 0
- 经验
- 207 点
- 金钱
- 152 ¥
- 注册时间
- 2011-5-1
|

楼主 |
发表于 2011-8-20 13:43
|
显示全部楼层
帮楼主编辑一下
本帖最后由 ahao 于 2011-8-22 15:18 编辑
在这里向大家道个歉,下面呼吸灯程序我试了一下,亮是可以亮,但是在渐变过程中有闪烁,程序是有漏洞的,再此向大家道歉,我重新发一个呼吸灯的程序。如果大家觉得LED亮度太亮的话可以加个电阻。新程序在下一页http://bbs.hifidiy.net/redirect. ... 86&pid=13099273
好了,看大家也期待久了,我们现在开始!开始制作我们第一个作品 — 呼吸灯!
昨天我发了硬件电路图,这次我们使用的单片机是STC15F系列的单片机(建议看看数据手册,STC官方网址:www.stcmcu.com),我用的是STC15F104E,为什么选他呢?原因有二:
1.他体积小
2.有精准的内部RC时钟,不再需要接晶振
好了我们不废话,来看看在软件上如何编程把。
一般来说C语言的编程格式如下:
头文件定义
接口定义
函数/模块定义
主程序
我们就按照这种格式,写我们的第一个程序。
首先是头文件,因为呼吸灯不需要用到增强型8051CPU的功能,所以直接使用传统的8051头文件就好了。
#include <reg52.h>
接下来是接口定义,因为STC15F104E只有P3的接口,而且我们只接了1个LED,我连接的是P3.4口(可以根据自己的喜欢任意定义),所以程序就应该这样写:
sbit LED = P3 ^ 4;
接下来是延时函数,在这里我们不用自己写,直接从前面复制过来就行了(建议大家建立一个txt文件,将一些编程的语句放到里面,需要的时候直接复制过来用)。
void DELAY (unsigned int a){
unsigned int i;
while( --a != 0){
for(i = 0; i < 600; i++);
}
}
下面是主函数,进入重点了,我之前提醒大家,用for循环可以写出来,下面是他的程序,先自己看看,然后我在带大家一条一条理解。
void main (void){
while(1){
unsigned int a;
LED = 1;
for(a=1;a<100;a++){
LED = 0;
DELAY(a);
LED = 1;
DELAY(100-a);
}
for(a=99;a>0;a--){
LED = 0;
DELAY(a);
LED = 1;
DELAY(100-a);
}
}
}
好了,这就是全部的程序,可能做出的效果不太好,因为大家目前的水平只能写出这样的程序了(大家别打我。。。 ),下面我来带大家解读。
首先主函数开始,while循环为真,无限循环下面的程序,定义一个变量a,首先拉高LED的电平,LED状态为熄灭。进入for循环,拉低LED的电平,LED点亮,a不断加1,延时的时间从1一直到99,由于人眼睛的判断无法达到毫秒级,所以看起来是从暗到亮,之后的for循环语句与上面的for循环语句相反,实现从亮到暗的过程。因为while语句,亮暗交替得到无限循环,程序就完成了。
用keil产生hex文件,同过STC-ISP软件和MAX232下载电路下载到单片机里,看看效果吧!
下面是完整的程序包。
呼吸灯.rar
(16.98 KB, 下载次数: 188)
|
|