單片機(jī)的C語言_第1頁
單片機(jī)的C語言_第2頁
單片機(jī)的C語言_第3頁
單片機(jī)的C語言_第4頁
單片機(jī)的C語言_第5頁
已閱讀5頁,還剩105頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

關(guān)于單片機(jī)的C語言第1頁,講稿共110頁,2023年5月2日,星期三51匯編語言能直接操作單片機(jī)的系統(tǒng)硬件,指令執(zhí)行速度快。但其程序可讀性差,且編寫、移植困難。

第2頁,講稿共110頁,2023年5月2日,星期三C51是為51系列單片機(jī)設(shè)計(jì)的一種C語言,其特點(diǎn):C51語言已成為51系列單片機(jī)程序開發(fā)的主流軟件方法。結(jié)構(gòu)化語言,代碼緊湊——效率可與匯編語言媲美接近真實(shí)語言,程序可讀性強(qiáng)——易于調(diào)試、維護(hù)庫函數(shù)豐富,編程工作量小——產(chǎn)品開發(fā)周期短機(jī)器級控制能力,功能很強(qiáng)——適合于嵌入式系統(tǒng)開發(fā)與匯編指令無關(guān),易于掌握——在單片機(jī)基礎(chǔ)上上手快第3頁,講稿共110頁,2023年5月2日,星期三C51與標(biāo)準(zhǔn)C語言對比相同之處:語法規(guī)則、程序結(jié)構(gòu)、編程方法差異之處:數(shù)據(jù)類型、存儲模式、中斷處理教學(xué)安排:①

介紹C51語言的數(shù)據(jù)結(jié)構(gòu)及C51編程手段;②

介紹單片機(jī)I/O口的初步應(yīng)用及C51編程方法。第4頁,講稿共110頁,2023年5月2日,星期三1C51的程序結(jié)構(gòu)

2C51的數(shù)據(jù)結(jié)構(gòu)3C51仿真開發(fā)環(huán)境4C51初步應(yīng)用編程

第5頁,講稿共110頁,2023年5月2日,星期三C51單片機(jī)軟件系統(tǒng)結(jié)構(gòu)Project(可包含若干程序文件)C51(庫函數(shù))LIB(庫函數(shù))(頭文件)KeilC51(μVionsion3)Main(函數(shù))File_1(*.c)Func_k(函數(shù))…….………File_n(*.*)Func_1(函數(shù))Func_n(函數(shù))…….用戶編程編譯系統(tǒng)第6頁,講稿共110頁,2023年5月2日,星期三①程序由函數(shù)組成(一個主函數(shù),或一個主函數(shù)和若干自定義函數(shù));②利用預(yù)處理命令對變量或函數(shù)進(jìn)行集中定義或說明;③函數(shù)和變量都需遵循先定義后使用的基本原則;④主函數(shù)中的所有語句執(zhí)行完畢,則程序結(jié)束。C51與標(biāo)準(zhǔn)C程序結(jié)構(gòu)完全相同第7頁,講稿共110頁,2023年5月2日,星期三舉例:LED閃爍控制功能第8頁,講稿共110頁,2023年5月2日,星期三預(yù)處理命令---------函數(shù)說明------------全局變量定義------

主函數(shù)------------調(diào)用函數(shù)------------局部變量定義---------

程序體

程序體------第9頁,講稿共110頁,2023年5月2日,星期三1C51的程序結(jié)構(gòu)

2C51的數(shù)據(jù)結(jié)構(gòu)

1.C51的變量

2.C51的指針3C51仿真開發(fā)環(huán)境4C51初步應(yīng)用編程

第10頁,講稿共110頁,2023年5月2日,星期三在程序執(zhí)行過程中,數(shù)值可以發(fā)生改變的量稱為變量。變量名與存儲單元地址相對應(yīng),變量值與存儲單元的內(nèi)容相對應(yīng)。例如在哈佛結(jié)構(gòu)的存儲空間中如何建立變量概念?

第11頁,講稿共110頁,2023年5月2日,星期三【存儲種類】

數(shù)據(jù)類型

【存儲類型】

變量名存儲地址(標(biāo)準(zhǔn)C)作用范圍(標(biāo)準(zhǔn)C)*方括號項(xiàng)——可以缺省C51變量定義的四個要素:存儲空間(C51特有)數(shù)據(jù)格式(C51擴(kuò)充)第12頁,講稿共110頁,2023年5月2日,星期三

