15

主题

1

好友

2077

积分
     

罗宾汉 当前离线

新兴穷烧

Rank: 7Rank: 7Rank: 7

UID
23681
帖子
3766
精华
0
经验
2077 点
金钱
2968 ¥
注册时间
2007-6-15
发表于 2011-8-13 01:44 | 显示全部楼层
有来烦人的单片鸡.以前在学校的时候还会弄几下,现在基本都是它弄我几天都不行,郁闷

157

主题

0

好友

1039

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
16006
帖子
2474
精华
2
经验
1039 点
金钱
840 ¥
注册时间
2006-12-15
发表于 2011-8-13 07:01 | 显示全部楼层
每日一顶,此贴毕火,LZ加油

200

主题

2

好友

486

积分

业余侠客 当前离线

Rank: 4

UID
134888
帖子
4212
精华
0
经验
486 点
金钱
427 ¥
注册时间
2009-9-25
发表于 2011-8-13 07:43 | 显示全部楼层
STC的还可以吧,够便宜,可惜我也没学会编程公司有用过STC的芯片,量不大,不过服务态度还不错(因为那业务员是认识的一位工程的老婆)。

0

主题

0

好友

11

积分

注册会员 当前离线

Rank: 2

UID
335682
帖子
11
精华
0
经验
11 点
金钱
11 ¥
注册时间
2011-5-17
发表于 2011-8-13 09:13 | 显示全部楼层
要支持一下
头像被屏蔽

47

主题

0

好友

671

积分

禁止发言 当前离线

视听爱好者

UID
291241
帖子
2995
精华
0
经验
671 点
金钱
655 ¥
注册时间
2011-2-12
发表于 2011-8-13 11:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

UID
327390
帖子
142
精华
0
经验
207 点
金钱
152 ¥
注册时间
2011-5-1
 楼主| 发表于 2011-8-13 12:49 | 显示全部楼层
硬件部分到此结束,下面我们要开始玩编程了,欢迎老师们指点的批评。
—————————————————————————分割线——————————————————————————

144

主题

2

好友

1524

积分

侠之大者 当前离线

穷烧

Rank: 6Rank: 6

UID
60100
帖子
3458
精华
0
经验
1524 点
金钱
1404 ¥
注册时间
2008-10-24
发表于 2011-8-13 13:25 | 显示全部楼层
先顶了,再慢慢看

144

主题

2

好友

1524

积分

侠之大者 当前离线

穷烧

Rank: 6Rank: 6

UID
60100
帖子
3458
精华
0
经验
1524 点
金钱
1404 ¥
注册时间
2008-10-24
发表于 2011-8-13 13:26 | 显示全部楼层
那请问这种单片机哪里有卖呢

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

UID
327390
帖子
142
精华
0
经验
207 点
金钱
152 ¥
注册时间
2011-5-1
 楼主| 发表于 2011-8-13 13:36 | 显示全部楼层
本帖最后由 591534671 于 2011-8-13 13:38 编辑

学习编程之前,我们先来了解一下单片机世界的语言。
单片机与我们不同,它们交流的语言是机械语言。还记得我们第一个LED闪灯的小实验吗?下面是hex文件里的全部内容。
:10000300EF1F70011E144E600BE4FDEDC3947D5091
:04001300EF0D80F776
:0100170022C6
:0B002400B2977FFA7E0012000380F507
:03000000020018E3
:0C001800787FE4F6D8FD75810702002413
:00000001FF
看不懂对吧?什么乱七八糟的?其实我也不知道他是什么意思。这种机械语言是单片机刚开始出现的时候使用的,现在早已经不在由人工编写了,都是用一些编译器编译而来。什么是编译?说白了就是翻译,将我们人类看得懂的语言翻译为单片机看得懂的语言,这就是编译器的作用。接下来我们会重点讲编译器Keil的使用。
编程时我们大多数都是用汇编语言和C语言,在这里我们只讲解C语言,因为。。。我没学汇编- - ,想学习的朋友可以找相关的资料。
好了,我们来看一段完整的C语言程序。

#include <AT89X52.h>
sbit LED    =   P1 ^ 7;               

void Delay (unsigned int a){                               
        unsigned int i;
                 while( --a != 0){                               
                for(i = 0; i < 600; i++);       
                }
}

void main (void){               
        while(1){                       
                LED = ~LED;               
                Delay(250);               
        }                                       
}

