13

主题

4

好友

1198

积分

侠之大者 当前离线

Rank: 6Rank: 6

UID
11935
帖子
1233
精华
0
经验
1198 点
金钱
937 ¥
注册时间
2006-9-1
发表于 2011-8-16 03:12 | 显示全部楼层
帖子详细,一步一步条理清楚.不象其他帖子看的一头雾水,变量类型 象不同容量的瓶子,多点这样的形容会更好理解.对枯燥无味的程序容易上手.
学习中,支持..

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

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

今天来看看论坛,发现ahao大叔也发帖教单片机啦~再此热烈祝贺!

好了咱不扯别的,继续今天的内容。
今天讲的是C语言的编程语句,是C语言的重中之重,虽然只有5种,但希望大家熟练掌握。今天我们只讲一种语句,剩下的我会根据常用型分时讲解。
首先是if语句。if语句的表达方式如下:
if( 表达式 ){语句1;语句2;}
if在英文中的意思为如果,他在C语言中为判断语句,if语句可以理解为:如果表达式为“真”,则执行语句1与语句2(当然也可以只有一条语句),如果表达式为“假”,则跳过语句1和语句2,执行下面的程序。其中表达式就是我们前面所讲的判断符号所组成的句语句,例如 a==1,a>0xD3。if语句可以用作按键的判断上。例如下面这条语句:
if(P 3 ^ 5 == 0){
         P 1 ^ 7 = 0;
         }
他的意思是说,如果P3.5接口为低电平,也就是按键按下时,P1.7接口输出低电平,因为我们的LED是接在电源正极,所以输出低电平便使LED点亮了。
还记得我们的无锁开关的实验吗?下面是他全部的程序,我将带你详细解读,重点寻找if语句,看看他在实例中是怎么运用的。

注:#define [代替名]        [原名]  //用代替名代替原名(可以方便修改常改或调试的值)例:#define LED P1

#include <REG51.h>      //51头文件
#define   LED     P1        //设置LED连接的I/O组
sbit   KEY  =   P3 ^ 7;    //设置按键接口
void main(void){
        while(1){
                KEY = 1;
                LED = 1;
                if(KEY == 0){
                        LED = 0;
                }
        }
}