①自動變量(auto)——在函數(shù)內(nèi)部定義的變量,退出函數(shù)后,分配給該變量的存儲單元即自行消失(局部變量)?!敬鎯ΨN類】

數(shù)據(jù)類型

【存儲類型】

變量名②外部變量(extern)——在函數(shù)外部定義的變量,可始終保持變量的數(shù)值(全局變量)。

【強(qiáng)調(diào)】一個外部變量只能被定義一次,在定義文件之外的地方使用時需用extern進(jìn)行聲明。③靜態(tài)變量(static)——靜態(tài)局部變量/靜態(tài)全局變量④寄存器變量(register)——以寄存器為存儲空間的變量*若省略存儲種類選項(xiàng),則變量默認(rèn)為自動變量第13頁,講稿共110頁,2023年5月2日,星期三數(shù)據(jù)的不同格式叫做數(shù)據(jù)類型*有符號數(shù)類型可以忽略signed標(biāo)識符標(biāo)準(zhǔn)C語言的數(shù)據(jù)類型【存儲種類】

數(shù)據(jù)類型

【存儲類型】

變量名第14頁,講稿共110頁,2023年5月2日,星期三C51擴(kuò)充數(shù)據(jù)類型:bit、sfr或sfr16、sbitbit型用bit定義一個位變量,語法規(guī)則如下:bitbit_name

[=

常數(shù)0~1];例如:bitdoor=0;//定義一個叫door的變量且初值為0與標(biāo)準(zhǔn)C的變量定義及初始化用法是一致的,例如:

inta=5;unsignedcharsum=0x10;第15頁,講稿共110頁,2023年5月2日,星期三Sfr或sfr16型sfr定義特殊功能寄存器SFR,語法規(guī)則如下:

sfr

sfr16sfr_name=字節(jié)地址常數(shù);第16頁,講稿共110頁,2023年5月2日,星期三例如,sfrP0=0x80;//定義P0口地址80H

sfrPCON=0x87;//定義PCON地址87H

sfr16DPTR=0x82;//定義DPTR的低端地址82H第17頁,講稿共110頁,2023年5月2日,星期三sbit型將SFR范圍內(nèi)的位地址(0x80~0xFF)定義為位變量序號特殊功能寄存器名稱符號字節(jié)地址位地址第18頁,講稿共110頁,2023年5月2日,星期三

1)sbit

bit_name=

位地址常數(shù);

將位于SFR字節(jié)地址內(nèi)的絕對位地址定義為位變量名。例如,sbitCY=0xD7;

序號特殊功能寄存器名稱符號字節(jié)地址位地址第19頁,講稿共110頁,2023年5月2日,星期三2)sbitbit_name=

sfr_name

^

位位置;

將已有定義的SFR的0~7位定義為位變量名。

例如:sfrPSW=0xD0;sbitCY=PSW^7;

序號特殊功能寄存器名稱符號字節(jié)地址位地址第20頁,講稿共110頁,2023年5月2日,星期三3)sbitbit_name=

sfr字節(jié)地址

^

位位置;

將SFR字節(jié)地址的相對位地址定義為位變量名。

例如:sbitCY=0xD0^7;

序號特殊功能寄存器名稱符號字節(jié)地址位地址第21頁,講稿共110頁,2023年5月2日,星期三C51編譯器在頭文件“reg51.h”中定義了全部sfr/sfr16和sbit變量。用一條預(yù)處理命令#include<reg51.h>把這個頭文件包含到C51程序中,無需重定義即可直接使用它們的名稱。第22頁,講稿共110頁,2023年5月2日,星期三應(yīng)用舉例:第23頁,講稿共110頁,2023年5月2日,星期三51系列單片機(jī)有三個邏輯存儲空間:【存儲種類】

數(shù)據(jù)類型

【存儲類型】

變量名片內(nèi)數(shù)據(jù)存儲器,片外數(shù)據(jù)存儲器和程序存儲器。第24頁,講稿共110頁,2023年5月2日,星期三建立C51存儲類型與存儲空間的對應(yīng)關(guān)系data區(qū)xdata區(qū)code區(qū)bdata區(qū)第25頁,講稿共110頁,2023年5月2日,星期三C51的存儲類型與存儲空間對應(yīng)關(guān)系表

