单片机原理及应用笔记:C51数组与项目实践

作者介绍

刘滋瑞,男,银川科技学院计算机与人工智能学院,2022级计算机与科学技术8班本科生,单片机原理及应用课程第九组。

指导老师:王兴泽

电子邮箱:602054774@qq.com

前言

本篇文章是参考《单片机原理及应用(c语言版)第2版》杨居义·编著教材编写的笔记

由刘滋瑞、李旭东、马学飞、张院院、王立林同学共同完成此篇章,其中李旭东、马学飞同学负责字符数组和查表的总结;刘滋瑞、张院院、王立林同学负责一维数组、二维数组、项目实践总结。

项目11:C51的数组与项目实践

在C语言中,数组属于构造数据类型。一个数组可以分解为多个数据元素,这些数据元素可以是基本的数据类型或者构造类型。按数组元素的类型不同,数组可以分为数值数组、字符数组、指针数组、结构数组等类别

一、一维数组

1)一维数组的定义方式

类型说明符 数组名[整型常量表达式];

例如: int a[10]; 表示a为数组名,该数组有10个元素。

1.数组名的命名规则与变量名的命名规则相同,遵循标识符命名规则。

2.数组名后是用方括号括起来的常量表达式,不能用圆括号。

3.常量表达式表示元素的个数,即数组的长度。

4.常量表达式中可以包括常量和符号常量,不能包含变量。(C51不允许对数组的大小进行动态定义,即数组大小不依赖于程序运行过程中变量的值。)

2)一维数组的初始化

对数组元素的初始化可以用以下方法实现。

1.在定义数组时对数组元素赋予初值。

例如: int a[10]={0,1,2,3,4,5,6,7,8,9};

将数组元素的初值依次放在一对花括号内。经过上面的定义和初始化之后,a[0]=0,a[1]=1,a[2]=2,a[3]=3,a[4]=4,a[5]=5,a[6]=6,a[7]=7,a[8]=8,a[9]=9。

2.可以只给一部分元素赋值。

例如:int a[10]={0,1,2,3,4};

定义a数组有10个元素,但花括号内只提供5个初值,其表示只给前5个元素赋初值,后面的5个元素值为0。

3.在对全部数组元素赋初值时,可以不指定数组的长度。

例如:int a[5]={1,2,3,4,5};

也可以写成:int a[]={1,2,3,4,5};

3)一维数组元素的引用

数组必须先定义,后使用。C51语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素的引用形式为

数组名[下标]

下标可以是整型常量或整型表达式,如a[0]=a[5]+a[7]-a[2*3];。

二、二维数组

1)二维数组定义的一般形式

类型说明符 数组名[常量表达式][常量表达式];

例如:int a[3][4],b[5][10];

定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。数组元素为int型数据。注意,不能写成"int a[3,4],b[5,10]";。

2)二维数组的初始化

(1)按行赋初值。

数据类型 数组名[行常量表达式][列常量表达式]={{第0行初值表},{第1行初值表},...,{最后1行初值表}};

(2)按二维数组在内存中的排列顺序给各元素赋初值。

数据类型 数组名[行常量表达式][列常量表达式]={初值表};

3)二维数组元素的引用

数组名[行下标表达式][列下标表达式]

说明如下:

(1)"行下标表达式"和"列下标表达式"都应是整型表达式或符号常量。

(2)"行下标表达式"和"列下标表达式"的值都应在已定义数组大小的范围内。

(3)对基本数据类型的变量能进行的操作也适用于相同数据类型的二维数组元素。

三、字符数组

字符数组就是元素类型为字符型(char)的数组,用来存放字符。在字符数组中,一个元素存放一个字符。可以用字符数组来存储长度不同的字符串。

1)字符数组的定义

字符数组的定义方式与数组的定义方式类似。例如char str[10],表示定义str为一个有10个字符的一维数组。

2)字符数组赋初值

最直接的方法是将各字符逐个赋给数组中的各元素。例如:

Char str[10]

= {'M','I','A','N','','Y','A','N','G','\0'};

C语言还允许用字符串直接给字符数组赋初值。该方法有以下两种形式:

char str[10]= {"Cheng Du" };

char str[ 10]= "Bei Jing";

四、查表

在C51编程中,"查表"是利用数组来实现的高效数据获取方式。

在实际单片机的应用系统中,希望单片机能够进行高精度的数学运算,但希望转入其擅长的领域,这个时候便可用表格查找法,可避免计算,实现精简。

五、项目实践-用数组控制P1口8只LED的显示状态

1)任务描述

用数组控制P1口8只LED的显示状态。设计一个程序用无符号字符型数组实现以下功能:先设置一个变量i,当i=1时,LED1发光;当i=2时,LED1、LED2发光;当i=3时,LED1~LED3发光......当i=8时,LED1~LED8都发光;当i=9时,LEDI- LED8都熄灭;当i=1时,LED1发光......依次循环。

2)程序设计

#include<reg51.h> //包含单片机寄存器的头文件

void delay(void)

{

unsigned char i,j;

for(i=0;i<200;i++)

for(j=0;j<250;j++);

}

void main(void)

{

unsigned char i;

unsigned char

code Tab[]={0xfe,0xfc,0xf8,0xf,0xe0,0xc0,0x80,0x00,0xff};

//定义无符号字符型数组,数组元素为点亮LED状态控制码

while(1) //无线循环

{

for(i=0;i<9;i++)

{

P1=Tab[i]; //引用数组元素,传送至P1口点亮LED

delay(); //延时

}

}

}

3)仿真结果图

相关推荐
Rousson2 小时前
硬件学习笔记--82 连接器的选用原则与流程
笔记·单片机·学习
三佛科技-134163842122 小时前
高速风筒方案开发 高速风筒MCU控制方案设计
单片机·嵌入式硬件·智能家居·pcb工艺
清风6666667 小时前
基于单片机的螺旋藻生长大棚PH智能控制设计
单片机·嵌入式硬件·毕业设计·课程设计
ting_zh9 小时前
微控制器(Micro Controller Unit, MCU)基础整理
单片机·嵌入式硬件
清风6666669 小时前
基于单片机的图书馆智能座位管理平台
数据库·单片机·嵌入式硬件·毕业设计·课程设计
得单片机的运10 小时前
STM32的以太网的搭建
stm32·单片机·嵌入式硬件·物联网·以太网·iot·w5500
酷飞飞11 小时前
RTC和看门狗基于GD32F407VE的天空星的配置
stm32·单片机·嵌入式硬件·mcu
WD1372980155713 小时前
WD5030A,24V降5V,15A 大电流,应用于手机、平板、笔记本充电器
stm32·单片机·嵌入式硬件·智能手机·汽车·电脑·51单片机
日更嵌入式的打工仔13 小时前
GPIO 中断通用配置指南
stm32·单片机·嵌入式硬件
平凡灵感码头13 小时前
基于 STM32 的智能门锁系统,系统界面设计
stm32·单片机·嵌入式硬件