1

主题

0

好友

53

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
142434
帖子
55
精华
0
经验
53 点
金钱
53 ¥
注册时间
2009-10-25
发表于 2011-8-19 10:08 | 显示全部楼层
回复 114# tsyg99


    呵呵。楼主辛苦了。在论坛里普及一下单片机技术。

67

主题

0

好友

2169

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
44250
帖子
4956
精华
0
经验
2169 点
金钱
2151 ¥
注册时间
2008-5-28
发表于 2011-8-19 10:09 | 显示全部楼层
我帮楼主传吧

41

主题

0

好友

397

积分

业余侠客 当前离线

Rank: 4

UID
251728
帖子
846
精华
0
经验
397 点
金钱
378 ¥
注册时间
2010-10-18
发表于 2011-8-19 12:02 | 显示全部楼层
楼主很强大 小弟无限膜拜

1

主题

0

好友

43

积分

注册会员 当前离线

Rank: 2

UID
24580
帖子
42
精华
0
经验
43 点
金钱
43 ¥
注册时间
2007-7-12
发表于 2011-8-19 13:02 | 显示全部楼层
谢谢,languifan

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

UID
327390
帖子
142
精华
0
经验
207 点
金钱
152 ¥
注册时间
2011-5-1
 楼主| 发表于 2011-8-19 13:16 | 显示全部楼层
好了,今天是我们讲编程语句的最后一课了,今天我们讲的是switch语句和do while语句。

switch语句是为了多项判断而产生的,在switch语句中,没有表达式的真假判断,而是将表达式中的值与case后面的值做比对,如果相同则执行此行case下面的语句。
在一些运用switch语句的程序里,每个case语句结束的地方都会有break语句,这是做什么用的呢?break语句并非switch语句专用的,他的意思是跳出当前的函数体,它可以用在C语言的任何地方,不过非常谨慎,因为不顾一切的跳出当前的函数体,可能会对变量、返回值和堆栈有一定影响,不到万不得已,尽量别用。
在switch语句中,执行程序只会从与表达式相同的case值的下一行开始,但没有规定在哪里结束。这就麻烦了,就行开车踩下了油门才发现没有刹车,程序会执行case下面的所有程序,不会在判断任何东西,一直飙到switch语句的末尾。break语句的用途就是在执行完一个case下面的程序时及时退出。当然,你也可以删除break语句,让它一路狂飙,因为某些场合的确有这样的案例。

switch语句在我的程序里很少用到,所以我们讲的不多。下面是他的表达方法:

switch(表达式){case:语句1;case:语句2;}
注:case后面的语句可以有无限个

加入break语句的表达方法:

switch(表达式){case:语句1;break;case:语句2;break;}

下面来介绍下do while语句。
说真的从学会他开始我从来没用过他,或许是我才疏学浅吧。

do while语句与while语句很相似,唯一不同的就是do while先执行程序再判断表达式,表达式为“真”则继续循环,为“假”则退出,但至少会执行一次{}的程序。

do {语句1;语句2;}while (表达式)

以上两种语句大家希望深入学习的可以去百度相关资料,在这里我就不举例子了。
好了,我们学会了五种编程语句,明天我们将讲讲用一个8脚单片机和N个LED制作呼吸灯的全过程,包括硬件电路连接、软件程序设计。敬请期待哦~

如果你有兴趣,请准备一下元件:
STC15F104E单片机     1片                                    大约4元
LED                      按照自己的喜号选择数量和颜色     大约0.5元

67

主题

0

好友

2169

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
44250
帖子
4956
精华
0
经验
2169 点
金钱
2151 ¥
注册时间
2008-5-28
发表于 2011-8-19 13:40 | 显示全部楼层
期待中。

41

主题

0

好友

1454

积分

侠之大者 当前离线

Rank: 6Rank: 6

UID
12335
帖子
1890
精华
0
经验
1454 点
金钱
1091 ¥
注册时间
2006-9-14
发表于 2011-8-19 13:51 | 显示全部楼层
路过,学习

15

主题

0

好友

447

积分

业余侠客 当前离线