第26頁,講稿共110頁,2023年5月2日,星期三C51編譯器指定了三種默認(rèn)存儲類型:【存儲種類】

數(shù)據(jù)類型

【存儲類型】

變量名C51編譯器的三種編譯模式:小編譯模式(SMALL)、緊湊編譯模式(COMPACT)和大編譯模式(LARGE)第27頁,講稿共110頁,2023年5月2日,星期三變量名可以由字母、數(shù)字和下劃線三種字符組成,且第一個字符必須為字母或下劃線,變量名長度隨編譯系統(tǒng)而定。變量名具有字母大小寫的敏感性,如SUM和sum代表不同的變量。強(qiáng)調(diào):頭文件中定義的變量都是大寫的【存儲種類】

數(shù)據(jù)類型

【存儲類型】

變量名第28頁,講稿共110頁,2023年5月2日,星期三C51擴(kuò)展的若干關(guān)鍵字一覽表

變量名不得使用標(biāo)準(zhǔn)C語言和C51語言的關(guān)鍵字。第29頁,講稿共110頁,2023年5月2日,星期三unsignedchardatasystem_status=0;

//定義system_status為無符號字符型自動變量,該變量位于data區(qū)中且初值為0。數(shù)據(jù)結(jié)構(gòu)定義舉例變量名為system_status位與片內(nèi)RAM區(qū)無符號字符型自動型初值為零第30頁,講稿共110頁,2023年5月2日,星期三unsignedcharbdatastatus_byte;

unsignedintcodeunit_id[2]={0x1234,0x89ab};

staticcharm,n;

//定義status_byte為無符號字符型自動變量,該變量位于bdata區(qū)//定義unit_id[2]為無符號整型自動變量,該變量位于code區(qū)中,是長度為2的數(shù)組,且初值為0x1234和0x89ab。//定義m和n為2個位于data區(qū)中的有符號字符型靜態(tài)變量。第31頁,講稿共110頁,2023年5月2日,星期三1C51的程序結(jié)構(gòu)

2C51的數(shù)據(jù)結(jié)構(gòu)

1.C51的變量

2.C51的指針3C51與匯編語言的混合編程4C51仿真開發(fā)環(huán)境5C51初步應(yīng)用編程

第32頁,講稿共110頁,2023年5月2日,星期三C51的指針與標(biāo)準(zhǔn)C的指針幾乎是一樣的,都可以簡單理解為“存儲地址的變量”,例如:2.C51的指針

int*b=&a;取變量a的地址指針變量inta;//定義一個整型變量a//定義一個整型指針變量b,其初值為a的地址第33頁,講稿共110頁,2023年5月2日,星期三在C51里定義指針,還需要額外指明兩個問題:

1)指針變量自身位于哪個存儲區(qū)域;

2)該指針的值代表的是哪個存儲區(qū)域里的地址。以SMALL編譯模式(默認(rèn)data區(qū)存儲類型)為例:例1charxdataa=‘A’;//定義xdata區(qū)里的變量a,初值‘A’char*ptr=&a;解:ptr是一個char型的指針變量,它本身位于data存儲區(qū),它的初值是位于xdata區(qū)里變量a的地址?!敬鎯ΨN類】數(shù)據(jù)類型【存儲類型】變量名第34頁,講稿共110頁,2023年5月2日,星期三解:

unsigned

charidataa=‘A’;例2

若ptr是一個unsignedchar型指針變量,它本身位于idata存儲區(qū),它的初值是位于idata存儲區(qū)里的unsignedchar型自動變量a(初值為‘A’)的地址。試據(jù)此完成相關(guān)變量的定義和初始化。

unsigned

char*idataptr=&a;第35頁,講稿共110頁,2023年5月2日,星期三C51提供兩種指針:通用指針和具體指針通用指針

占用3字節(jié)而對于dataidatapdata數(shù)據(jù)類型,實(shí)際只需要2字節(jié)。通用指針代碼比具體指針代碼的執(zhí)行速度要慢。具體指針使用者規(guī)定指針指向存儲區(qū)段的指針:

Chardata*str;指針指向data區(qū)中的char型數(shù)據(jù)1字節(jié)

intxdata*prt;指針指向xdata區(qū)中的int型數(shù)據(jù)2字節(jié)使用具體指針可節(jié)省存儲空間,代碼執(zhí)行速度快。

第36頁,講稿共110頁,2023年5月2日,星期三1C51的程序結(jié)構(gòu)