#include <REG51.h>     引用头文件不用说了吧?所有的C语言程序开头都是引用头文件,之后的SFR会讲为什么要引用,这里知道就好了。
#define  LED     P1        这里是说定义LED接到P1接口组,用这条语句就不用一个一个LED去定义了。
sbit   KEY  =   P3 ^ 7;    这个也不用说了吧?之前我们讲闪灯程序的时候讲过了,忘了可以回去看看。
void main(void){           这句是主函数开始的意思,所有的C语言程序都有这一句。
while(1){                      他的用途是无限循环下面的程序,而不是像昙花一现一样按一次开关LED亮了一次单片机就不工作了。

KEY = 1;
LED = 1;                        这两句意思是,将LED和按键都先置于高电平。
if(KEY == 0){                 终于到了if语句了,先不要看后面的解释,自己先想想,这是什么意思?      这里是说判断按键是否为低电平,如果为低电平(按键按下将I/O口直接接到了负极)则执行{}内的语句。
LED = 0;                        为低电平时执行的语句,将P1接口的电平全部拉低(因为我们前面用“LED”这个名称代替了“P1”这个接口组名称,所以LED = 0; 即 P1 = 0;),LED点亮。


注意,前面有多少个大括号,后面就要有几个。

除此之外,if语句还有一种表达方法。当括号内为“假”时,执行另一段程序(这样我想到密码炸弹。。。如果密码正确则炸弹成功拆解,如果错误当场。。。呵呵,学会编程是完全有可能的= =只是炸弹不好弄~)。
他的表示方法为:
if( 表达式 ){语句1;语句2;}else{语句3;语句4;}
同样是无锁开关的程序,加上else,从逻辑上看,就更合理了。

#include <REG51.h>      //51头文件
#define   LED     P1        //设置LED连接的I/O组
sbit   KEY  =   P3 ^ 7;    //设置按键接口
void main(void){
        while(1){
                KEY = 1;
                LED = 1;
                if(KEY == 0){
                        LED = 0;
                }else{
                LED = 1;
         }
}

在这里我就不写注释了,大家根据前面的自己理解,如果有什么困难可以留言向我提问。

上面就是if语句在C语言中的使用,希望大家熟练运用。如果还有时间,今天晚上会上while语句的使用。
头像被屏蔽

12

主题

0

好友

185

积分
     

禁止发言 当前离线

UID
49073
帖子
178
精华
0
经验
185 点
金钱
153 ¥
注册时间
2008-7-26
发表于 2011-8-16 13:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

67

主题

0

好友

2161

积分
     

罗宾汉 当前离线

Rank: 7Rank: 7Rank: 7

UID
44250
帖子
4944
精华
0
经验
2161 点
金钱
2143 ¥
注册时间
2008-5-28
发表于 2011-8-16 13:28 | 显示全部楼层
又来看看

0

主题

0

好友

2

积分

注册会员 当前离线

Rank: 2

UID
151849
帖子
5
精华
0
经验
2 点
金钱
2 ¥
注册时间
2009-12-2
发表于 2011-8-16 13:54 | 显示全部楼层
很好的教程!说的很详细!楼主辛苦了

1

主题

0

好友

51

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
142434
帖子
53
精华
0
经验
51 点
金钱
51 ¥
注册时间
2009-10-25
发表于 2011-8-16 17:02 | 显示全部楼层
楼主写的很详细。辛苦了。。

stc单片机自己用用还行,要是量产还是不可靠的。量产更多的还是用sst,atmel之类的大厂的

119

主题

1

好友

897

积分

职业侠客 当前离线

Rank: 5Rank: 5

UID
41985
帖子
2296
精华
0
经验
897 点
金钱
849 ¥
注册时间
2008-5-1
发表于 2011-8-16 17:17 | 显示全部楼层
作为门外汉,其实一直想学单片机,但最大的难点就是编程,英文不行,还有语句里有空格,换行等,这个要遵循什么规律?

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

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


    没什么定死的规矩,按个人喜好就好。最好是一条语句一行,我的习惯是这样。

3

主题

0

好友

109

积分
     

论坛游民 当前离线

Rank: 3Rank: 3

UID
146877
帖子
164
精华
0
经验
109 点
金钱
109 ¥
注册时间
2009-11-11
发表于 2011-8-16 17:59 | 显示全部楼层
这个一定要记号!
头像被屏蔽

54

主题

4

好友

1万

积分

禁止发言 当前离线

UID
118932
帖子
14140
精华
0
经验
14228 点
金钱
14167 ¥
注册时间
2009-7-18
发表于 2011-8-16 23:17 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

6

主题

0

好友

395

积分

业余侠客 当前离线

Rank: 4

UID
64777
帖子
970
精华
0
经验
395 点
金钱
706 ¥
注册时间
2008-11-23
发表于 2011-8-17 00:14 | 显示全部楼层
一口气看完!真的很好的贴子!请LZ继续为我们当老师!谢谢!

1

主题

0

好友

51

积分

论坛游民 当前离线

Rank: 3Rank: 3

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


    呵呵。客观的讲,stc的功能丰富强大,开发简单。 我遇到过一些问题,比如stc的片子在温度稍高一点的环境下工作及其不稳定,不定时的会复位,而sst,atmel,freescale的就没问题。还有就是stc所有单片机的过载能力都不行,在很多情况嘛,很多情况下这个还是要考虑的。还有我遇到好多次eeprom数据丢失的问题。这个不知道是不是芯片问题。

4

主题

1

好友

1756

积分
     

侠之大者 当前离线

Rank: 6Rank: 6

UID
55008
帖子
1810
精华
0
经验
1756 点
金钱
1746 ¥
注册时间
2008-9-19
发表于 2011-8-17 03:11 | 显示全部楼层
就等着跟楼主学c语言了,麻烦楼主再发一次编程软件给我。收到你的信息说已经发了,可是我登陆邮箱没看到。换个邮箱试试看。402767492@qq.com。谢谢了 !
头像被屏蔽

54

主题

4

好友

1万

积分

禁止发言 当前离线

UID
118932
帖子
14140
精华
0
经验
14228 点
金钱
14167 ¥
注册时间
2009-7-18
发表于 2011-8-17 10:09 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

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


    你再试试?我又发了一次哦

13

主题

0

好友

207

积分

业余侠客 当前离线

Rank: 4

UID
327390
帖子
142
精华
0
经验
207 点
金钱
152 ¥
注册时间
2011-5-1
 楼主| 发表于 2011-8-17 12:45 | 显示全部楼层
谢谢大家的支持,我才能每天坚持更新我的帖子,在此对大家表示感谢。

继续上次的内容,今天我们来讲while循环语句的实用。
一般来说C语言的主函数中一定有while语句,从main函数开始,结束在while语句的无限循环中。此外,while语句的应用还有延时程序、按键的判断等。
while语句的特点是先判断表达式,如果表达式为“真”则实行{}内的程序,如果假则退出。乍一听这根if语句没什么区别啊,的确,但是while语句有“回眸”的功能,而if没有。也就是说在执行{}内的程序之后还会回来判断一次表达式,如果为真则继续执行{}内的程序,也就是说当表达式是种为“真”时,只有单片机在工作,while语句就会永远循环下去。如果表达式为“假”,则{}内的程序一次都不会被执行。

while语句在锁定开关中的应用最为经典,下面是锁定开关的全部程序。

#include <REG51.h>         //51头文件
#define  LED        P1          //设置LED连接的I/O组
sbit         KEY     =   P3 ^ 7;    //设置按键接在P3.7
void delay (unsigned int a){     // 1ms延时程序
        unsigned int i;
        while( --a != 0){
                for(i = 0; i < 600; i++);          //STC单片机在外部晶振为12MHz时i值上限为600  
        }                                                       //AT89C51单片机在外部晶振为12MHz时i值上限为125
}
void main(void){
        KEY = 1;
        LED = 1;
        while(1){
                if(KEY == 0){ //如果按键按下则继续
                        delay(20); //延时20mS
                        if(KEY == 0){ //如果按键按下则继续
                                LED = ~LED; //变化灯的状态
                                while(KEY == 0); //等待按键松开
                        }
                }
        }
}

在这里我不就不带大家一条一条语句看了,我相信大家经过前面的学习,看懂一些简单的程序已经没问题了,而且在做锁定开关实验的时候我已经带大家看了一段程序了,有不懂的可以回去看一看。

在这里我们发现有这样一条语句“while(1){”语句,括号内没有表达式,只有一个1,这种用法也是正确的,也就是说while语句永远为真,下面的程序将被无限的循环而没有退出的可能。最后一个while大家可能会不理解,这里我要说明一下,这种用法也是正确的,也就是“while(表达式);”这种形式,他的意思是,while语句为真时,没有任何语句需要执行。如果没有按键松开的判断程序,程序就会始终执行按键程序,就是你只按一次按键等于按了许多次。这种按键的循环是失控的,所以我们用while语句的循环判断一次按键的放开,这样按键的操作将会更分明。

延时程序看不懂没关系,等我们下节讲for循环时,你就能明白了,敬请期待。。

评分

参与人数 1经验 +10 收起 理由
laibu88 + 10 支持原创

查看全部评分

5

主题

3

好友

3867

积分

贵宾 当前离线

Rank: 3Rank: 3

UID
32026
帖子
4996
精华
0
经验
3867 点
金钱
3775 ¥
注册时间
2007-12-11
发表于 2011-8-17 14:33 | 显示全部楼层
支持一下LZ

33

主题

20

好友

3696

积分
     

贵宾 当前离线

Rank: 3Rank: 3

UID
69243
帖子
4806
精华
4
经验
3696 点
金钱
3323 ¥
注册时间
2008-12-17

社区贡献 论坛贵宾 新人进步

发表于 2011-8-17 14:48 | 显示全部楼层
好帖,支持一下.

0

主题

0

好友

2

积分
     

注册会员 当前离线

Rank: 2

UID
120582
帖子
2
精华
0
经验
2 点
金钱
2 ¥
注册时间
2009-7-26
发表于 2011-8-17 16:57 | 显示全部楼层
好资料,不用掏钱就能学到知识!谢谢楼主,我会常来顶你的帖子的

0

主题

0

好友

80

积分

论坛游民 当前离线

Rank: 3Rank: 3

UID
142415
帖子
82
精华
0
经验
80 点
金钱
80 ¥
注册时间
2009-10-25
发表于 2011-8-17 19:39 | 显示全部楼层
好!!!学习
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Powered by Discuz! X3.4

© 2001-2012 Comsenz Inc.

返回顶部