猪头

Rank: 4

UID
7226
帖子
228
精华
0
经验
447 点
金钱
21 ¥
注册时间
2006-1-13
发表于 2011-8-19 13:55 | 显示全部楼层
要顶

15

主题

0

好友

447

积分

业余侠客 当前离线

猪头

Rank: 4

UID
7226
帖子
228
精华
0
经验
447 点
金钱
21 ¥
注册时间
2006-1-13
发表于 2011-8-19 13:57 | 显示全部楼层
用权限的老大们,想这种开个专贴嘛!全编辑到一起存服务器好下载

0

主题

0

好友

128

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
133403
帖子
161
精华
0
经验
128 点
金钱
128 ¥
注册时间
2009-9-19
发表于 2011-8-19 16:37 | 显示全部楼层
期待中

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

UID
327390
帖子
142
精华
0
经验
207 点
金钱
152 ¥
注册时间
2011-5-1
 楼主| 发表于 2011-8-19 18:25 | 显示全部楼层
哈哈,先来吊下大家胃口,呼吸灯的原理图(自己想想能不能根据前面讲的语句自己先试试?提示:使用for循环):
QQ截图未命名.jpg
怎么样,简单吧?不要猜测,就是这么简单。
心动的话敬请期待哦~

3

主题

0

好友

1495

积分

侠之大者 当前离线

Rank: 6Rank: 6

UID
75623
帖子
1547
精华
0
经验
1495 点
金钱
1510 ¥
注册时间
2009-1-18
发表于 2011-8-19 18:46 | 显示全部楼层
好帖收藏了

62

主题

0

好友

296

积分

业余侠客 当前离线

Rank: 4

UID
297749
帖子
760
精华
0
经验
296 点
金钱
296 ¥
注册时间
2011-2-28
发表于 2011-8-19 20:10 | 显示全部楼层
回复 130# 591534671


    不好意思,看错了。

43

主题

2

好友

829

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
9077
帖子
776
精华
0
经验
829 点
金钱
742 ¥
注册时间
2006-5-2
发表于 2011-8-20 11:20 | 显示全部楼层
好帖,赞!
51框架单片机,其实用什么具体型号IC并不重要,重要的是要有一个优良的基本程序框架,再有几个控制程序就好下手了。否则,自己慢慢搞比较难,调试通也不见得好用。拿来主义最适合DIYER,有兴趣的可以去网上找,各种程序很多。
与音响有关的无非是:
显示程序(比较容易做,好坏也不会影响性能,网上很多程序)。
遥控程序(好坏绝对影响性能,最好用厂家的,网上好程序很少)。
旋转编码器(容易做,网上很多程序)。
键盘程序(容易做)。
时钟控制(容易做)。
专用控制程序,这个一般最好用厂家提供的基本程序模块改。

6

主题

0

好友

186

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
199770
帖子
731
精华
0
经验
186 点
金钱
185 ¥
注册时间
2010-5-10
发表于 2011-8-20 11:22 | 显示全部楼层
哈哈,单片机好玩

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

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)

36

主题

4

好友

536

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
127879
帖子
724
精华
0
经验
536 点
金钱
490 ¥
注册时间
2009-8-28
发表于 2011-8-21 17:44 | 显示全部楼层
正在学习,太谢谢了.

119

主题

2

好友

898

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
41985
帖子
2298
精华
0
经验
898 点
金钱
850 ¥
注册时间
2008-5-1
发表于 2011-8-21 20:53 | 显示全部楼层

119

主题

2

好友

898

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
41985
帖子
2298
精华
0
经验
898 点
金钱
850 ¥
注册时间
2008-5-1
发表于 2011-8-22 10:01 | 显示全部楼层
MAX232做的编程下载器电路图不太清晰,看不到那几个电容以及电源和接地是怎么接的,能搞张清晰的吗?

348

主题

2

好友

1001

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
2176
帖子
1438
精华
0
经验
1001 点
金钱
474 ¥
注册时间
2004-11-18
发表于 2011-8-22 10:45 | 显示全部楼层
支持一下LZ
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部