2C51的數(shù)據(jù)結(jié)構(gòu)3C51仿真開發(fā)環(huán)境

1、Keil的編譯環(huán)境μVision32、μVision3的基本使用方法4C51初步應(yīng)用編程

第37頁,講稿共110頁,2023年5月2日,星期三Keil是德國KeilSoftware公司的51單片機(jī)開發(fā)軟件包,包括C編譯器、宏匯編、連接器、庫管理及仿真調(diào)試器,通過一個集成開發(fā)環(huán)境(uVisoin3)組合起來。第38頁,講稿共110頁,2023年5月2日,星期三μVision3的軟件界面包括四大組成部分,即菜單工具欄,項(xiàng)目管理窗口,文件窗口和輸出窗口。第39頁,講稿共110頁,2023年5月2日,星期三μVision3中共有11個下拉菜單。工具欄的位置和數(shù)量可以通過設(shè)置選定和移動。第40頁,講稿共110頁,2023年5月2日,星期三項(xiàng)目管理窗口用于管理項(xiàng)目文件目錄,它由五個子窗口組成,可以通過子窗口下方的標(biāo)簽進(jìn)行切換,它們分別是:文件窗口,寄存器窗口,幫助窗口,函數(shù)窗口,模版窗口。項(xiàng)目管理窗口:第41頁,講稿共110頁,2023年5月2日,星期三輸出窗口:輸出窗口用于編譯過程中的信息交互作用,由三個子窗口組成,可以通過子窗口下方的標(biāo)簽進(jìn)行切換,它們分別是:編譯窗口,命令窗口,搜尋窗口。第42頁,講稿共110頁,2023年5月2日,星期三信息窗口:觀察窗口(Watch&CallStatckWindows)輸出窗口(OutputWindows)存儲器窗口(MemoryWindow)反匯編窗口(DissamblyWindow)串行窗口(SerialWindow)第43頁,講稿共110頁,2023年5月2日,星期三1C51的程序結(jié)構(gòu)

2C51的數(shù)據(jù)結(jié)構(gòu)3C51仿真開發(fā)環(huán)境

1、Keil的編譯環(huán)境μVision32、μVision3的基本使用方法4C51初步應(yīng)用編程

第44頁,講稿共110頁,2023年5月2日,星期三輸入源程序→建立工程→對工程進(jìn)行詳細(xì)設(shè)置→將源程序變?yōu)槟繕?biāo)代碼→運(yùn)行調(diào)試。使用方法第45頁,講稿共110頁,2023年5月2日,星期三(1)源文件的建立點(diǎn)擊新建文件按鈕打開一個新的文本編緝窗口,輸入程序源代碼,以*.c保存該文件。第46頁,講稿共110頁,2023年5月2日,星期三(2)建立工程文件點(diǎn)擊“Project->NewProject…”菜單,在編緝框中輸入一個名字(設(shè)為exam1),無需擴(kuò)展名。第47頁,講稿共110頁,2023年5月2日,星期三選擇目標(biāo)CPU(Intel系列的80C51BH)第48頁,講稿共110頁,2023年5月2日,星期三添加源程序(右擊“SourceGroup1”→點(diǎn)擊“AddfiletoGroup”SourceGroup1”→添加生成的.c文件)第49頁,講稿共110頁,2023年5月2日,星期三(3)工程設(shè)置右擊Project窗口的Target1→選擇“Project->Optionfortarget‘target1’”→工程設(shè)置對話框第50頁,講稿共110頁,2023年5月2日,星期三設(shè)置對話框中的OutPut頁面(勾選“CreatHexfile”)第51頁,講稿共110頁,2023年5月2日,星期三(4)編譯、連接產(chǎn)生目標(biāo)代碼(hex文件)點(diǎn)擊F7或工具按鈕啟動編譯、連接功能。完成后將在命令窗口中顯示編譯結(jié)果第52頁,講稿共110頁,2023年5月2日,星期三若有語法錯誤,雙擊出錯提示可指出錯誤所在行號第53頁,講稿共110頁,2023年5月2日,星期三(5)一般調(diào)試過程①啟動調(diào)試過程——Ctrl+F5、

