欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1|回復: 0
收起左側

第6章 中斷與數碼管動態顯示6.1 6.2 6.3

[復制鏈接]
ID:1167894 發表于 2026-3-30 14:27 | 顯示全部樓層 |閱讀模式

        中斷是單片機系統重點中的重點,因為有了中斷,單片機就具備了快速協調多模塊工作的能力,可以完成復雜的任務。本章將首先帶領大家學習一些必要的C語言基礎知識,然后講解數碼管動態顯示的原理,并最終借助于中斷系統來完成實用的數碼管顯示程序。
6.1  C語言的數組
6.1.1 數組的基本概念
        第4章已經學過變量的基本類型,比如char、int等等。這種類型描述的都是單個具有特定意義的數據,當要處理擁有同類意義但是卻包含很多個數據的時候,就可以用到數組了,比如數碼管的真值表,就是用一個數組來表達的。
從概念上講,數組是具有相同數據類型的有序數據的組合,一般來講,數組定義后滿足以下三個條件。
1、具有相同的數據類型;
2、具有相同的名字;
3、在存儲器中是被連續存放的。
        比如上節課定義的數碼管真值表,如果把關鍵字code去掉,數組元素將被保存在RAM中,在程序中可讀可寫,同時也可以在中括號里邊標明這個數組所包含的元素個數,比如:
        unsigned char LedChar[16] = {
            0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
            0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
        };
        在這個數組中的每個值都稱之為數組的一個元素,這些元素都具備相同的數據類型就是unsigned char型,它們有一個共同的名字LedChar,不管放到RAM中還是FLASH中,都是存放在一塊連續的存儲空間里的。
        有一點要特別注意,這個數組一共有16(中括號里面的數值)個元素,但是數組的單個元素的表達方式——下標是從0開始,因此實際上上邊這個數組的首個元素LedChar[0]的值是0xC0,而LedChar[15]的值是0x8E,下標從0到15一共是16個元素。
        LedChar這個數組只有一個下標,稱之為一維數組,還有兩個下標和多個下標的,稱之為二維數組和多維數組。比如unsigned char a[2][3];表示這是一個2行3列的二維數組。在大多數情況下使用的是一維數組,對于初學來說,先來研究一維數組,多維數組等遇到了再了解。
6.1.2 數組的聲明
一維數組的聲明格式如下:
    數據類型  數組名 [數組長度];
1、數組的數據類型聲明的是該數組的每個元素的類型,即一個數組中的元素具有相同的數據類型。
2、數組名的聲明要符合C語言固定的標識符的聲明要求,只能由字母、數字、下劃線這三種符號組成,且第一個字符只能是字母或者下劃線。
3、方括號中的數組長度是一個常量或常量表達式,并且必須是正整數。
6.1.3 數組的初始化
數組在進行聲明的同時可以進行初始化操作,格式如下:
    數據類型  數組名 [數組長度] = {初值列表};
以上節課用的數碼管的真值表為例來講解注意事項。
        unsigned char LedChar[16] = {
            0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
            0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E
        };
1、初值列表里的數據之間要用逗號隔開;
2、初值列表里的初值的數量必須等于或小于數組長度,當小于數組長度時,數組的后邊沒有賦初值的元素由系統自動賦值為0。
3、若給數組的所有元素都賦初值,那么可以省略數組的長度。
4、系統為數組分配連續的存儲單元的時候,數組元素的相對次序由下標來決定,就是說LedChar[0]、LedChar[1]……LedChar[15]是按照順序緊挨著依次排下來的。
6.1.4 數組的使用和賦值
        在C語言程序中,是不能一次使用整個數組的,只能使用數組的單個元素。一個數組元素相當于一個變量,使用數組元素的時候與使用相同數據類型的變量的方法是一樣的。比如LedChar這個數組,如果沒加code關鍵字,那么它可讀可寫,可以寫成a = LedChar[0]這樣來把數組的一個元素的值送個a這個變量,也可以寫成LedChar[0] = a這樣把a這個變量的值送給數組中的一個元素,以下三點要注意:
1、引用數組的時候,那個方括號里的數字代表的是數組元素的下標,而數組初始化的時候方括號里的數字代表的是這個數組中元素的總數。
2、數組元素的方括號里的下標可以是整型常數,整型變量或者表達式,而數組初始化的時候方括號里的數字必須是常數不能是變量。
3、數組整體賦值只能在初始化的時候進行,程序執行代碼中只能對單個元素賦值。
6.2  if語句
if語句前邊程序已用過多次,本小節系統的介紹一下,方便后邊的深入學習。if語句有兩個關鍵字:if和else,把這兩個關鍵字翻譯一下就是:“如果”和“否則”。if語句一共有三種格式,分別來看。
1、if語句的默認形式:
        if (條件表達式)
        {
            語句1;
        }
        其執行過程是,if(即如果)條件表達式的值為“真”,則執行語句1;如果條件表達式的值為“假”,則不執行語句1。
這里要提醒一點,C語言一個分號表示一條語句的結束,因此如果if后邊只有一條執行語句的時候,可以省略大括號,但是如果有多條執行語句的話,必須加上大括號。
那么
        if (sec >= 16)
        {
            sec = 0;
        }
        當sec的值大于或等于16的時候,括號里的值才是“真”,就執行sec=0這一句,當sec的值小于16時,括號里就為“假”,就不執行這一句。
2、if...else語句
        有些情況下,除了要在括號里條件滿足時執行相應的語句外,在不滿足該條件的時候,也要執行一些另外的語句,這時候就用到了if...else語句,它的基本語法形式是:
        if (條件表達式)
        {
            語句1;
        }
        else
        {
            語句2;
        }
比如上一章的最后一段程序也可以寫成:
        P0 = LedChar[sec];
        if (sec >= 15)
        {
            sec = 0;
        }
        else
        {
            sec++;
        }
        這個程序可以修改后下載到單片機里驗證一下,程序邏輯自己動腦筋分析,注意條件表達式內16到15的變化,想一下為什么,這里就不多解釋了。
3、if....else if語句
        if...esle語句是一個二選一的語句,或者執行if分支后的語句,或者執行else分支后的語句。還有一種多選一的用法就是if...else if語句。他的基本語法格式是:
        if (條件表達式1)       {語句1;}
        else if (條件表達式2) {語句2;}
        else if (條件表達式3) {語句3;}
        ... ...
        else                    {語句n;}
        執行過程是:依次判斷條件表達式的值,當出現某個值為“真”時,則執行相對應的語句,然后跳出整個if的語句塊,執行“語句n”后面的程序;如果所有的表達式都為“假”,則執行else分支的“語句n”后,再執行“語句n”后邊的程序。
if語句在C語言編程中使用頻率很高,用法也不復雜,所以必須要熟練掌握。
6.3  switch語句
        用if....else語句在處理多分支的時候,分支太多就會顯得不方便,且容易出現if和else配對錯誤的情況,在C語言中提供了另外一種多分支選擇的語句——switch語句,它的基本語法格式如下:
        switch (表達式)
        {
            case 常量表達式1: 語句1;
            case 常量表達式2: 語句2;
            ......
            case 常量表達式n: 語句n;
            default: 語句n+1;
        }
        它的執行過程是:首先計算“表達式”的值,然后從第一個case開始,將“表達式”的值與“常量表達式x”進行比較,如果與當前常量表達式的值不相等,就不執行冒號后邊的語句x,一旦發現和某個常量表達式的值相等了,那么它會執行之后所有的語句,如果直到最后一個“常量表達式n”都沒有找到相等的值,那么就執行default后的“語句n+1”。請特別注意一點,當找到一個相等的case分支后,會執行該分支以及之后所有分支的語句,很明顯這通常不是程序想要的結果。
        在C語言中,有一條break語句,作用是跳出當前的循環語句,包括for循環和while循環,同時,它還能用來結束switch語句塊。switch的分支語句一共有n+1種,而通常希望的是選擇其中的一個分支來執行,執行完后就結束整個switch語句,繼續執行switch后面的語句,此時就可以通過在每個分支后加上break語句來實現了。
        switch (表達式)
        {
            case 常量表達式1: 語句1; break;
            case 常量表達式2: 語句2; break;
            ......
            case 常量表達式n: 語句n; break;
            default: 語句n+1; break;
        }
        加了這個break語句后,一旦“常量表達式x”與“表達式”的值相等了,那么就執行“語句x”,執行完畢后,由于有了break則直接跳出switch語句,繼續執行switch語句后面的程序了,這樣就可以避免執行不必要的語句。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表