搜索
查看: 944|回复: 0

第十一节:变量的定义与赋值语句。

[复制链接]

52

主题

146

帖子

380

积分

中级会员

Rank: 3Rank: 3

积分
380
发表于 2015-7-15 16:20:11 | 显示全部楼层 |阅读模式
写程序到底是写什么?我用七个字概括是:对象之间的行为。假设以下a,b,c,d,e.这些都是对象,那么程序往往是对象之间的以下这些行为:
    (1)把某个数值赋值给对象a
    (2)把对象b赋值给对象a
    (3)把对象b与对象c运算的结果赋值给对象a
    (4)如果对象d等于某个数值,则把某个数值赋值给对象a
    (5)如果对象d等于某个数值,则把对象b赋值给对象a
    (6)如果对象d等于某个数值,则把对象b与对象c运算的结果赋值给对象a
    (7)如果对象d等于对象e,则把某个数值赋值给对象a
    (8)如果对象d等于对象e,则把对象b赋值给对象a
    (9)如果对象d等于对象e,则把对象b与对象c运算的结果赋值给对象a
    (10)...等等,不一一列举。
      从上述可以看出,程序的两个要素是:对象和行为。如果把对象看作是单片机的RAM数据存储器,那么行为就是单片机的ROM程序存储器。如果把对象看作是变量,那么行为就是指令语句。本节标题“变量的定义与赋值语句”,其中“变量的定义”就是对象,“赋值语句”就是行为。
      变量的定义。一个程序最大允许有多少个对象,是由数据存储器RAM的字节数决定的(字节是一种单位,后面章节会讲到)stc89c52rc这个单片机有几百个字节的RAM,但是并不意味着程序就一定要全部占用这些RAM。程序需要占用多少RAM,完全是根据程序的实际情况来决定,需要多少就申请多少。这里的“对象”就是变量。这里的“申请”就是变量的定义。
       定义变量的关键字。常用有3种容量的变量,每种变量的取值范围不一样。第一种是”unsigned char”变量,取值范围从0255,占用RAM一个字节,比喻成一房一厅。第二种是”unsigned int”变量,取值范围从065535,占用RAM两个字节,比喻成两房一厅。第三种是“unsigned long”变量,取值范围从04294967295,占用RAM三个字节,比喻成三房一厅。unsigned char,unsigned intunsigned long都是定义变量的关键字。
       定义变量的语法格式。定义变量的语法格式由3部分组成:关键字,变量名,分号。比如:
       unsigned char a;
      其中unsigned char就是关键字,a就是变量名,分号”;”就是一条语句的结束符号。
      变量名的命名规则。变量名的第一个字符不能是数字,必须是字母或者下划线,字母或者下划线后面可以带数字,一个变量名之间的字符不能带空格。变量名不能跟编译器的关键字重名,不能跟函数名重名。比如:
      unsigned char 3a; //不合法,第一个字符不能是数字。
      unsigned char char; //不合法,char是编译器的关键字。
      unsigned char a b; //不合法,ab是一个变量名,ab的中间不能有空格。
      unsigned char a; //合法。
      unsigned char abc; //合法。
      unsigned char _ab; //合法。
      unsigned char _3ab; //合法。
      unsigned char a123; //合法。
      unsigned char a12ced; //合法。
      定义变量与RAM的内在关系。当我们定义一个变量时,相当于向单片机申请了一个RAM空间。C编译器会自动为这个变量名分配一个RAM空间,每个字节的RAM空间都有一个固定的地址。把每个字节的RAM空间比喻成 房间,这个地址就是房号。地址是纯数字编号,不利于我们记忆,C语言编译器为了降低我们的工作难度,不用我们记每个变量的地址,只需要记住这个变量的名称就可以了。操作某个变量名,就相当于操作到对应地址的RAM空间。变量名与对应地址RAM空间的映射关系是C编译器暗中帮我们做好了。比如:
      unsigned char a;  //a占用一个字节的RAM空间,这个空间的地址由C编译自动分配。
      unsigned char b;  //b占用一个字节的RAM空间,这个空间的地址由C编译自动分配。
      unsigned char c;  //c占用一个字节的RAM空间,这个空间的地址由C编译自动分配。  
      上述a,b,c三个变量名占用一个字节的RAM空间,同时被C编译器分配了3个不同的RAM空间地址。
      赋值语句的含义。赋值语句是行为。把右边对象的内容复制一份给左边对象。 赋值语句有一个很重要的特性,就是覆盖性,左边对象原来的内容会被右边对象复制过来的新内容所覆盖。比如,左边对象是变量a,原来a里面存的数据是3,右边对象是立即数6,执行赋值语句后,把6赋值给了对象a,那么a原来的数据3就被覆盖丢失了,变成了6.