Debug->Start/StopDebugSession②開始調(diào)試——詳見下頁③結(jié)束調(diào)試——、Debug->StopRunning第54頁,講稿共110頁,2023年5月2日,星期三調(diào)試工具欄復(fù)位運(yùn)行到光標(biāo)行執(zhí)行完當(dāng)前子程序過程單步單步暫停運(yùn)行調(diào)試菜單欄快捷鍵指向下條運(yùn)行行第55頁,講稿共110頁,2023年5月2日,星期三基本調(diào)試手段:1、運(yùn)行到光標(biāo)行——從當(dāng)前行運(yùn)行到光標(biāo)所在行(Ctrl+F10)2、嚴(yán)格單步運(yùn)行——遇到函數(shù)時亦單步進(jìn)行(F11)3、跨函數(shù)單步運(yùn)行——遇到函數(shù)時將其視作一行語句(F10)4、斷點(diǎn)運(yùn)行——全速運(yùn)行到斷點(diǎn)行停止(雙擊設(shè)置/解除斷點(diǎn))5、監(jiān)視輸出端口——打開IO窗口(Peripherals->I/O-Ports)6、監(jiān)視運(yùn)行變量——打開Watch#1窗口(點(diǎn)擊)

……第56頁,講稿共110頁,2023年5月2日,星期三將調(diào)試通過的*.hex文件加載到*.DSN文件中后即可運(yùn)行第57頁,講稿共110頁,2023年5月2日,星期三Keil與Proteus的聯(lián)合仿真運(yùn)行(需要關(guān)聯(lián)設(shè)置)第58頁,講稿共110頁,2023年5月2日,星期三1C51的程序結(jié)構(gòu)

2C51的數(shù)據(jù)結(jié)構(gòu)3C51仿真開發(fā)環(huán)境4C51初步應(yīng)用編程

1IO端口的簡單應(yīng)用

1.1基本輸入輸出單元與編程

1.2LED數(shù)碼管原理與編程

2IO端口的進(jìn)階實(shí)踐第59頁,講稿共110頁,2023年5月2日,星期三基本輸入輸出單元與編程

輸出單元:

發(fā)光二極管(LED)作為輸出顯示設(shè)備具有電路簡單、功耗低、壽命長、響應(yīng)速度快等特點(diǎn)。低電平驅(qū)動限流電阻R=100Ω~1kΩ高電平驅(qū)動灌電流拉電流第60頁,講稿共110頁,2023年5月2日,星期三輸入單元:

按鍵或開關(guān)是最基本的輸入設(shè)備。【強(qiáng)調(diào)】P0口為漏極開路結(jié)構(gòu)——需要外接上拉電阻

P0~P3為準(zhǔn)雙向IO口——讀引腳前需先寫1第61頁,講稿共110頁,2023年5月2日,星期三實(shí)例1獨(dú)立按鍵識別【要求】開機(jī)時LED全熄,然后根據(jù)按鍵動作使相應(yīng)燈亮,并將亮燈保持到下次按鍵動作時為止。獨(dú)立按鍵——每個按鍵都彼此獨(dú)立,且各占有一根I/O口線。第62頁,講稿共110頁,2023年5月2日,星期三①按鍵的閉合電平為0,但LED的驅(qū)動電平為1,故不能直接將P0口的狀態(tài)送到P1口,而應(yīng)使其先取反再送出;②為使按鍵抬起后LED能保持先前的點(diǎn)亮狀態(tài),需要在按鍵都未壓下期間禁止向P1送出P0狀態(tài)值?!痉治觥竣蹫楸苊釶0口未使用端口產(chǎn)生的不利影響,應(yīng)對其高4位清零。第63頁,講稿共110頁,2023年5月2日,星期三參考程序如下“取反”操作的優(yōu)先級高于“與”操作第64頁,講稿共110頁,2023年5月2日,星期三編程界面和運(yùn)行界面分別如下圖第65頁,講稿共110頁,2023年5月2日,星期三第66頁,講稿共110頁,2023年5月2日,星期三實(shí)例2鍵控流水燈

【要求】K1為“開始鍵”,可使K3和K4有效,初值為“自下向上”運(yùn)動;K2為“停止鍵”,可使K3和K4失效,并使全燈關(guān)閉;

