DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1341|回复: 0
打印 上一主题 下一主题

[教程] 单片机c语言教程第四章--C51常量

[复制链接]
跳转到指定楼层
楼主
发表于 2011-4-29 23:05:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上一篇学习了 KEIL c 单片机c语言 编译器所支持的数据类型。而这些c51数据类型又是怎么用在常量和变量的定义中的呢?又有什么要注意的吗?常量就是在程序运行过程中不能改变值的量,而变量是能在程序运行过程中不断变化的量。变量的定义能使用所有c51编译器支持的数据类型,而常量的数据类型只有整型、浮点型、字符型、字符串型和位标量。这一篇学习常量定义和使用方法,而下一篇则学习单片机c语言的变量。
常量的数据类型说明是这样的
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’等,不能显示的控制字符,能 在该字符前面加一个反斜杠“\”组成专用转义字符。常用转义字符表请看表 4-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
表 4-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++这样的赋值语句,编译时将会出错。
下面写个跑马灯程序来实验一下典型的常量使用方法。先来看看电路图吧。它是在上一篇的

实验电路的基础上增加几个 LED 组成的,也就是用 P1 口的全部引脚分别驱动一个 LED,电 路如图 4-1 所示。
新建一个 RunLED 的项目,主程序如下:
#include //预处理文件里面定义了特殊寄存器的名称如 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

}
}while(1);
}
for(a=0; a




图 4-1 八路跑马灯电路 编译运行上面的程序,然后按外部设备菜单 Peripherals-I/O Ports-Port1 就打开
Port1 的调试窗口了,如图 4-3 中的 2。这个时候程序运行了,但我们并不能在 Port1 调试窗口 上看到有会什么效果,这个时候能用鼠标左击图 4-3 中 1 旁边绿色的方条,点一下就有一个 小红方格再点一下又没有了,哪一句语句前有小方格程序运行到那一句时就停止了,就是设 置调试断点,同样图 4-2 中的 1 也是同样功能,分别是增加/移除断点、移除所有断点、允 许/禁止断点、禁止所有断点,菜单也有一样的功能,另外菜单中还有 breakpoints 可打开 断点设置窗口它的功能更强大,不过这里先不用它。在“P1 = design;”这一句设置一 个断点这个时候程序运行到这里就停住了,再留意一下 Port1 调试窗口,再按图 5-2 中的 2 的运 行键,程序又运行到设置断点的地方停住了,这个时候 Port1 调试窗口的状态又不一样了。也就是说 Port1 调试窗口模拟了 P1 口的电平状态,打勾为高电平,不打勾则为低电平,窗口中 P1
为 P1 寄存器的状态,Pins 为引脚的状态,注意的是如果是读引脚值之前必须把引脚对应的 寄存器置 1 才能正确读取。图 4-2 中 2 旁边的{}样的按钮分别为单步入,步越,步出和 执行到当前行。图中 3 为显示下一句将要执行的语句。图 4-3 中的 3 是 Watches 窗口可查 看各变量的当前值,数组和字串是显示其头一个地址,如本例中的 design 数组是保存在 code 存储区的首地址为 D:0x08,能在图中 4 Memory 存储器查看窗口中的 Address 地址中打入 D:0x08 就能查看到 design 各数据和存放地址了。如果你的 uVision2 没有显示这些窗口, 能在 View 菜单中打开在图 4-2 中 3 后面一栏的查看窗口快捷栏中打开。




图 4-2 调试用快捷菜单栏



图 4-3 各调试窗口
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2024-5-6 06:20 , 耗时 0.094954 秒, 18 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

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