【机械控制】特色专栏 机械控制 单片机C语言教程(4)C51常量

84 0

上一篇学习了 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++这a的赋值语句,编译时将会出错。

下面写个跑马灯程序来实验一下典型的常量使用方法。先来看看电路图吧。它是在上一篇的
 

实验电路的基础上增加几个 LED 组成的,也就是用 P1 口的全部引脚分别驱动一个 LED,电 路如图 4-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++)

{
 

}

}while(1);

}

for(a=0;  a<30000;  a++);  //延时一段时间

P1  =  design[b];  //读已定义的花样数据并写花样数据到 P1 口

程序中的花样数据能自己去定义,因这里我们的LED要AT89c51的P1引脚为低电平才会点亮,所以我们要向 P1 口的各引脚写数据 O 对应连接的 LED 才会被点亮,P1 口的八个引 脚刚好对应P1口特殊寄存器的八个二进位,如向P1口定数据0xFE,转成二进制就是

11111110,最低位 D0 为 0 这里 P1.0 引脚输出低电平,LED1 被点亮。如此类推,大家不难算 出自己想要做的效果了。大家编译书写看看,效果就出来,显示的速度您能根据需要调整 延时 a 的值,不要超过变量类型的值域就很行了。哦,您还没有实验板?那如何能知道程 序运行的结果呢?呵,不用急,这就来说说用 KEIL  uVision2 的软件仿真来调试 IO 口输出输入程序。

图 4-1 八路跑马灯电路编译运行上面的程序,然后按外部设备菜单 Peripherals-I/O  Ports-Port1就打开

Port1的调试窗口了,如图 4-3 中的2。这个时候程序运行了,但我们并不能在Port1调试窗口上看到有会什么效果,这个时候能用鼠标左击图 4-3 中1旁边绿色的方条,点一下就有一个 小红方格再点一下又没有了,哪一句语句前有小方格程序运行到那一句时就停止了,就是设置调试断点,同样图 4-2 中的 1 也是同样功能,分别是增加/移除断点、移除所有断点、允 许/禁止断点、禁止所有断点,菜单也有一样的功能,另外菜单中还有 Breakpoints 可打开断点设置窗口它的功能更强大,不过这里先不用它。在“P1  =  design[b];”这一句设置一 个断点这个时候程序运行到这里就停住了,再留意一下 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    各调试窗口

0

上一篇: 特色专栏 机械控制 单片机C语言教程(3)C51数据类型 下一篇: 特色专栏 机械控制 单片机C语言教程(5)C51变量

教程资料来源于网络,如有侵权,请及时联系平台进行删除

其他