K3和K4為“方向鍵”,分別對應(yīng)“自上向下”和“自下向上”運(yùn)動。第67頁,講稿共110頁,2023年5月2日,星期三分析——整體關(guān)系設(shè)置方向和啟停標(biāo)志,且賦初值0獲取按鍵狀態(tài)值啟停標(biāo)志=0?根據(jù)鍵值修改方向和啟停標(biāo)志值方向標(biāo)志=0?關(guān)閉LEDLED↑YLED↓YNN第68頁,講稿共110頁,2023年5月2日,星期三分析——局部關(guān)系(獲取按鍵狀態(tài))(P0&0x0f)=0x0f?讀P0口鍵值=P0&0x0f

鍵值=0Y

結(jié)束N第69頁,講稿共110頁,2023年5月2日,星期三分析——局部關(guān)系(修改狀態(tài)標(biāo)志)

對應(yīng)功能:啟停=1,啟停=0,方向=1,方向=0switch(表達(dá)式){case常量表達(dá)式1:語句1;case常量表達(dá)式2:語句2;………case常量表達(dá)式n:語句n;default:語句n+1;}1#~4#的鍵值:0x0e,0x0d,0x0b,0x07第70頁,講稿共110頁,2023年5月2日,星期三分析——局部關(guān)系(LED循環(huán)控制)建立LED顯示碼數(shù)組={01,02,04,08}循環(huán)4次?N結(jié)束

延時YLED↑環(huán)節(jié)自右向左循環(huán)輸出狀態(tài)碼循環(huán)4次?N結(jié)束

延時YLED↓環(huán)節(jié)自左向右循環(huán)輸出狀態(tài)碼第71頁,講稿共110頁,2023年5月2日,星期三參考程序如下if((P0&0x0f)==0x0f)return0;return(P0&0x0f);第72頁,講稿共110頁,2023年5月2日,星期三Keil項(xiàng)目和程序界面如下圖所示

第73頁,講稿共110頁,2023年5月2日,星期三.1C51的程序結(jié)構(gòu)

2C51的數(shù)據(jù)結(jié)構(gòu)3C51仿真開發(fā)環(huán)境4C51初步應(yīng)用編程

1IO端口的簡單應(yīng)用

1.1基本輸入輸出單元與編程

1.2LED數(shù)碼管原理與編程

2IO端口的進(jìn)階實(shí)踐第74頁,講稿共110頁,2023年5月2日,星期三LED顯示元件——人機(jī)交互輸出設(shè)備,其作用是指示中間運(yùn)行結(jié)果與運(yùn)行狀態(tài)。點(diǎn)式字段式LED光柱式LED的類型第75頁,講稿共110頁,2023年5月2日,星期三com為公共端共陽極LED共陰極LED引腳配置七段式LED顯示器(7-SegmentDisplay)第76頁,講稿共110頁,2023年5月2日,星期三LED的亮暗組合(顯示碼)能形成不同的顯示字符以共陰極為例,部分字符的顯示碼(字模)為:七段LED數(shù)碼管的標(biāo)準(zhǔn)顯示字符為0-9,A-F第77頁,講稿共110頁,2023年5月2日,星期三實(shí)例3LED數(shù)碼管顯示在P0口連接一個共陰極數(shù)碼管,使之循環(huán)顯示0-9數(shù)字。第78頁,講稿共110頁,2023年5月2日,星期三分析:將顯示碼循環(huán)輸出到P0口即可實(shí)現(xiàn)循環(huán)顯示。但由于數(shù)字0~9的顯示段碼沒有規(guī)律可循,需要采取查表方式進(jìn)行操作:循環(huán)10次?N

