IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 51单片机实战教程之学习起步(四C语言特殊数据类型及变量定义) -> 正文阅读

[嵌入式]51单片机实战教程之学习起步(四C语言特殊数据类型及变量定义)

? ? ? ?C语言中的特殊数据类型包含:结构体、枚举、公用体(联合)、数组、指针。特殊数据类型的定义与变量定义相类似。C语言是强类型语言必须先定义后使用。下面演示变量及数据类定义及使用:

  1. 变量与常量的定义

? ? ?1.1变量 在程序运行过程中其值可以改变的量就是变量。变量的定义格式如下:

? ? ? [存储类型] 数据类型 [存储器类型] 变量名

[]部分不是必须的。 变量有命名规则,与标识符命名规则一致。

存储类型有:? auto, extern, static, register 四种。系统默认是auto

Keil C51寄存器类型如下表:

Keil C51标识符名命名规则

1). ?变量名的开头必须是字母或下划线,不能是数字.

2).? 变量名不得使用Keil C51的保留字,为标准C的保留字+Keil扩展保留字。标准C的保留字(关键字)如下表:

?

Keil Cx51的扩展保留字如下:

3). ?变量名中的字母是区分大小写的。

?????? ?变量定义示例:

???????? char mData = 0x0F;//定义变量的同时,赋初值。

???????? static char flag = 0; //静态变量定义时,必须赋初值 ??

???????? char? a, b, c; ???//非静态变量可以不赋初值??

???????? extern char data myValue; //myValue 在别的程序中已定义

??????? 1.2 常量

? ? ? ? 有变量就有常量,在运行过程中值不能改变的量, 称为常量。编程过程中经常会用到常量,如π值,单片机频率,运放的放大倍数等。直接出现的常量为直接常量。用符号来表示,称为符号常量。符号常量也许遵从标识符命名规则。

? ? ? 符号常量的定义方法:

? ? ? ?1.2.1 使用宏定义 ??示例:#define PI 3.1415926

? ? ? ?1.2.2 变量命名法+const修饰 ?示例:const float PI= 3.1415;

? ? ? ?2.??结构体定义及其使用示例

? ? ? ?2.1?结构体定义? ?定义格式:?struct? 结构体体名{xxx};

? ? ? ?示例:

? ? ? ?struct? worker{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? unsigned? int? w_Num;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?unsigned char age;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?};//结构体名也是标识符,也需遵从标识符的命名规则,结构型数据定义,以分号结尾

? ? ? 2.2? 结构体使用 结构体定义(声明)完成后,还需定义结构体对象, 通过对象访问内部成员变量。??

? ? ???示例:

? ? ? ? ? ?struct ?worker zhangshang, lisi;

? ? ? ? ? ?zhangshang.w_Num =190;

? ? ? ? ? ?lisi.w_Num = 191;

? ? ? ? ? ?zhangshang.age = 30;

? ? ? ? ? ?lisi.age = 32;

? ? ?3 .??枚举的定义及使用??枚举的定义与结构体的定义方法类似。

? ? ??示例:

? ? ? 3.1 定义

? ? typedef enum

? {

? ? ? ? Pin0 = 0x01,

? ? ? ? Pin1 = 0x02,

? ? ? ? Pin2 = 0x04,

? ? ? ? Pin3 = 0x08,

? ? ? ? Pin4 = 0x10,

? ? ? ? Pin5 = 0x20,

? ? ? ?Pin6 = 0x40,

? ? ? ?Pin7 = 0x80

? ?} iOPin;? //枚举内部数据以逗号做分隔符

? ? ?3.2? 使用

? ? ? ? ? ?void InitPort(char port, ioPin? mypin); //定义的枚举限制mypin的取值范围。

? ? 4.??共用体(union)的定义及使用??共用体的定义方法相似,格式:union 公用体名 { XXX};

? ?4.1 定义示例:

? ?union adResult

?{

? ? unsigned int result

? ? char data[2];

? };

? ? 4.2 使用示例? ?公用体在8位单片机处理AD转换结果非常有用,一般单片机的AD都是10位或以上,AD结果分开存储在两个寄存器中,一个存高位一个存低位,定义前面共用体,将寄存器值分别读入char数组,就刚好组成AD值。

? int GetAdRes()

{

? ?adResult myRes;

? myRes.data[0] = 0x13;

? ?myRes.data[0] = 0x10;

return??myRes.result;

}

? ?5.?数组定义(或声明)及使用

? ?5.1? 一维数组 ?定义格式:数据类型 数组名[ 常量表达式];

? ?示例:

int data[20];

int i;

for(i = 0;? i< 20; i++)

{

?data[i] = i;

}

? ? ?5.2??二维数组??定义格式:数据类型 数组名[ 常量表达式][ 常量表达式];

? ? ?示例:

int pointArray[10][10];

???????? int i, i;

???????? for(i = 0; i <10; i++)

???????? {

??????????? for(j = 0; j <1 0; j++)

??????????? pointArray[i][j] = i+j;

}

? ?6.?指针变量定义及使用? ?定义格式: 数据类型 * 变量名;

? ?示例:

int a = 5

int* pint

worker* pworker

pint = &a; //获取变量a的地址

*pint = 10; //通过改变指针指向内存地址里的内容改变a的值

pworker -> age = 30; // 通过指针访问机构体的内部变量,并赋值

? ? ? ?

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-29 13:13:03  更:2021-10-29 13:14:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:30:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码