13个字节。
指针变量也具有类型在以后的课程中有专门一课做探讨这里就不多说了。
6bit位标量bit位标量是c51编译器的一种扩充数据类型利用它可定义一个位标量但不能定义位指针也不能定义位数组。
它的值是一个二进制位不是0就是1类似一些高级语言中的Boolean类型中的True和False。
7sfr特殊功能寄存器sfr也是一种扩充数据类型点用一个内存单元值域为0255。
利用它能访问51单片机内部的所有特殊功能寄存器。
如用sfrP10x90这一句定P1为P1端口在片内的寄存器在后面的语句中用以用P1255对P1端口的所有引脚置高电平之类的语句来操作特殊功能寄存器。
8sfr1616位特殊功能寄存器sfr16占用两个内存单元值域为065535。
sfr16和sfr一样用于操作特殊功能寄存器所不一样的是它用于操作占两个字节的寄存器如定时器T0和T1。
9sbit可录址位sbit同样是单片机c语言中的一种扩充数据类型利用它能访问芯片内部的RAM中的可寻址位或特殊功能寄存器中的可寻址位。
如先前定义了sfrP10x90//因P1端口的寄存器是可位寻址的所以能定义sbitP1_1P11//P1_1为P1中的P1.1引脚//同样我们能用P1.1的地址去写如sbitP1_10x91这样在以后的程序语句中就能用P1_1来对P1.1引脚进行读写操作了。
通常这些能直接使用系统供给的预处理文件里面已定义好各特殊功能寄存器的简单名字直接引用能省去一点时间我自己是一直用的。
当然您也能自己写自己的定义文件用您认为好记的名字。
sylar源于heros提高空载性能降低待机功耗并提升轻载效率回复回复本帖回到顶端我想评分sylar我是MM高级会员用户等级院士加为好友发短消息所有发言个人档案最后登陆时间2010-06-0408:20:15状态离线上一篇学习了KEILc单片机c语言编译器所支持的数据类型。
而这些c51数据类型又是怎么用在常量和变量的定义中的呢又有什么要注意的吗常量就是在程序运行过程中不能改变值的量而变量是能在程序运行过程中不断变化的量。
变量的定义能使用所有c51编译器支持的数据类型而常量的数据类型只有整型、浮点型、字符型、字符串型和位标量。
这一篇学习常量定义和使用方法而下一篇则学习单片机c语言的变量。
常量的数据类型说明是这样的1整型常量能表示为十进制如123089等。
十六进制则以0x开头如0x34-0x3B等。
长整型就在数字后面加字母L如104L034L0xF340等。
2浮点型常量可分为十进制和指数表示形式。
十进制由数字和小数点组成如0.8883345.3450.0等整数或小数部分为0能省略但必须有小数点。
指数表示形式为±数字.数字e±数字中的内容为可选项其中内容根据具体情况可有可无但其余部分必须有如125e37e9-3.0e-3。
3字符型常量是单引号内的字符如‘a’‘d’等不能显示的控制字符能在该字符前面加一个反斜杠“”组成专用转义字符。
常用转义字符表请看表41。
4字符串型常量由双引号内的字符组成如“test”“OK”等。
当引号内的没有字符时为空字符串。
在使用特殊字符时同样要使用转义字符如双引号。
在C中字符串常量是做为字符类型数组来处理的在存储字符串时系统会在字符串尾部加上o转义字符以作为该字符串的结束符。
字符串常量“A”和字符常量‘A’是不一样的前者在存储时多占用一个字节的字间。
5位标量它的值是一个二进制。
转义字符含义ASCII码16/10进制o空字符NULL00H/0n换行符LF0AH/10r回车符CR0DH/13t水平制表符HT09H/9b退格符BS08H/8f换页符FF0CH/12单引号27H/39quot双引号22H/34反斜杠5CH/92表41常用转义字符表常量可用在不必改变值的场合如固定的数据表字库等。
常量的定义方式有几种下面来加以说明。
difineFalse0x0//用预定义语句能定义常量difineTrue0x1//这里定义False为0True为1//在程序中用到False编译时自动用0替换同理True替换为1unsignedintcodea100//这一句用code把a定义在程序存储器中并赋值constunsignedintc100//用const定义c为无符号int常量并赋值以上两句它们的值都保存在程序存储器中而程序存储器在运行中是不允许被修改的所以如果在这两句后面用了类似a110a这样的赋值语句编译时将会出错。
下面写个跑马灯程序来实验一下典型的常量使用方法。
先来看看电路图吧。
它是在上一篇的实验电路的基础上增加几个LED组成的也就是用P1口的全部引脚分别驱动一个LED电路如图41所示。
新建一个RunLED的项目主程序如下include//预处理文件里面定义了特殊寄存器的名称如P1口定义为P1voidmainvoid//定义花样数据constunsignedchardesign320xFF0xFE0xFD0xFB0xF70xEF0xDF0xBF0x7F0x7F0xBF0xDF0xEF0xF70xFB0xFD0xFE0xFF0xFF0xFE0xFC0xF80xF00xE00xC00x800x00xE70xDB0xBD0x7E0xFFunsignedinta//定义循环用的变量unsignedcharb//在c51编程中因内存有限尽可能注意变量类型的使用//尽可能使用少字节的类型在大型的程序中很受用doforb0blt32bwhile1fora0alt30000a//延时一段时间P1designb//读已定义的花样数据并写花样数据到P1口程序中的花样数据能自以去定义因这里我们的LED要AT89c51的P1引脚为低电平才会点亮所以我们要向P1口的各引脚写数据O对应连接的LED才会被点亮P1口的八个引脚刚好对应P1口特殊寄存器的八个二进位如向P1口定数据0xFE转成二进制就是11111110最低位D0为0这里P1.0引脚输出低电平LED1被点亮。
如此类推大家不难算出自己想要做的效果了。
大家编译烧写看看效果就出来显示的速度您能根据需要调整延时a的值不要超过变量类型的值域就很行了。
哦您还没有.
上一篇:
【精品】TinyXML入门教程
下一篇:
餐饮管理系统