首页> 单片机教学(C言语教程)  
第五课 常量
  上一节咱们进修了KEIL C51编译器所支撑的数据类型。而这些数据类型又是怎样用在常量和变量的定义中的呢?又有什么要留意的吗?下面就来看看吧。晕!你又一次区分不清晰什么是常量,什么是变量。常量是在法式运转过程中不能改变值的量,而变量是能够在法式运转过程中不竭变化的量。变量的定义能够使用所有C51编译器支撑的数据类型,而常量的数据类型只需整型、浮点型、字符型、字符串型和位标量。这一节咱们进修常量定义和用法,而下一节则进修变量。
常量的数据类型申明是多么的
  1. 整型常量能够暗示为十进制如123,0,-89等。十六进制则以0x开首如0x34,-0x3B等。长整型就在数字后面加字母L,如104L,034L,0xF340等。
  2. 浮点型常量可分为十进制和指数暗示形式。十进制由数字和小数点构成,如0.888,3345.345,0.0等,整数或小数部门为0,能够省略但必需有小数点。指数暗示形式为[±]数字[.数字]e[±]数字,[]中的内容为可选项,此中内容按照具体环境可有可无,但其余部门必需有,如125e3,7e9,-3.0e-3。
  3. 字符型常量是单引号内的字符,如'a','d'等,不成以显示的节制字符,能够在该字符后面加一个反斜杠"\"构成公用本义字符。常用本义字符表请看表5-1。
  4. 字符串型常量由双引号内的字符构成,如"test","OK"等。当引号内的没有字符时,为空字符串。在使用特殊字符时同样要使用本义字符如双引号。在C中字符串常量是做为字符类型数组来处置的,在存储字符串时系统会在字符串尾部加上\o本义字符以作为该字符串的结束符。字符串常量"A"和字符常量'A'是不合的,前者在存储时多占用一个字节的字间。
  5. 位标量,它的值是一个二进制。

本义字符

含义

ASCII码(16/10进制)

\o

空字符(NULL)

00H/0

\n

换行符(LF)

0AH/10

\r

回车符(CR)

0DH/13

\t

程度制表符(HT)

09H/9

\b

退格符(BS)

08H/8

\f

换页符(FF)

0CH/12

\'

单引号

27H/39

\"

双引号

22H/34

\\

反斜杠

5CH/92

表5-1 常用本义字符表
  常量可用在不必改变值的场所,如固定的数据表,字库等。常量的定义编制有几种,下面来加以申明。
#difine False 0x0; //用预定义语句能够定义常量
#difine True 0x1; //这里定义False为0,True为1
         //在法式顶用到False编译时主动用0替代,同理True替代为1
unsigned int code a=100; //这一句用code把a定义在法式存储器中并赋值
const unsigned int c=100; //用const定义c为无符号int常量并赋值
  以上两句它们的值都保留在法式存储器中,而法式存储器在运转中是不答应被编削的,所以若是在这两句后面用了类似a=110,a++多么的赋值语句,编译时将会犯错。
说了一通又一次不如写个法式来测验考试一下吧。写什么法式呢?赛马灯!对,就写这个简单易懂的吧,这个也好申明典型的常量用法。先来看看电路图吧。它是在咱们上一课的测验考试电路的底子上添加6个LED构成的,也便是用P1口的全数引脚别离驱动一个LED,电路如图5-1所示。
  新建一个RunLED的名目,主法式如下:
#include <AT89X51.H> //预处置文件里面定义了特殊寄放器的名称如P1口定义为P1
void main(void)
{
//定义花腔数据
const unsigned char design[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,
0xE7,0xDB,0xBD,0x7E,0xFF};
unsigned int a; //定义轮回用的变量
unsigned char b; //在C51编程中因内存有限尽可能留意变量类型的使用
//尽可能使用少字节的类型,在大型的法式中很受用
do{
for (b=0; b<32; b++)
{
for(a=0; a<30000; a++); //延时一段时间
P1 = design[b]; //读已定义的花腔数据并写花腔数据到P1口
}
}while(1);
}
  法式中的花腔数据能够自以去定义,因这里咱们的LED要AT89C51的P1引脚为低电平才会点亮,所以咱们要向P1口的各引脚杏稞据O对应连接的LED才会被点亮,P1口的八个引脚刚好对应P1口特殊寄放器的八个二进位,如向P1口定命据0xFE,转成二进制便是11111110,最低位D0为0这里P1.0引脚输出低电平,LED1被点亮。如斯类推,大师不难算出本人想要做的成果了。大师编译烧写看看,成果就出来,显示的速度您能够按照需要调整延时a的值,不要逾越变量类型的值域就很行了。哦,您又一次没有测验考试板?那若何能够晓得法式运转的成果呢?呵,不消急,这就来说说用KEIL uVision2的软件仿真来调试IO口输出输入法式。

图5-1 八路赛马灯电路
  编译运转上面的法式,然后按外部设备菜单Peripherals-I/O Ports-Port1就打开Port1的调试窗口了,如图5-3中的2。这时法式运转了,但咱们并不能在Port1调试窗口上看到有会什么成果,这时咱们能够用鼠标左击图5-3中1旁边绿色的方条,点一下就有一个小红方格在点一下又没有了,哪一句语句前有小方格法式运转到那一句时就遏制了,便是设置调试断点,同样图5-2中的1也是同样功能,别离是添加/移除断点、移除所有断点、答应/禁止断点、禁止所有断点,菜单也有一样的功能,别的菜单中又一次有Breakpoints可打开断点设置窗口它的功能更强大,不外咱们这里先不消它。咱们?quot;P1 = design[b];"这一句设置一个断点这时法式运转到这里就停住了,再寄望一下Port1调试窗口,再按图5-2中的2的运转键,法式又运转到设置断点的处所停住了,这时Port1调试窗口的情况又不合了。也便是说Port1调试窗口模仿了P1口的电平情况,打勾为高电平,不打勾则为低电平,窗口中P1为P1寄放器的情况,Pins为引脚的情况,留意的是若是是读引脚值必需把引脚对应的寄放器置1才能精确读取。图5-2中2旁边的{}样的按钮别离为单步入,步越,步出和施行到当前行。图中3为显示下一句将要施行的语句。图5-3中的3是Watches窗口可查看各变量的当前值,数组和字串是显示其头一个地址,如本例中的design数组是保留在RAM存储区的首地址为D:0x08,能够在图中4 Memory存储器查看窗口中的Address地址中打入D:0x08就能够查看到design各数据和存放地址了。若是你的uVision2没有显示这些窗口,能够在View菜单中打开在图5-2中3后面一栏的查看窗口快速栏中打开。

图5-2 调试用快速菜单栏

图5-3 各调试窗口
 
 
联系地址:浙江省杭州市西湖科技园西园七路3号4层 邮政编码:310011 Email:hificat@163.com xu169@sina.com
德律:0571-87615070 传真:0571-87615070 手机:13185018567 QQ:420951892 MSN:hificat@hotmail.com
杭州电子&算计机工作室 版权所有 COPYRIGHT2003——2007 HangZhou Electron&Computer Studio. All rights reserved