赋值语句的格式。赋值语句的语法格式由4部分组成:左边对象,关键字,右边对象,分号。比如:
      a=b;
      其中a就是左边对象。
      其中“=”就是关键字。写法跟我们平时用的等于号是一样,但是在C语言里不是等于的意思,而是代表赋值的意思。跟等于号是两码事。
      其中b就是右边对象。
      其中分号“;”代表一条语句的结束符。
      赋值语句与ROM的内在关系。赋值语句是行为,凡是程序的行为指令都存储在单片机的ROM区。C编译器会把一条赋值语句翻译成对应的一条或者几条机器码,机器码指令也是以字节为单位的。下载程序的时候,这些机器码就会被下载进单片机的ROM区。比如以下这行赋值语句:
      a=b;
      经过C编译器编译后会生成以字节为单位的机器码。这些机器码记录着这些信息:变量aRAM地址,变量bRAM地址,以及把b变量RAM地址里面的内容赋值到a变量地址里面的RAM空间。
      变量定义的初始化。讲了赋值语句之后,再回过头来讲变量定义的初始化。变量定义之后,等于被C编译器分配了一个RAM空间,那么这个空间里面存储的数据是什么?如果没有刻意给它初始化,那么RAM空间里面存储的数据是不太确定的,是默认的。有些场合,需要在给变量分配RAM空间时就给它一个固定的初始值,这就是变量定义的初始化。变量初始化的语法格式由3部分组成:关键字,变量名赋值,分号。比如:
      unsigned char a=9;
     其中unsigned char就是关键字。
     其中a=9就是变量名赋值。a从被C编译器分配RAM空间那一刻起,就默认是存了9这个数据。
     分号”;”就是一条语句的结束符号。
     接下来练习一个程序实例。直接复制前面章节中第十节的模板程序,只需要在main函数里编写练习代码,编译后,把程序下载进坚鸿51学习板,通过按S1或者S5按键即可在数码管上观察不同的变量数值。其它部分的模板程序代码就不贴出来了,详细的main函数源代码讲解如下:
  • void main() //主程序
  • {
  • /*---C语言学习区域的开始---------------------------------------------------------------------------*/
  •   unsigned char a;   //定义一个变量a,并且分配了一个字节的RAM空间,里面保存的数据是默认值0.
  •   unsigned char b;   //定义一个变量b,并且分配了一个字节的RAM空间,里面保存的数据是默认值0.
  •   unsigned char c;   //定义一个变量c,并且分配了一个字节的RAM空间,里面保存的数据是默认值0.
  •   unsigned char d=9; //定义一个变量d,并且分配了一个字节的RAM空间,里面保存的数据被初始化成9.
  •   b=3;  //把3赋值给变量b,b原来的默认数据是0被覆盖了,此时变量b保存的数值是3
  •   c=b;  //把右边变量b的内容复制一份赋值给左边的变量c,c原来的默认数据0被覆盖了,此时,c保存的数值跟b的数值一样,都是3.
  •   GuiWdData0=a;   //把变量a这个数值放到窗口变量0里面显示
  •   GuiWdData1=b;   //把变量b这个数值放到窗口变量1里面显示
  •   GuiWdData2=c;   //把变量c这个数值放到窗口变量2里面显示
  •   GuiWdData3=d;   //把变量d这个数值放到窗口变量3里面显示
  • /*---C语言学习区域的结束---------------------------------------------------------------------------*/
  •    while(1)
  •    {
  •                   initial();
  •       key_service();
  •       display_service();
  •    }
  • }


复制代码

       上51学习板观察程序执行的结果:
       变量a的数值是0
       变量b的数值是3
       变量c的数值是3
       变量d的数值是9

       下节预告:两个变量的数据交换。

来源:从业十年,教你51单片机入门基础
https://rf.eefocus.com/module/forum/thread-591067-1-1.html


回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /2 下一条

Archiver|手机版|小黑屋|RF技术社区

GMT+8, 2024-4-26 16:31 , Processed in 0.067699 second(s), 6 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表