课程目录
搜索
机械控制
特色专栏 机械控制 过载保护与温度保护的区别
特色专栏 机械控制 如何根据继电器电路图设计出PLC梯形图
特色专栏 机械控制 电压反馈电路的特点
特色专栏 机械控制 伺服系统设计步骤及方法
特色专栏 机械控制 PLC在使用过程中常见的技术故障分析及维护
特色专栏 机械控制 DCS系统的维护技巧
特色专栏 机械控制 三菱plc的常见问题
特色专栏 机械控制 电机工作原理图解
特色专栏 机械控制 34种自动控制原理图
特色专栏 机械控制 电气原理图和接线图识图方法
特色专栏 机械控制 实用电工口诀大全
特色专栏 机械控制 三相异步防爆电机和三相同步防爆电机的区别
特色专栏 机械控制 汽车采样机常见电气故障及处理方法
特色专栏 机械控制 传感器的选用
特色专栏 机械控制 新型视觉传感器
特色专栏 机械控制 压力传感器
特色专栏 机械控制 纳米技术传感器
特色专栏 机械控制 无线传感器技术前瞻
特色专栏 机械控制 CCD传感器与CMOS传感器的差异
特色专栏 机械控制 机械测试技术(1)绪论
特色专栏 机械控制 机械测试技术(2)测试装置的基本特性
特色专栏 机械控制 机械测试技术(3)常用传感器
特色专栏 机械控制 机械测试技术(4)信号调理
特色专栏 机械控制 智能控制理论与方法
特色专栏 机械控制 信号处理方法在齿轮故障诊断中的应用
特色专栏 机械控制 全硬件纯正弦SPWM逆变器后级详解
特色专栏 机械控制 继电器的符号和图片识别
特色专栏 机械控制 矩阵键盘C语言程序+电路图
特色专栏 机械控制 常用机床电路工作原理
特色专栏 机械控制 单片机C语言教程(1)建立第一个KeilC51项目
特色专栏 机械控制 单片机C语言教程(2)C51HEX文件的生成和单片机最小系统
特色专栏 机械控制 单片机C语言教程(3)C51数据类型
特色专栏 机械控制 单片机C语言教程(4)C51常量
特色专栏 机械控制 单片机C语言教程(5)C51变量
特色专栏 机械控制 单片机C语言教程(6)C51运算符和表达式
特色专栏 机械控制 单片机C语言教程(7)运算符和表达式(关系运算符)
特色专栏 机械控制 单片机C语言教程(8)运算符和表达式(位运算符)
特色专栏 机械控制 单片机C语言教程(10)C51表达式语句及仿真器
特色专栏 机械控制 单片机C语言教程(11)C51复合语句和条件语句
特色专栏 机械控制 单片机C语言教程(12)C51开关分支语句
特色专栏 机械控制 单片机C语言教程(13)C51循环语句
特色专栏 机械控制 单片机C语言教程(14)C51函数
特色专栏 机械控制 单片机C语言教程(15)C51数组的使用
特色专栏 机械控制 单片机C语言教程(16)C51指针的使用
特色专栏 机械控制 单片机C语言教程(17)C51结构、联合和枚举的使用
特色专栏 机械控制 BH61-ZK系列变频器在EVA发泡机上的应用
特色专栏 机械控制 常见日光灯接线原理图
特色专栏 机械控制 单开双控开关接线原理图
特色专栏 机械控制 电线接头接法图解
特色专栏 机械控制 plc梯形图程序编写步骤
特色专栏 机械控制 欧姆龙PLC接线时怎样区别输入输出点
特色专栏 机械控制 逻辑变量及基本逻辑运算
特色专栏 机械控制 常用计算机控制系统
特色专栏 机械控制 D/A转换器工作原理与性能指标
特色专栏 机械控制 三孔插座怎么接线
特色专栏 机械控制 墙壁开关插座安装接线过程图解
特色专栏 机械控制 控制电机的几种常见控制电路原理图
特色专栏 机械控制 控制三相电动机的三角形接法与星形接法
特色专栏 机械控制 多股电线接头接法图解
特色专栏 机械控制 变频器的工作原理
特色专栏 机械控制 初学PLC的六条方法
特色专栏 机械控制 PCB布局设计应遵循的原则
特色专栏 机械控制 智能家居系统布线注意事项
特色专栏 机械控制 三相四线电表怎么接线?
特色专栏 机械控制 电工接线标准
特色专栏 机械控制 监控摄像头安装图解
特色专栏 机械控制 变频器工作原理及接线方法
特色专栏 机械控制 机械控制理论-(1)绪论
特色专栏 机械控制 鼠标USB接口接线图及含义
特色专栏 机械控制 机械控制理论-(2)控制系统的数学模型及传递函数
特色专栏 机械控制 机械控制理论-(3)线性系统的时域分析
特色专栏 机械控制 机械控制理论-(5)控制系统的稳定性分析
特色专栏 机械控制 一大波接线图
特色专栏 机械控制 机械控制理论-(6)系统的校正方法
特色专栏 机械控制 嵌入式技术优缺点分析
特色专栏 机械控制 剩余电流式及测温式电气火灾监控探测器的设置
特色专栏 机械控制 TN-C系统、TN-C-S系统、TN-S系统的区别
特色专栏 机械控制 电工必懂的一些专业知识问答
特色专栏 机械控制 线路检漏电检测大法
特色专栏 机械控制 电梯电气安全装置检测方法
特色专栏 机械控制 机器人流行编程语言
特色专栏 机械控制 机电设备安装过程中常见问题和解决措施
特色专栏 机械控制 自动控制系统中的和种控制系统
特色专栏 机械控制 自动控制系统分类
特色专栏 机械控制 交流接触器的选用
特色专栏 机械控制 交流接触器的结构及原理
特色专栏 机械控制 单片机的运算符
特色专栏 机械控制 工业自动化仪表术语
特色专栏 机械控制 何谓电动机反接制动
特色专栏 机械控制 6种常用低压电气元件
特色专栏 机械控制 电动机紧急制动接线图
特色专栏 机械控制 数字电路识图方法
特色专栏 机械控制 短时间内学会plc的方法
特色专栏 机械控制 变频器绝缘电阻的测量
特色专栏 机械控制 识读建筑电气施工图步骤
特色专栏 机械控制 3种双控开关的接线方法
特色专栏 机械控制 增量式编码器的工作原理
特色专栏 机械控制 嵌入式开发七大技巧
特色专栏 机械控制 嵌入式系统硬件电路设计六大要点