这是我们第一个闪灯实验的完整程序,看不懂没关系,我给你一条一条讲解。
#include <AT89X52.h>   定义头文件,意思是说我们要使用“AT89X52.h”这个头文件。什么是头文件?就是这款或是这类单片机的属性,里面包含SFR地址定义等等。什么是SFR?不知道没关系,我们到后面会重点说明。敬请待续。。。

sbit LED    =   P1 ^ 7;     定义LED接口。意思是用“LED”这个自定义名称代替"1 ^ 7"这个接口。这条语句说明我们接了一个LED在 P 1.7(。。。那个笑的符号是英文字母P,怎么会这样= =)接口上,“sbit”后面可以自己定义任何名称,但是不能写中文。

void Delay (unsigned int a){                               
        unsigned int i;
                 while( --a != 0){                               
                for(i = 0; i < 600; i++);       
                }
}
这是一段毫秒级的延时程序,这一段程序是让单片机什么也不做,说白了就是浪费时间- -因为单片机的速度是毫秒级的,如果我们不延时,我们的眼睛就不能看见LED在闪烁了。至于每条语句是什么意思,我们后面会讲到,这涉及for循环语句和一些变量定义,讲过后再回来看看,自然能理解。

void main (void){               
        while(1){                       
                LED = ~LED;               
                Delay(250);               
        }                                       
}

