天津自貿(mào)區(qū)建設(shè)局網(wǎng)站網(wǎng)絡(luò)營(yíng)銷(xiāo)企業(yè)案例
作者介紹
劉滋瑞,男,銀川科技學(xué)院計(jì)算機(jī)與人工智能學(xué)院,2022級(jí)計(jì)算機(jī)與科學(xué)技術(shù)8班本科生,單片機(jī)原理及應(yīng)用課程第九組。
指導(dǎo)老師:王興澤
電子郵箱:602054774@qq.com
前言
本篇文章是參考《單片機(jī)原理及應(yīng)用(c語(yǔ)言版)第2版》楊居義·編著教材編寫(xiě)的筆記
由劉滋瑞、李旭東、馬學(xué)飛、張?jiān)涸骸⑼趿⒘滞瑢W(xué)共同完成此篇章,其中李旭東、馬學(xué)飛同學(xué)負(fù)責(zé)字符數(shù)組和查表的總結(jié);劉滋瑞、張?jiān)涸骸⑼趿⒘滞瑢W(xué)負(fù)責(zé)一維數(shù)組、二維數(shù)組、項(xiàng)目實(shí)踐總結(jié)。
?????????
項(xiàng)目11:C51的數(shù)組與項(xiàng)目實(shí)踐
在C語(yǔ)言中,數(shù)組屬于構(gòu)造數(shù)據(jù)類(lèi)型。一個(gè)數(shù)組可以分解為多個(gè)數(shù)據(jù)元素,這些數(shù)據(jù)元素可以是基本的數(shù)據(jù)類(lèi)型或者構(gòu)造類(lèi)型。按數(shù)組元素的類(lèi)型不同,數(shù)組可以分為數(shù)值數(shù)組、字符數(shù)組、指針數(shù)組、結(jié)構(gòu)數(shù)組等類(lèi)別
一、一維數(shù)組
1)一維數(shù)組的定義方式
類(lèi)型說(shuō)明符 數(shù)組名[整型常量表達(dá)式];
例如: int a[10];? 表示a為數(shù)組名,該數(shù)組有10個(gè)元素。
????????1.數(shù)組名的命名規(guī)則與變量名的命名規(guī)則相同,遵循標(biāo)識(shí)符命名規(guī)則。
????????2.數(shù)組名后是用方括號(hào)括起來(lái)的常量表達(dá)式,不能用圓括號(hào)。
????????3.常量表達(dá)式表示元素的個(gè)數(shù),即數(shù)組的長(zhǎng)度。
????????4.常量表達(dá)式中可以包括常量和符號(hào)常量,不能包含變量。(C51不允許對(duì)數(shù)組的大小進(jìn)行動(dòng)態(tài)定義,即數(shù)組大小不依賴(lài)于程序運(yùn)行過(guò)程中變量的值。)
2)一維數(shù)組的初始化
對(duì)數(shù)組元素的初始化可以用以下方法實(shí)現(xiàn)。
? ? ? ? 1.在定義數(shù)組時(shí)對(duì)數(shù)組元素賦予初值。
例如: int a[10]={0,1,2,3,4,5,6,7,8,9};
將數(shù)組元素的初值依次放在一對(duì)花括號(hào)內(nèi)。經(jīng)過(guò)上面的定義和初始化之后,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數(shù)組有10個(gè)元素,但花括號(hào)內(nèi)只提供5個(gè)初值,其表示只給前5個(gè)元素賦初值,后面的5個(gè)元素值為0。
? ? ? ? 3.在對(duì)全部數(shù)組元素賦初值時(shí),可以不指定數(shù)組的長(zhǎng)度。
例如:int a[5]={1,2,3,4,5};
也可以寫(xiě)成:int a[]={1,2,3,4,5};
3)一維數(shù)組元素的引用
數(shù)組必須先定義,后使用。C51語(yǔ)言規(guī)定只能逐個(gè)引用數(shù)組元素而不能一次引用整個(gè)數(shù)組。數(shù)組元素的引用形式為
數(shù)組名[下標(biāo)]
下標(biāo)可以是整型常量或整型表達(dá)式,如a[0]=a[5]+a[7]-a[2*3];。
二、二維數(shù)組
1)二維數(shù)組定義的一般形式
類(lèi)型說(shuō)明符 數(shù)組名[常量表達(dá)式][常量表達(dá)式];
例如:int a[3][4],b[5][10];
定義a為3×4(3行4列)的數(shù)組,b為5×10(5行10列)的數(shù)組。數(shù)組元素為int型數(shù)據(jù)。注意,不能寫(xiě)成“int a[3,4],b[5,10]”;。
2)二維數(shù)組的初始化
(1)按行賦初值。
數(shù)據(jù)類(lèi)型 數(shù)組名[行常量表達(dá)式][列常量表達(dá)式]={{第0行初值表},{第1行初值表},…,{最后1行初值表}};
(2)按二維數(shù)組在內(nèi)存中的排列順序給各元素賦初值。
數(shù)據(jù)類(lèi)型 數(shù)組名[行常量表達(dá)式][列常量表達(dá)式]={初值表};
3)二維數(shù)組元素的引用
?數(shù)組名[行下標(biāo)表達(dá)式][列下標(biāo)表達(dá)式]
說(shuō)明如下:
(1)“行下標(biāo)表達(dá)式”和“列下標(biāo)表達(dá)式”都應(yīng)是整型表達(dá)式或符號(hào)常量。
(2)“行下標(biāo)表達(dá)式”和“列下標(biāo)表達(dá)式”的值都應(yīng)在已定義數(shù)組大小的范圍內(nèi)。
(3)對(duì)基本數(shù)據(jù)類(lèi)型的變量能進(jìn)行的操作也適用于相同數(shù)據(jù)類(lèi)型的二維數(shù)組元素。
三、字符數(shù)組
字符數(shù)組就是元素類(lèi)型為字符型(char)的數(shù)組,用來(lái)存放字符。在字符數(shù)組中,一個(gè)元素存放一個(gè)字符??梢杂米址麛?shù)組來(lái)存儲(chǔ)長(zhǎng)度不同的字符串。
1)字符數(shù)組的定義
字符數(shù)組的定義方式與數(shù)組的定義方式類(lèi)似。例如char str[10],表示定義str為一個(gè)有10個(gè)字符的一維數(shù)組。
2)字符數(shù)組賦初值
最直接的方法是將各字符逐個(gè)賦給數(shù)組中的各元素。例如:
Char str[10]
= {’M’,’I’,’A’,’N’,’’,’Y’,’A’,’N’,’G’,’\0’};
C語(yǔ)言還允許用字符串直接給字符數(shù)組賦初值。該方法有以下兩種形式:
char str[10]= {"Cheng Du" };
char str[ 10]= "Bei Jing";
四、查表
在C51編程中,“查表”是利用數(shù)組來(lái)實(shí)現(xiàn)的高效數(shù)據(jù)獲取方式。
在實(shí)際單片機(jī)的應(yīng)用系統(tǒng)中,希望單片機(jī)能夠進(jìn)行高精度的數(shù)學(xué)運(yùn)算,但希望轉(zhuǎn)入其擅長(zhǎng)的領(lǐng)域,這個(gè)時(shí)候便可用表格查找法,可避免計(jì)算,實(shí)現(xiàn)精簡(jiǎn)。
五、項(xiàng)目實(shí)踐-用數(shù)組控制P1口8只LED的顯示狀態(tài)
1)任務(wù)描述
??? 用數(shù)組控制P1口8只LED的顯示狀態(tài)。設(shè)計(jì)一個(gè)程序用無(wú)符號(hào)字符型數(shù)組實(shí)現(xiàn)以下功能:先設(shè)置一個(gè)變量i,當(dāng)i=1時(shí),LED1發(fā)光;當(dāng)i=2時(shí),LED1、LED2發(fā)光;當(dāng)i=3時(shí),LED1~LED3發(fā)光……當(dāng)i=8時(shí),LED1~LED8都發(fā)光;當(dāng)i=9時(shí),LEDI- LED8都熄滅;當(dāng)i=1時(shí),LED1發(fā)光……依次循環(huán)。
2)程序設(shè)計(jì)
#include<reg51.h>????????????????? //包含單片機(jī)寄存器的頭文件
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};
//定義無(wú)符號(hào)字符型數(shù)組,數(shù)組元素為點(diǎn)亮LED狀態(tài)控制碼
??? while(1)??????????????????? //無(wú)線循環(huán)
??? {
?????? for(i=0;i<9;i++)
?????? {
?????????? P1=Tab[i];?????????? //引用數(shù)組元素,傳送至P1口點(diǎn)亮LED
?????????? delay();???????????? //延時(shí)
????????}
}
}
3)仿真結(jié)果圖