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