延時循環(huán)指針i賦值(10)P0←數(shù)組[i]Y①將顯示碼按序存放在一個數(shù)組中,順序號與代表的顯示字符相對應(yīng)。(如,charled_mod[]={x1,x2,….,xn)②通過循環(huán)變量指定待送出的數(shù)組元素第79頁,講稿共110頁,2023年5月2日,星期三參考程序第80頁,講稿共110頁,2023年5月2日,星期三實(shí)例4計(jì)數(shù)顯示器對按鍵動作進(jìn)行計(jì)數(shù)和顯示,達(dá)到99后重新由1開始計(jì)數(shù)。個位LED接P2口;十位LED接P0口(上拉電阻)第81頁,講稿共110頁,2023年5月2日,星期三分析:①讀P3.7口,進(jìn)行加1計(jì)數(shù)和超界處理;②拆分計(jì)數(shù)器數(shù)值——個位、十位;③查找/輸出顯示碼到P0和P2口。計(jì)數(shù)值拆分:取模運(yùn)算(%)→個位整除10運(yùn)算(/)→十位>99?N計(jì)數(shù)器加1計(jì)數(shù)器←1YP3.7=0?NY查找/輸出顯示碼:按拆分值輸出相應(yīng)數(shù)組元素第82頁,講稿共110頁,2023年5月2日,星期三參考程序第83頁,講稿共110頁,2023年5月2日,星期三(接前頁)第84頁,講稿共110頁,2023年5月2日,星期三程序運(yùn)行效果

第85頁,講稿共110頁,2023年5月2日,星期三1C51的程序結(jié)構(gòu)

2C51的數(shù)據(jù)結(jié)構(gòu)3C51仿真開發(fā)環(huán)境4C51初步應(yīng)用編程

1IO端口的簡單應(yīng)用

2IO端口的進(jìn)階實(shí)踐

2.1數(shù)碼管動態(tài)顯示原理與編程

2.2行列式鍵盤原理與編程第86頁,講稿共110頁,2023年5月2日,星期三靜態(tài)顯示接口和動態(tài)顯示接口靜態(tài)顯示接口:一個并行口接一個數(shù)碼管。優(yōu)點(diǎn):被顯示數(shù)據(jù)只要送入并行口后就不再需要CPU干預(yù),因而顯示效果穩(wěn)定。缺點(diǎn):占用資源較多第87頁,講稿共110頁,2023年5月2日,星期三動態(tài)顯示接口:將所有數(shù)碼管的段碼線對應(yīng)并聯(lián)起來接在一個8位并行口上,而每位數(shù)碼管的公共端分別由一位I/O線控制。第88頁,講稿共110頁,2023年5月2日,星期三工作原理:輪流顯示,即每一時刻只有一只顯示器工作。當(dāng)時間間隔很?。ㄈ?0ms)時,人眼的暫留特性→無閃爍的連續(xù)顯示。優(yōu)點(diǎn):占用資源較少缺點(diǎn):占用機(jī)時較多(需要CPU隨時刷新顯示值)第89頁,講稿共110頁,2023年5月2日,星期三實(shí)例5數(shù)碼管動態(tài)顯示采用共陰極動態(tài)LED顯示原理,實(shí)現(xiàn)如下功能:SW1向下?lián)軙r顯示字符“L2”,向上撥時顯示字符“H3”。第90頁,講稿共110頁,2023年5月2日,星期三分析:Proteus中的雙聯(lián)LED數(shù)碼管相當(dāng)于兩個并聯(lián)的數(shù)碼管。第91頁,講稿共110頁,2023年5月2日,星期三如果不考慮switch,動態(tài)顯示“L2”的程序可以如下:第92頁,講稿共110頁,2023年5月2日,星期三完整的源程序switch_sta0022led_point0101switch_sta+led_point0123P3=2-led_point2121需要數(shù)碼管指針led_point和開關(guān)狀態(tài)標(biāo)志switch_sta的配合才能實(shí)現(xiàn)兩個顯示值的切換功能。第93頁,講稿共110頁,2023年5月2日,星期三運(yùn)行效果圖第94頁,講稿共110頁,2023年5月2日,星期三1C51的程序結(jié)構(gòu)

2C51的數(shù)據(jù)結(jié)構(gòu)3C51仿真開發(fā)環(huán)境4C51初步應(yīng)用編程

1IO端口的簡單應(yīng)用

2IO端口的進(jìn)階實(shí)踐

2.1數(shù)碼管動態(tài)顯示原理與編程

2.2行列式鍵盤原理與編程第95頁,講稿共110頁,2023年5月2日,星期三獨(dú)立式鍵盤的電路簡單,易于編程,但占用的IO口線較多,當(dāng)需要較多按鍵時可能產(chǎn)生IO資源緊張問題。獨(dú)立式鍵盤獨(dú)立式鍵盤與行列式鍵盤第96頁,講稿共110頁,2023年5月2日,星期三行列式鍵盤——將IO口分為行線和列線,按鍵跨接在行線和列線上,列線通過上拉電阻接正電源。行列式鍵盤特點(diǎn):占用IO口線較少,但軟件將較為復(fù)雜。鍵值(按鍵閉合時的數(shù)值),鍵模(按鍵代表的數(shù)值)第97頁,講稿共110頁,2023年5月2日,星期三①判斷哪一行有鍵壓下寫端口(0xf0):行線電平=0;列線電平=1。讀端口進(jìn)行判

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論