这一段是主函数,所有的C语言程序都必须有主函数,他以“void main (void){”开始。
while(1){ 的意思是无限循环下面的程序。如果我们不加这句,那么LED闪一下就结束了。
LED = ~LED; 的意思是把LED的值取反,取反符号为“~”,意思是当高电平时变为低电平,如果我们用1表示高电平,0表示低电平,那么取反就是将1变为0,将0变为1。
Delay(250); 的意思是调用上面的延时程序,意思是说亮250毫秒,熄灭250毫秒,括号内的数据可以任意修改,范围为0-65535。

一段程序分析完了,我们发现,有些语句用“{}”号为开始和结束之外的语句,例如“LED = ~LED;”“Delay(250);“在每条语句结束时,都有一个分号。这是为什么呢?原来,C语言规定,任何单独的语句必须用表示结束(头文件定义除外)。在编程中,我们可以使用“//”这个符号来屏蔽不需要的信息,或写注释信息。在这两个斜杠后面可以写中文,“//”之后的句子不会被编译器编译,范围为一行。例如:
sbit LED    =   P1 ^ 7;  //定义LED
如果需要大面积屏蔽或注释的话可以使用这个符号 /* */,例如:
/*
XXXXXX
XXXXXXXX
XXXXXXXX
XXXXX
XX
*/
范围无限制,由符号规定范围。

在这里我想说,编程没有硬件实验那么有趣,也没有漂亮的图片,都是枯燥的语句和定义,但是我希望大家不要觉得麻烦就不看了。而且我还想说,我们是“玩”单片机,而不是“学”单片机,我们是为“玩”而学,要能玩,要会玩。请抱着玩的心态来“学”。

下次我们会讲编译器Keil的使用。待续。。。

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

UID
327390
帖子
142
精华
0
经验
207 点
金钱
152 ¥
注册时间
2011-5-1
 楼主| 发表于 2011-8-13 13:43 | 显示全部楼层
回复 48# 拖把


    淘宝一定有,电子市场应该有的,我在STC官方销售那买5元一片,如果是同城实在没有的话我送你一片。

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

UID
327390
帖子
142
精华
0
经验
207 点
金钱
152 ¥
注册时间
2011-5-1
 楼主| 发表于 2011-8-13 14:27 | 显示全部楼层
本帖最后由 591534671 于 2011-8-13 14:37 编辑

这次我们来讲讲Keil的使用。我使用的是最新的keil 4(只有英文版)。
因为keil 4比较大,有50多M,需要的M我,我会发到你邮箱~
安装好后,双击图标,打开软件。(好像是废话= =)
keil 4图标 QQ截图未命名.jpg
正在打开中。。。
QQ截图未命名1.jpg
软件界面
QQ截图未命名2.jpg

接下来请跟我一起做,最好不要改动,出现不良后果自负。。。
我们新建一个工程,看看hex文件是怎么产生的。
点击Project,
QQ截图未命名3.jpg
在点击Project中的 QQ截图未命名4.jpg
之后出现一个窗口,输入你的文件名,之后点击保存。建议新建一个文件夹,因为一个工程有多个文件。
QQ截图未命名5.jpg
之后为工程选择设备。因为我们是8051单片机,所以选择“Atmel”目录下的“AT89C51”,然后点击“OK”
QQ截图未命名6.jpg

QQ截图未命名7.jpg
我们发现,左边的Project目录下出现了一个类似文件夹的东西,这就是我们新建的工程。
QQ截图未命名8.jpg
点击菜单中的新建程序图标。
QQ截图未命名9.jpg
我们发现,原来灰色的窗口出现了一个白色的界面,这就是我们编写程序的地方。我们先不编写程序,继续。
根据图片,保存一个C语言文件。
QQ截图未命名10.jpg
在这里要注意了,文件名必须与前面的工程文件名相同,而且要打后缀。例如前面的工程文件名是123,那么后面的文件保存必须为123.c
QQ截图未命名11.jpg
之后打开这个组。
QQ截图未命名12.jpg
双击Source Group1,增加XX.C源文件到组。
QQ截图未命名13.jpg
在这里注意,点击Add后窗口不会关闭,需要手工关闭,因为有些工程需要多个源文件。
再点击Project,根据图片点击。
QQ截图未命名14.jpg
可能第一次出现的不是这个窗口,关闭再打开一次就行了。
QQ截图未命名15.jpg
勾选这一项,这是产生hex文件的选项。
QQ截图未命名16.jpg
之后点击“OK"关闭这个窗口。
现在点击这个图标,编译!
QQ截图未命名17.jpg
OK!编译成功,因为什么也没写,Keil会出现两个警告。
QQ截图未命名18.jpg
好了,现在打开你刚才放工程文件的文件夹,是不是有个hex文件了?
QQ截图未命名19.jpg
呵呵,恭喜你,你已经学会建立一个工程了!

61

主题

4

好友

637

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
19170
帖子
3087
精华
0
经验
637 点
金钱
480 ¥
注册时间
2007-2-23
发表于 2011-8-13 14:36 | 显示全部楼层
不错 支持楼主 定期来学习

5

主题

2

好友

420

积分

业余侠客 当前离线

Rank: 4

UID
162834
帖子
681
精华
0
经验
420 点
金钱
418 ¥
注册时间
2010-1-9
发表于 2011-8-13 14:58 | 显示全部楼层
关注学习

117

主题

0

好友

1194

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
270736
帖子
2604
精华
0
经验
1194 点
金钱
1174 ¥
注册时间
2010-12-11
发表于 2011-8-13 15:20 | 显示全部楼层
单片机很久没摸了,那时候还是keil3,,,还念中。。。
干脆弄成,喇叭保护,温度保护,音量调整和切换。。。
都用单片机来控制,在加个lcd显示。

7

主题

0

好友

704

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
74422
帖子
3072
精华
0
经验
704 点
金钱
693 ¥
注册时间
2009-1-11
发表于 2011-8-13 16:40 | 显示全部楼层
不怕麻烦,来学编程。

67

主题

0

好友

1201

积分

侠之大者 当前离线

学生

Rank: 6Rank: 6

UID
5357
帖子
2922
精华
0
经验
1201 点
金钱
389 ¥
注册时间
2005-8-26
发表于 2011-8-13 16:44 | 显示全部楼层
记号下,确实应该想老兄好好学习了。

7

主题

0

好友

704

积分
     

职业侠客 当前离线

Rank: 5Rank: 5

UID
74422
帖子
3072
精华
0
经验
704 点
金钱
693 ¥
注册时间
2009-1-11
发表于 2011-8-13 17:00 | 显示全部楼层
不过有个问题:单片机用在音响,不知道会不会产生干扰?

38

主题

0

好友

1475

积分

侠之大者 当前离线

Rank: 6Rank: 6

UID
10453
帖子
1619
精华
0
经验
1475 点
金钱
884 ¥
注册时间
2006-7-3
发表于 2011-8-13 17:57 | 显示全部楼层
我记得有个发烧品牌的功放用单片机开发保护功能(常规的过压过流和信号异常检测都有),用光藕闭合功率管BE结以及用继电器关断输入电源,然后用大功率MOS给电源滤波电容放电(当然接有缓冲电阻),这样处理之后功放输出端子是直接连接功率管的,好处是没有了输出继电器,少了几毫欧姆的接触电阻.. 使音乐输出的电流更加顺畅..

0

主题

0

好友

83

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
375855
帖子
95
精华
0
经验
83 点
金钱
83 ¥
注册时间
2011-8-5
发表于 2011-8-13 18:47 | 显示全部楼层
辛苦了楼主

33

主题

0

好友

697

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
31399
帖子
3817
精华
0
经验
697 点
金钱
665 ¥
注册时间
2007-11-30
发表于 2011-8-13 19:09 | 显示全部楼层
这是个好贴,学习!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部