基于C語言的MCS-51單片機教程 課件全套 陳和洲 1.1 認知51單片機-3.5 12864顯示的數(shù)字電子萬年歷系統(tǒng)的設(shè)計與制作_第1頁
基于C語言的MCS-51單片機教程 課件全套 陳和洲 1.1 認知51單片機-3.5 12864顯示的數(shù)字電子萬年歷系統(tǒng)的設(shè)計與制作_第2頁
基于C語言的MCS-51單片機教程 課件全套 陳和洲 1.1 認知51單片機-3.5 12864顯示的數(shù)字電子萬年歷系統(tǒng)的設(shè)計與制作_第3頁
基于C語言的MCS-51單片機教程 課件全套 陳和洲 1.1 認知51單片機-3.5 12864顯示的數(shù)字電子萬年歷系統(tǒng)的設(shè)計與制作_第4頁
基于C語言的MCS-51單片機教程 課件全套 陳和洲 1.1 認知51單片機-3.5 12864顯示的數(shù)字電子萬年歷系統(tǒng)的設(shè)計與制作_第5頁
已閱讀5頁,還剩433頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單元1:認知51單片機知識與能力目標熟悉單片機的基本概念1掌握內(nèi)部存儲器的結(jié)構(gòu)、外部引腳及功能2理解單片機的存儲結(jié)構(gòu)3掌握單片機最小應(yīng)用系統(tǒng)構(gòu)成4引入:點亮一個LED發(fā)光二極管1.什么是單片機2.MCS-51單片機的內(nèi)部結(jié)構(gòu)及引腳3.MCS-51單片機的最小系統(tǒng)單元1:認知51單片機認知51單片機4.MCS-51單片機的存儲器結(jié)構(gòu)2.任務(wù)要求3.電路及清單4.硬件電路設(shè)計1.任務(wù)目的6.運行測試5.程序及下載

引入:點亮一個LED發(fā)光二極管2、任務(wù)要求通過此任務(wù),了解什么是單片機和單片機最小系統(tǒng),以及單片機應(yīng)用系統(tǒng)的制作過程。1、任務(wù)目的在萬能板上焊接單片機控制一個LED發(fā)光二極管點亮的控制電路,并將給定的一個LED發(fā)光二極管點亮.hex程序文件下載到單片機中,實現(xiàn)發(fā)光二極管點亮的效果。

引入:點亮一個LED發(fā)光二極管3、電路及元器件清單表1-1一個發(fā)光二極管點亮控制系統(tǒng)電路元器件清單元器件名稱參數(shù)數(shù)量元器件名稱參數(shù)數(shù)量IC插座DIP401電阻1kΩ1單片機AT89S511電阻10kΩ1晶體振蕩器12MHz1電阻330Ω1瓷片電容30pf2電阻2kΩ1發(fā)光二極管1電解電容10uf1彈性按鍵1引入:點亮一個LED發(fā)光二極管

引入:點亮一個LED發(fā)光二極管4、電路制作經(jīng)驗介紹:1、焊接單片機應(yīng)用系統(tǒng)電路時,一般不直接將單片機芯片焊接在電路板上,二是焊接在與單片機芯片引腳對應(yīng)的直插式插座上,以方便單片機芯片的插入與拔出,在這里采用的是DIP40插座。2、晶振電路焊接時盡可能地靠近單片機芯片,以減小電路分布電容,從而使頻率更加穩(wěn)定。

引入:點亮一個LED發(fā)光二極管5、程序及下載

一個發(fā)光二極管點亮控制系統(tǒng)的硬件電路,僅僅只有硬件是沒有辦法實現(xiàn)燈亮的效果的,還必須將控制程序燒錄到單片機芯片的內(nèi)部存儲器中,才能實現(xiàn)。因此,一個單片機應(yīng)用系統(tǒng)是由硬件系統(tǒng)和軟件系統(tǒng)兩部分組成,二者缺一不可。參考程序如下:

引入:點亮一個LED發(fā)光二極管/*************************************************程序名稱:一個LED燈點亮.C*功能描述:讓P1.0口的一個LED燈點亮************************************************/#include<reg51.h>//頭文件,定義了MCS-51單片機的特殊功能寄存器sbitLED=P1^0;//定義P1.0口/*************************************************名稱:main()*功能:實現(xiàn)燈的點亮*輸入:無*輸出:無************************************************/voidmain(){LED=0;//點亮P1.0對應(yīng)的LEDwhile(1);}

引入:點亮一個LED發(fā)光二極管對一個LED燈點亮.C源程序進行編譯和鏈接后,生成一個LED燈點亮.hex二進制代碼文件如下::04000F00C29080FE1D:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF知識補充:

用C語言或匯編語言編寫的程序稱為源程序,源程序必須經(jīng)過編譯、鏈接等操作,變成目標程序,即二進制程序,單片機才能夠執(zhí)行。

引入:點亮一個LED發(fā)光二極管程序的下載步驟

(1)首先將下載器的一端與計算機的USB接口連接,另一端連接到單片機應(yīng)用系統(tǒng)的ISP下載口,打開系統(tǒng)的電源,啟動智峰ISP下載軟件progisp172軟件,出現(xiàn)如圖所示的主窗口畫面,如果軟件上“PRG”和“USB”位置上顏色顯示正常(不是灰色),表示計算機與單片機系統(tǒng)連接正常。

引入:點亮一個LED發(fā)光二極管程序的下載步驟

(2)在上圖所示的主窗口中單擊“SelectChip”按鈕,左鍵單擊選擇單片機應(yīng)用系統(tǒng)對應(yīng)的單片機芯片的型號,如圖所示。

引入:點亮一個LED發(fā)光二極管程序的下載步驟

(3)在上圖所示的界面中,點擊“擦除”按鈕,當下面的提示窗口出現(xiàn)“芯片擦除成功”字樣,則表明原單片機芯片里的程序已擦除完畢,如圖所示。

引入:點亮一個LED發(fā)光二極管程序的下載步驟

(4)在上圖所示的界面,點擊“調(diào)入Flash”按鈕,通過路徑選擇需要燒錄的hex文件,如圖所示,選中要燒錄的hex文件。

引入:點亮一個LED發(fā)光二極管程序的下載步驟

(5)在上圖所示的界面中,,點擊“打開”按鈕,則進入如圖1-7所示的界面,點擊“自動”按鈕,則會在如圖所示的界面下出現(xiàn)程序下載進度指示,當程序下載完畢,則會在提示窗口出現(xiàn)“成功”的字樣。

引入:點亮一個LED發(fā)光二極管6、運行測試接通電路板電源,即可觀察到LED燈點亮。

1.2認知51單片機控制功能強可靠性高應(yīng)用優(yōu)點工業(yè)控制結(jié)構(gòu)簡單家用電器智能化儀器儀表電子玩具控制功能強可靠性高體積小價格低

1.2.1什么是單片機單片微控制器I/O隨機內(nèi)存中央處理器端口只讀存儲器中斷系統(tǒng)定時器/計數(shù)器CPURAMROM集成電路塊T/C單片機概念單片機接口電路及外設(shè)等硬件系統(tǒng)控制程序軟件系統(tǒng)燒錄2、單片機應(yīng)用系統(tǒng)及組成

3、MCS-51系列單片機51單片機是對目前所有兼容Intel8031指令系統(tǒng)的單片機的俗稱。該系列單片機的始祖是Intel公司。80C51單片機目前是8位單片機的經(jīng)典代表。(1)Intel公司的MCS-51系列的單片機Intel公司的8031單片機開創(chuàng)了MCS-51系列單片機的新時代,型號包括8031、8051、8751、80C31、80C51、87C51等。其技術(shù)特點如下:基于MCS-51核的處理器結(jié)構(gòu);32個I/O引腳;2個定時/計數(shù)器;5個中斷源128(Byte)內(nèi)部數(shù)據(jù)存儲器。

3、MCS-51系列單片機(2)Atmel公司的MCS-51系列單片機Atmel公司MCS-51系列單片機是目前最受歡迎的單片機,其中應(yīng)用最廣泛地89系列單片機的特點如下:內(nèi)部含F(xiàn)lash存儲器。在系統(tǒng)的開發(fā)過程中可以非常方便地進行程序的修改,大大縮短了系統(tǒng)的開發(fā)周期。同時,在系統(tǒng)工程中,能有效地保存一些數(shù)據(jù)信息,即使外界電源損壞也不影響信息的保存。和80C51插座兼容。89系列單片機的引腳與80C51是一樣的,所以用89系列單片機可以直接代換80C51。靜態(tài)時鐘方式。89系列單片機采用靜態(tài)時鐘方式,可以節(jié)省電能,這對降低便攜式產(chǎn)品的功耗十分有用??梢苑磸?fù)系統(tǒng)試驗。用89系列單片機設(shè)計的系統(tǒng),可以反復(fù)進行系統(tǒng)試驗,每次試驗可以編入不同的程序,這樣可以保證用戶系統(tǒng)設(shè)計達到最優(yōu)。而且按照用戶的需要,還可以進行修改,使系統(tǒng)不斷滿足用戶的最新要求。型號Flash(KB)ISPEEPROM(KB)RAM(B)fmax(MHz)Vcc(V)I/O引腳UART/16位TimesWDTSPIAT89C20512----128242.7~6.0151/2----AT89C40514----128242.7~6.0151/2----AT89S514Yes--128244.0~5.5321/2Yes--AT89S528Yes--256334.0~5.5321/3Yes--AT89S825316Yes2256242.7~5.5321/3YesYes表1-2Atmel公司MCS-51系列單片機型號表型號Flash(KB)ISPEEPROM(KB)RAM(B)fmax(MHz)Vcc(V)I/O引腳UART/16位TimesWDTSPIAT89C20512----128242.7~6.0151/2----AT89C40514----128242.7~6.0151/2----AT89S514Yes--128244.0~5.5321/2Yes--AT89S528Yes--256334.0~5.5321/3Yes--AT89S825316Yes2256242.7~5.5321/3YesYes

MCS-51單片機內(nèi)部結(jié)構(gòu)框圖

1.2.2MCS-51單片機的內(nèi)部結(jié)構(gòu)及引腳MCS-51單片機的內(nèi)部結(jié)構(gòu)1

1.2.2MCS-51單片機的內(nèi)部結(jié)構(gòu)及引腳1

CPU:CPU是中央處理器的簡稱,是單片機的核心部件內(nèi)存:4KB的ROM和256B的RAM23并行I/O接口:共有4個8位并行I/O接口定時器/計數(shù)器:2個16位定時器/計數(shù)器45中斷控制:5個中斷源和2個中斷優(yōu)先級6串行接口:異步工作方式的全雙工串行通信接口MCS-51單片機的內(nèi)部結(jié)構(gòu)

8051單片機的引腳2.1.2.2MCS-51單片機的內(nèi)部結(jié)構(gòu)及引腳1.1.2分析單片機硬件系統(tǒng)STC89C51單片機電源引腳時鐘電路引腳控制信號引腳I/O口引腳VCCVSSXTAL1XTAL2P0、P1、P2和P3RST/VPD/VPP

1.2.3MCS-51單片機的最小系統(tǒng)

單片機最小系統(tǒng)是指單片機能進行正常工作的最簡單電路。包括單片機、電源電路、時鐘電路和復(fù)位電路,四者缺一不可。單片機最小系統(tǒng)

時鐘電路模塊單片機電路模塊電源接口復(fù)位電路模塊1.2.3MCS-51單片機的最小系統(tǒng)a)上電復(fù)位b)按鍵復(fù)位

復(fù)位是指使單片機內(nèi)部各寄存器的值變?yōu)槌跏紶顟B(tài)。單片機復(fù)位的條件:當RST(9引腳)端出現(xiàn)高電平并保持兩個機器周期以上。1、復(fù)位電路1.2.3MCS-51單片機的最小系統(tǒng)

2、時鐘電路單片機需要一個時鐘信號來驅(qū)動,保證各個操作按一定順序完成。18XTAL1是時鐘信號輸入端,19XTAL2是輸出端。時鐘電路中的電容一般取值為30pF左右,在通常情況下,51單片機使用的晶振頻率為6MHz或12MHz,在通信系統(tǒng)中常用11.0592MHz。11.2.4MCS-51單片機的存儲器結(jié)構(gòu)單片機內(nèi)部存儲器

在單片機內(nèi)部具有數(shù)據(jù)存儲器RAM和程序存儲器ROM兩個內(nèi)存存儲資源。片內(nèi)數(shù)據(jù)存儲器又叫內(nèi)部RAM,也叫隨機存儲器,主要用于數(shù)據(jù)緩沖和中間數(shù)據(jù)的暫存,同時這種內(nèi)存在使用過程中可隨時進行寫入和讀取信息,但在斷電時將丟失存儲內(nèi)容。片內(nèi)程序存儲器ROM,也叫只讀存儲器,主要是用來存放計算機中所事先編制好的程序和表格常數(shù)。1.2.4MCS-51單片機的存儲器結(jié)構(gòu)

51單片機內(nèi)部有256個字節(jié)(B)的RAM,分為兩部分:1、低128字節(jié)(單元地址00H~7FH):用于用戶數(shù)據(jù)的存儲。2、高128字節(jié)(單元地址80H~0FFH):存放51單片機特殊功能寄存器。

1、片內(nèi)數(shù)據(jù)存儲器1.2.4MCS-51單片機的存儲器結(jié)構(gòu)

51單片機芯片中有4KB的片內(nèi)程序內(nèi)存單元,其地址為0000H~0FFFH,其中地址為0003H~002AH的單元在使用時是有特殊規(guī)定的。

地址為0000H~0002H的3個單元是系統(tǒng)的啟動單元,在單片機進入復(fù)位后,會自動從0000H單元開始執(zhí)行指令程序。2、片內(nèi)程序存儲器表1-3中斷源地址分配表中斷入口地址中斷地址區(qū)間中斷源0003H0003H~000AH外部中斷0000BH000BH~0012H定時器/計數(shù)器中斷T00013H0013H~001AH外部中斷1001BH001BH~0022H定時器/計數(shù)器中斷T10023H0023H~002AH串行口中斷1.2.4MCS-51單片機的存儲器結(jié)構(gòu)

地址為0003H~002AH的40個單元則被平均分為5段,每段8個單元,分別用作5個中斷源的中斷地址區(qū)。單元2:51單片機開發(fā)環(huán)境的搭建知識與能力目標熟悉KeilC51軟件的開發(fā)環(huán)境1熟練KeilC51軟件的操作過程2Keil主界面窗口

菜單命令欄輸出窗口

編輯窗口工程窗口

單元2:51單片機開發(fā)環(huán)境的搭建1、熟悉KeilμVision2界面Keil開始窗口單元2:51單片機開發(fā)環(huán)境的搭建2、KeilC51軟件的操作過程第一步:啟動KeilμVision2新建工程界面單元2:51單片機開發(fā)環(huán)境的搭建第二步:建立工程文件1、新建工程文件選擇工程要保存的路徑,然后輸入工程文件的名字的界面單元2:51單片機開發(fā)環(huán)境的搭建第二步:建立工程文件2、選擇工程要保存的路徑,然后輸入工程文件的名字選擇芯片型號的界面單元2:51單片機開發(fā)環(huán)境的搭建第二步:建立工程文件3、選擇芯片型號

工程文件已經(jīng)創(chuàng)建成功的界面。新建程序文件界面單元2:51單片機開發(fā)環(huán)境的搭建第三步:建立程序文件1、新建程序文件新建文件后出現(xiàn)的界面。保存程序的界面單元2:51單片機開發(fā)環(huán)境的搭建第三步:建立程序文件2、保存程序文件將文件添加到工程的界面單元2:51單片機開發(fā)環(huán)境的搭建第三步:建立程序文件3、將文件添加到工程然后單擊“AddFiletoGroup’SourceGroup1’選項,出現(xiàn)的對話框。選擇“例子1.c”文件,然后單擊“Add”按鈕及“Close”按鈕,出現(xiàn)的界面。#include<reg51.h>//頭文件,定義了MCS-51單片機的特殊功能寄存器#include<stdio.h>voidmain(){SCON=0x52;TMOD=0x20;TH1=0xf3;TR1=1;printf(“HellowelcometoKeilC51\n”);while(1);}第三步:建立程序文件4、在編輯窗口編輯程序在輸入上述程序時,可以看到事先保存待編輯文件的好處就是:KeilC51會自動識別關(guān)鍵字,并以不同的顏色提示用戶加以注意,這樣會減少用戶犯錯誤,提高編程的效率。當程序輸入完畢后,如圖所示的界面。單元2:51單片機開發(fā)環(huán)境的搭建第四步:配置工程屬性將鼠標移到左邊窗口的“Target1”上,單擊鼠標右鍵打開快捷菜單,在單擊“OptionsforTarget1”選項,具體如圖所示。單元2:51單片機開發(fā)環(huán)境的搭建第四步:配置工程屬性彈出如圖所示的“OptionsforTarget1”對話框。將Xtal(晶振頻率)改為所使用單片機的頻率。單元2:51單片機開發(fā)環(huán)境的搭建第四步:配置工程屬性在上圖中單擊“Output”選項卡,彈出如圖所示的界面,點擊“CreateExecutable”選項前面的小方框,當小方框內(nèi)出現(xiàn)“√”時,表明已確認該選項,再單擊“確定”按鈕,就可產(chǎn)生后綴為.hex的可執(zhí)行文件,該文件可以下載到單片機的存儲器中。單元2:51單片機開發(fā)環(huán)境的搭建第五步:程序調(diào)試在主界面中,單擊“Project”菜單,在下拉菜單中單擊“BuiltTarget”選項。編譯成功后,再單擊“Debug”菜單,在下拉菜單中單擊“Start/StopDebugSession”選項,如圖所示。單元2:51單片機開發(fā)環(huán)境的搭建第五步:程序調(diào)試就會出現(xiàn)如圖所示的調(diào)試界面。單元2:51單片機開發(fā)環(huán)境的搭建第五步:程序調(diào)試在上圖所示的界面中,單擊“Debug”菜單中的“Go”選項;然后在單擊Debug”菜單中的“StopRunning”選項;再單擊“View”菜單中“SerialWindow#1”選項就可以查看運行結(jié)果。具體的每一步的操作如圖1-3所示,最后的結(jié)果如圖4所示。圖1單元2:51單片機開發(fā)環(huán)境的搭建第五步:程序調(diào)試圖2單元2:51單片機開發(fā)環(huán)境的搭建第五步:程序調(diào)試圖2單元2:51單片機開發(fā)環(huán)境的搭建第五步:程序調(diào)試圖3單元2:51單片機開發(fā)環(huán)境的搭建第五步:程序調(diào)試圖4單元3:C51程序設(shè)計基礎(chǔ)知識與能力目標了解C51的特點、關(guān)鍵字1掌握C51的數(shù)據(jù)類型(尤其是擴展數(shù)據(jù)類型)2掌握C51的基本運算、語句3掌握C51的函數(shù)、預(yù)處理指令4

單元3:C51程序設(shè)計基礎(chǔ)1對單片機的指令系統(tǒng)不要求了解,僅要求對8051的存貯器結(jié)構(gòu)有初步了解寄存器分配、不同存貯器的尋址及數(shù)據(jù)類型等細節(jié)可由編譯器管理23程序有規(guī)范的結(jié)構(gòu),可分成不同的函數(shù),這種方式可使程序結(jié)構(gòu)化具有將可變的選擇與特殊操作組合在一起的能力,改善了程序的可讀45提供的庫包含許多標準子程序,具有較強的數(shù)據(jù)處理能力6由于具有方便的模塊化編程技術(shù),使已編好程序可容易地移植C51的優(yōu)點基本數(shù)據(jù)類型類型符號關(guān)鍵字數(shù)的表示范圍所占位數(shù)整型字符型實型有無(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongintunsignedshortint160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255單元3:C51程序設(shè)計基礎(chǔ)2、C51的數(shù)據(jù)類型擴展數(shù)據(jù)類型單元3:C51程序設(shè)計基礎(chǔ)2、C51的數(shù)據(jù)類型1)sfr:定義特殊功能寄存器地址。其定義的語法規(guī)則如下:sfr

特殊功能寄存器名稱=字節(jié)地址常數(shù);例如:sfrP0=0x80;//定義一個特殊功能寄存器變量P02)sfr16:定義雙字節(jié)特殊功能寄存器地址,其定義的語法規(guī)則如下:sfr16雙字節(jié)特殊功能寄存器名稱=字節(jié)地址常數(shù);例如:sfr16DPTR=0x82;//定義DPTR低端地址82H擴展數(shù)據(jù)類型單元3:C51程序設(shè)計基礎(chǔ)2、C51的數(shù)據(jù)類型3)sbit:定義能夠按位尋址的特殊功能寄存器中的位變量,其定義的語法規(guī)則如下:sbit

位變量名=位地址表達式;這里的位地址表達式有三種形式:直接地址、特殊功能寄存器名帶位號、字節(jié)地址帶位號,所以這里的定義方式有三種,分別如下:sbit

位變量名=位地址常數(shù);(位地址常數(shù):特殊功能寄存器內(nèi)的絕對位地址)sbit

位變量名=特殊功能寄存器名^位號;sbit

位變量名=特殊功能寄存器字節(jié)地址^位號;例:特殊功能寄存器P0口的名稱及各位的分布如下:以特殊功能寄存器P0口的P0.0位定義為例,三種定義方法如下:方法1:sbitP0_0=0x80;方法2:sbitP0_0=P0^0;方法3:sibtP0_0=0x80^0;擴展數(shù)據(jù)類型單元3:C51程序設(shè)計基礎(chǔ)2、C51的數(shù)據(jù)類型4)bit:定義片內(nèi)RAM的位變量。其值只有0或1。但注意不能用它定義指針,也用其不能定義數(shù)組。例:bitN3_4;//定義一個片內(nèi)RAM位變量N3_4補充說明:1、C51編譯器在頭文件“reg51.h”中定義了全部sfr、sfr16和sbit變量,因此當我們程序中如果需要使用這些,可以用一條預(yù)處理命令#include<reg51.h>把這個頭文件包含到C51程序中,無須重新定義即可使用。2、使用sbit的幾點說明:用sbit定義的位變量必須能夠按位操作,而不能對無位操作功能的位定義位變量。用sbit定義的位變量必須放在函數(shù)外面作為全局變量,而不能在函數(shù)內(nèi)部定義。用sbit每次只能定義一個位變量。單元3:C51程序設(shè)計基礎(chǔ)3、標識符和關(guān)鍵字1)C語言中標識符是指軟件開發(fā)者在程序中自定義的字符序列,用來命名程序中需要辨認的對象,包括:符號常量、變量、數(shù)組及函數(shù)等。標識符的定義注意事項如下:由字母、數(shù)字、下劃線構(gòu)成。首字符必須是字母或下劃線。長度不得大于32個字符,通常是8個字符。嚴格區(qū)分大小寫字母。不應(yīng)該使用C語言中的保留標識符來做自定義的變量或函數(shù)等的標識符。單元3:C51程序設(shè)計基礎(chǔ)3、標識符和關(guān)鍵字2)下面列出了C語言的所有關(guān)鍵字,在使用時應(yīng)慎用這些關(guān)鍵字,不要將其作為標識符來用:Auto、enum、restrict、unsigned、break、extern、return、void、case、float、short、volatile、char、for、signed、while、const、goto、sizeof、Bool、continue、if、static、default、inline、struct、_Imaginary、do、int、switch、double、long、typedef、else、register、union等。1)算術(shù)運算符71注意:“/”:參與運算的變量都是整數(shù)時,結(jié)果也為整數(shù),舍去小數(shù);若除數(shù)或被除數(shù)中一個為負數(shù),則結(jié)果隨機器而定。、“%”:參與運算的變量必須都是整數(shù)。4、C51的基本運算單元3:C51程序設(shè)計基礎(chǔ)2)自增、自減運算符:“++”、“--”72++i與i++的區(qū)別:舉例:i的初值為3j=++i;//先i=3+1=4,再將4賦值給jj=i++;//先將i的值3賦值給j,再將i的值加1,變?yōu)?前置運算和后置運算的區(qū)別:前置運算是變量的值先加1或減1,然后再以該變量變化后額值參加其它運算。后置運算是變量的值先參加有關(guān)運算,然后變量的值再加1或減1。相關(guān)知識點3)關(guān)系運算符:73關(guān)系表達式一般形式:表達式關(guān)系運算符表達式關(guān)系表達式的值:真(成立)用“1”表示

假(不成立)用“0”表示4)邏輯運算符:74邏輯表達式一般形式:表達式邏輯運算符表達式邏輯表達式的值:真(成立)用“1”表示

假(不成立)用“0”表示5)位運算符:75舉例:設(shè)下列程序執(zhí)行前,value已經(jīng)定義為unsignedchar,且

value=0x83,分析每一條語句執(zhí)行后value的值。value|=0x17; //value=value&=0x34; //value=value^=0x0f; //value=value=~value; //value=value=value>>1; //value=value=value<<2;//value=0x970x14

0x1B

0xe4

0x72

0xc8

6)賦值運算符:771)基本賦值運算符“=”:其功能是把某個常量、變量或表達式的值賦值給另外一個變量。2)復(fù)合賦值運算符復(fù)合賦值運算符有:“+=”、“-=”、“*=”、“/=”、“%=”、“^=”、“~=”、“&=”、“|=”、“<<=”、“>>=”。例如:i+=2;等價于i=i+2;a%=5;等價于a=a%5;7)強制類型轉(zhuǎn)換運算符:78其一般形式為:(類型說明符)(表達式)其功能是:把表達式的運算結(jié)果強制轉(zhuǎn)換為類型說明符所表示的類型。單元3:C51程序設(shè)計基礎(chǔ)4、C51的基本語句if語句第一種形式:if(表達式)語句舉例:輸出兩個整數(shù)中的較大者80if語句第二種形式:if(表達式)語句1;else語句2;81舉例:輸出兩個整數(shù)中的較大者82if語句第三種形式:if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3……elseif(表達式n)語句nelse語句n+183舉例:輸入1~7轉(zhuǎn)換為對應(yīng)的星期英文switch語句switch語句的一般格式是:switch(變量){ case常量1:語句1; case常量2:語句2;case常量3:語句3;…….case常量n:語句n;default:語句n+1;}執(zhí)行switch語句時,將變量逐個與case后的常量進行比較,若與其中一個相等,則執(zhí)行該常量后的語句;若都不相等,則執(zhí)行default后的語句。舉例:自動售貨機商品價格的查詢?nèi)蝿?wù)描述:自動售貨機可以售出薯片3.0元,爆米花2.5元,巧克力4.0元,可樂3.5元四種商品。在屏幕上顯示菜單。當用戶輸入編號1~4時,顯示相應(yīng)商品的價格;輸入其它編號,顯示價格為0。解決方案:(1)定義整型變量x用于存放用戶輸入編號(2)定義雙精度實型變量y用于存放價錢(3)根據(jù)x值使用switch語句判斷用戶選擇商品價格y的值(4)輸出商品價格y程序while語句一般格式:while(表達式)

循環(huán)體語句;執(zhí)行過程:89任務(wù)描述:小張的行李箱密碼忘記,密碼是四位,每位密碼是由0~9之間的數(shù)字構(gòu)成。請編寫模擬小張尋找密碼的過程。舉例:尋找密碼任務(wù)分析:密碼是一個四位整數(shù),而四位整數(shù)的取值范圍是0000~9999,共計10000個,那么我們需要在這10000個四位整數(shù)中逐個尋找,直到找到與密碼符合的四位整數(shù)為止。91解決方案:(1)定義整形變量password用于存放密碼(2)定義整形變量value,賦初值0,用于存放每次比較的四位整數(shù)(3)用value的值與password的值進行比較,若不相等則修改value的值(value++)繼續(xù)進行比較,直到找到為止(4)輸出找到的四位密碼(5)返回程序do-while語句一般格式:do{

循環(huán)體語句;}while(表達式);執(zhí)行過程:94請用do-while語句改寫上面尋找密碼的函數(shù)。for語句一般格式:for(表達式1;表達式2;表達式3){

循環(huán)體語句;}執(zhí)行過程:96表達式1:初值表達式,對循環(huán)變量賦初值表達式2:條件表達式,給出循環(huán)的條件循環(huán)體語句:被反復(fù)執(zhí)行的語句表達式3:步長表達式,改變循環(huán)變量的值任務(wù)描述:由計算機隨機生成100以內(nèi)的一個整數(shù),用鍵盤輸入你猜的整數(shù)(假定1~99內(nèi)),與計算機產(chǎn)生的被猜數(shù)比較,若相等,顯示猜中;若不相等,顯示與被猜數(shù)的大小關(guān)系,最多允許猜5次,如果用戶猜的次數(shù)大于5次,則提示游戲結(jié)束。案例四:猜數(shù)字游戲任務(wù)分析:要求計算機隨機產(chǎn)生一個0~99的一個整數(shù),設(shè)置一個計數(shù)器控制猜的次數(shù),最多5次。98解決方案:(1)本例要使用隨機函數(shù),這些函數(shù)包含在頭文件:stdlib.h和timen.h中(2)定義整形變量key用于存放隨機數(shù)(3)定義整形變量temp存放用戶猜的數(shù)字(4)定義整形變量i作為循環(huán)變量(5)調(diào)用srand()設(shè)置隨機數(shù)種子(6)調(diào)用rand()函數(shù)產(chǎn)生1~100之間的隨機數(shù)(7)使用循環(huán)讓用戶進行猜數(shù)字游戲,用計數(shù)循環(huán)語句for語句控制循環(huán)5次。如果不到5次猜對,則利用break語句,提前結(jié)束程序;如果用戶猜的次數(shù)達到5次仍沒猜對,則循環(huán)正常結(jié)束。程序相關(guān)知識點101break語句break語句用在switch語句中,使程序跳出switch語句,執(zhí)行switch語句后的語句。break語句用于while、do-while、for語句中使程序終止循環(huán),而執(zhí)行循環(huán)體后面的其他語句相關(guān)知識點102continue語句只用于while、do-while、for語句中,跳過循環(huán)中剩下的語句,而強制執(zhí)行下一次循環(huán)。103C程序是由函數(shù)構(gòu)成,函數(shù)是C語言程序的基本模塊,通過對函數(shù)模塊的調(diào)用實現(xiàn)特定的功能。1)函數(shù)的定義:一般形式:函數(shù)返回值類型函數(shù)名(形式參數(shù)列表){

聲明部分

執(zhí)行部分}1064、C51函數(shù)相關(guān)知識點—函數(shù)2)函數(shù)的分類:從用戶角度分:標準函數(shù)和用戶自定義函數(shù)。從參數(shù)形式分:無參函數(shù)和有參函數(shù)。從函數(shù)返回值來分:無返回值函數(shù)和有返回值函數(shù)。1073)函數(shù)的聲明:

C語言程序,對函數(shù)實行“先定義,后調(diào)用”的原則。即:如果函數(shù)定義在調(diào)用前,則可以直接調(diào)用,無需聲明;但如果函數(shù)定義在調(diào)用之后,則先聲明才能調(diào)用。標準庫函數(shù)的聲明:程序開頭部分用#include進行文件包含。用戶自定義函數(shù)的聲明:函數(shù)返回值類型函數(shù)名(形式參數(shù)列表);4)函數(shù)的調(diào)用:一般來說,按照函數(shù)在程序中出現(xiàn)的位置來劃分,C語言有三種常用的函數(shù)調(diào)用方式:函數(shù)表達式。函數(shù)作為表達式中的一項出現(xiàn)在表達式中,以函數(shù)的返回值參與表達式的運算。函數(shù)語句。把函數(shù)調(diào)用作為一個語句。函數(shù)參數(shù)。函數(shù)作為另外一個函數(shù)調(diào)用的實際參數(shù)。108舉例:輸入立方體的長、寬、高,求體積及三個面的面積。109相關(guān)知識點—編譯預(yù)處理1)宏定義用標識符來代表一個字符串(給字符串取個名字)。C語言用“#define”進行宏定義。宏定義分為:不帶參數(shù)的宏定義和帶參數(shù)的宏定義。不帶參數(shù)的宏定義:#define標識符字符串1106、C51的編譯預(yù)處理相關(guān)知識點—編譯預(yù)處理帶參數(shù)的宏定義:#define標識符(參數(shù)表)字符串111說明:帶參數(shù)宏定義的本質(zhì)仍然是是參數(shù)替換,容易發(fā)生錯誤。所以為了避免出錯,建議將宏定義“字符串”中所有形參用括號括起來。宏定義帶參數(shù)時應(yīng)注意宏名與參數(shù)表之間不能有空格。帶參數(shù)的宏定義與函數(shù)相似但兩者有本質(zhì)的區(qū)別:函數(shù)調(diào)用在程序運行時;帶參數(shù)的宏定義在編譯時進行字符串替換。函數(shù)調(diào)用時,會給形參分配臨時的內(nèi)存單元;宏展開時不給形參分配內(nèi)存空間。函數(shù)的形參要定義類型,且要求形參和實參類型一致。宏參數(shù)不存在類型問題。112相關(guān)知識點—編譯預(yù)處理2)文件包含C語言中,擴展名為“.h”的文件被稱為頭文件。文件包含命令以“#include”開始的預(yù)處理命令,其功能是將指定的文件內(nèi)容嵌入到文件包含命令所在的地方。格式:#include“文件名”

#include<文件名>113相關(guān)知識點—編譯預(yù)處理3)條件編譯預(yù)處理程序提供了條件編譯功能,可以按照不同的條件編譯不同的程序部分,產(chǎn)生不同的目標代碼文件。114單元4:單片機應(yīng)用系統(tǒng)的開發(fā)方法知識與能力目標熟悉單片機應(yīng)用系統(tǒng)的開發(fā)過程1熟悉單片機應(yīng)用系統(tǒng)的開發(fā)方法2熟悉Proteus仿真軟件的基本操作31、單片機應(yīng)用系統(tǒng)的開發(fā)流程產(chǎn)品定型定型設(shè)計;組裝正式產(chǎn)品;編寫技術(shù)報告及使用說明書;產(chǎn)品驗收;交付使用或投入批量生產(chǎn)硬件設(shè)計硬件電路原理圖的設(shè)計;元器件的選擇;印制電路板的設(shè)計;組裝并進行初步電氣檢查;軟件設(shè)計繪制軟件功能圖;確定算法和數(shù)據(jù)結(jié)構(gòu);劃分程序模塊,畫流程圖;編寫程序,編譯、連接;仿真調(diào)試;聯(lián)機調(diào)試檢查硬件、排除故障;裝入軟件運行,并調(diào)試;反復(fù)調(diào)試直至符合設(shè)計要求;脫機運行考核模擬現(xiàn)場脫機運行;現(xiàn)場運行考核,考核系統(tǒng)的穩(wěn)定性、可靠性和抗干擾性;有針對性的解決問題,直至系統(tǒng)能穩(wěn)定運行;任務(wù)的提出總體論證項目調(diào)研、可行性分析;確定項目實現(xiàn)功能;確定項目實現(xiàn)的技術(shù)指標;確定系統(tǒng)的組成方案;總體設(shè)計系統(tǒng)功能分配;確定軟硬件任務(wù)及相互關(guān)系;單片機系統(tǒng)的選型;擬定調(diào)試方案和手段;單片機應(yīng)用系統(tǒng)的開發(fā)方法通常有兩種:通過硬件仿真器開發(fā)單片機應(yīng)用系統(tǒng)通過軟件模擬開發(fā)單片機機應(yīng)用系統(tǒng)單元2:51單片機開發(fā)環(huán)境的搭建2、單片機應(yīng)用系統(tǒng)的開發(fā)方法:Proteus軟件認知及使用1.Proteus軟件初步認知1.Proteus軟件初步認知1.Proteus軟件初步認知Proteus軟件是由英國LabCenterElectronics公司開發(fā)的EDA工具軟件。是目前世界上最先進、最完整的多種型號微處理器系統(tǒng)的設(shè)計與仿真平臺,真正實現(xiàn)了在計算機中完成電路原理圖設(shè)計、電路分析與仿真、微處理器程序設(shè)計與仿真、系統(tǒng)測試與功能驗證到形成印制電路板的完整電子設(shè)計、研發(fā)過程。

Proteus軟件由ISIS(IntelligentSchematicInputSystem)和ARES(AdvancedRoutingandEditingSoftware)兩部分組成,其中ISIS主要完成原理圖設(shè)計和交互仿真,ARES主要用于PCB設(shè)計,生成PCB文件。ProteusISIS啟動界面Proteus軟件認知及使用瀏覽對象方位控制按鈕

標題欄菜單欄標準工具欄

瀏覽窗口

圖形編輯窗口繪圖工具欄

對象選擇按鈕對象選擇器窗口

ProteusISIS的工作界面Proteus軟件認知及使用花樣流水燈仿真電路圖

Proteus軟件認知及使用ProteusISIS原理圖設(shè)計的舉例

Proteus軟件認知及使用1)新建設(shè)計文件2)保存設(shè)計文件3)添加元器件

4)放置元器件5)總線的繪制ProteusISIS原理圖設(shè)計步驟6)元器件的連接7)元器件與總線的連接

8)給與總線連接的導(dǎo)線貼標簽2413打開仿真電路原理圖;“ProgramFile”欄中單擊圖示,選擇“花樣流水燈.HEX”文件;

在ProteusISIS編輯窗口中單擊或在“Debug”菜單中選擇“”,開始仿真運行。Proteus軟件認知及使用ProteusISIS仿真單擊選中單片機,彈出“EditComponet”對話框,設(shè)置“ClockFrequency”為12MHZ;任務(wù)1:數(shù)碼管顯示顯示器及其接口單片機系統(tǒng)中常用的顯示器有:發(fā)光二極管LED(LightEmittingDiode)顯示器、液晶LCD(LiquidCrystalDisplay)顯示器、CRT顯示器等。LED、LCD顯示器有兩種顯示結(jié)構(gòu):段顯示(7段、米字型等)和點陣顯示(5×8、8×8點陣等)。LED數(shù)碼管結(jié)構(gòu)和原理字符編碼限流電阻計算編程實現(xiàn)靜、動態(tài)顯示LED數(shù)碼管結(jié)構(gòu)及原理

共陰極共陽極LED數(shù)碼管字符編碼共陰數(shù)碼管碼表

0x3f,0x06,0x5b,0x4f,0x66,0x6d,

0 1 2 345

0x7d,0x07,0x7f,0x6f,0x77,0x7c,

6 7 8 9AB

0x39,0x5e,0x79,0x71

CDEF LED數(shù)碼管字符編碼共陽數(shù)碼管碼表

0xC0,0xF9,0xA4,0xB0,0x99,0x92,

0 1 2 345

0x82,0xF8,0x80,0x90,0x88,0x83,

6 7 8 9AB

0xC6,0xA1,0x86,0x8E

CDEF 限流電阻的計算

單片機外接數(shù)碼管,數(shù)碼管的內(nèi)部結(jié)構(gòu)是LED發(fā)光二極管,電路必須使用電阻進行限流。串聯(lián)電阻,避免損壞單片機的輸出引腳,同時防止LED發(fā)光二極管過熱損害,也能限制LED發(fā)光二極管的功耗。一般單片機驅(qū)動引腳能夠承受的電流輸入在10~15mA左右,串聯(lián)的限流電阻計算如下:R=(5V–Vd)/IdId為限制電流,取值10mA,Vd為LED發(fā)光二極管的正向電壓,取值2V,從而得到限流電阻值如下:R=(5V-2V)/10mA=300(歐)在實際設(shè)計中,為了有效保護單片機引腳,一般對LED發(fā)光二極管驅(qū)動采用的限流電阻比300歐大,常用的典型值為470歐。LED靜態(tài)顯示

靜態(tài)顯示是指數(shù)碼管顯示某一字符時,相應(yīng)的發(fā)光二極管恒定導(dǎo)通或恒定截止。舉例1:單片機控制1位數(shù)碼管上顯示2。硬件電路設(shè)計軟件程序設(shè)計

分析思考:硬件連好了,如何讓數(shù)碼管上顯示2呢?數(shù)字2的共陽極的字型編碼是0xa4,當P0口輸出數(shù)據(jù)0xa4時,單片機的P0口的P0.7……P0.1、P0.0引腳輸出10100100,數(shù)碼管的COM端接高電平,則LED數(shù)碼管上有5段點亮,見上圖的a、b、d、e、g,所以數(shù)碼管上顯示數(shù)字2。單片機控制在LED數(shù)碼管顯示數(shù)字2,參考程序如下:#include<reg51.h>voidmain() //單片機控制LED數(shù)碼管顯示2{unsignedcharcodeled[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共陽數(shù)碼管的字符編碼0,1,2,3,4,5,6,7,8,9unsignedchari;while(1){i=2;P0=led[i];}}LED動態(tài)顯示動態(tài)顯示是按位輪流點亮各位數(shù)碼管的顯示方式。即在任一時段,只有其中一位數(shù)碼管“位選端”有效,并送出相應(yīng)的字形顯示編碼,其它的數(shù)碼管此時都因為“位選端”無效而處于熄滅狀態(tài)。下一個時段按順序選通另外一位數(shù)碼管,并送出相應(yīng)的字形顯示編碼,依此規(guī)律循環(huán)下去,即可使各位數(shù)碼管分別間斷顯示出相應(yīng)的字符。只要每位顯示間隔時間足夠短,就會看到各數(shù)碼管好像是“同時”顯示。舉例:設(shè)計程序?qū)崿F(xiàn)四個LED從左到右循環(huán)依次顯示0,1,2,3,4,并用PROTUES進行仿真。硬件電路設(shè)計軟件程序設(shè)計上圖中標為1234引腳的稱為位選,控制選擇某一個數(shù)碼管,確定顯示的位置;標為ABCDEGDP的稱為段選,控制選擇數(shù)碼管中哪幾段點亮,確定顯示的字型。圖中單片機從P2口向數(shù)碼管輸出數(shù)字“4”的段碼,此時所有的數(shù)碼管都接收到“4”的段碼,哪個數(shù)碼管顯示“4”由數(shù)碼管的公共端決定,即位選碼決定。此時第4個數(shù)碼管的公共端為低電平,其他數(shù)碼管的公共端為高電平,因此只有第4個數(shù)碼管顯示“4”,其他數(shù)碼管不顯示任何數(shù)字。圖中數(shù)碼管上顯示數(shù)字“1234”,實際是先輸出位選信號選中第1個數(shù)碼管,輸出1的段碼,延時一段時間后選中第二個數(shù)碼管,輸出2的段碼,延時一段時間后。又輸出位選碼選中第3個數(shù)碼管,輸出3的段碼,延時一段時間后,又輸出位選碼選中第4個數(shù)碼管,輸出4的段碼……,反復(fù)這個過程,就可以顯示出“1234”,由于交替的速度非??欤靡曈X暫留,人眼看到的就是連續(xù)的“1234”。軟件程序流程圖參考程序#include<reg51.h>voiddelay(unsignedchari);unsignedcharch[4]={0x06,0x5b,0x4f,0x66};//共陰數(shù)碼管1、2、3、4的字型碼voidmain(){while(1){ P3=0x0fe;//位選,選通第1個數(shù)碼管

P2=ch[0]; //段選,數(shù)碼管的字型碼

delay(20);//延時

P3=0xfd;//位選,選通第2個數(shù)碼管

P2=ch[1]; delay(20); P3=0xfb;

P2=ch[2]; delay(20); P3=0xf7; P2=ch[3]; delay(20);}}voiddelay(unsignedchari){unsignedcharj,k;

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

for(j=0;j<255;j++);}任務(wù)擴展:實現(xiàn)四位數(shù)碼管循環(huán)顯示0~9999。提示:注意區(qū)分4位數(shù)碼管是共陰管還是共陽管。任務(wù)2:蜂鳴器發(fā)音理論學(xué)習:蜂鳴器1、蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計算機、打印機、復(fù)印機、報警器、電子玩具、汽車電子設(shè)備、電話機、定時器等電子產(chǎn)品中作發(fā)聲器件。按其驅(qū)動方式的不同,可分為:有源蜂鳴器(內(nèi)含驅(qū)動線路)和無源蜂鳴器(外部驅(qū)動)

2、有源蜂鳴器和無源蜂鳴器的區(qū)別1)外觀

2、有源蜂鳴器和無源蜂鳴器的區(qū)別2)驅(qū)動方式注意:“源”指的是震蕩源,而不是電源。有源蜂鳴器內(nèi)部帶有震蕩源,只要一通電就會叫。無源蜂鳴器內(nèi)部不帶震蕩源,必須用2K~5K的方波信號去驅(qū)動才能發(fā)聲。

2、有源蜂鳴器和無源蜂鳴器的區(qū)別3)引腳長短有源蜂鳴器引腳一腳長一腳短,有正負之分無源蜂鳴器引腳一樣長,無正負之分

3、有源蜂鳴器和無源蜂鳴器的區(qū)分1)看外觀2)用外用表用萬用表電阻檔Rxl

檔測試:用黑表筆接蜂鳴器“+”引腳,紅表筆在另一引腳上來回觸碰,如果覺發(fā)出咔、咔聲且電阻為8Ω(或16Ω)的是無源蜂鳴器;如果能發(fā)出持續(xù)聲音,且電阻在幾百歐以上的,是有源蜂鳴器。

有源蜂鳴器發(fā)音及舉例任務(wù):編程實現(xiàn)聲音報警,報警時發(fā)出“嘟嘟”的響聲。1)硬件設(shè)計:蜂鳴器一端接高電平,另一端接三極管的集電極,三極管發(fā)射極接地,三極管的基極接單片機端口P2.7。當三極管的基極為高電平飽和導(dǎo)通蜂時,蜂鳴器就會發(fā)聲了。電路下圖所示:小知識:為什么單片機不直接接控制蜂鳴器呢?因為長聲蜂鳴器5V(SOT塑封封裝)的參數(shù)為:直流有源蜂鳴器:電壓:3.5—5.5V;電流:<25mA;頻率:2300±500Hz;而51單片機高電平輸出能力很弱,輸出電流弱,驅(qū)動電流一般不超過20ma所以用三極管擴流驅(qū)動。軟件設(shè)計:自行練習項目2帶鬧鐘的數(shù)字鐘的設(shè)計與制作系統(tǒng)功能仿真演示項目要求在基于單片機設(shè)計制作一個帶鬧鐘的數(shù)字鐘,用數(shù)碼管顯示時間,有啟動、停止和時間調(diào)整、鬧鐘等功能,具體功能描述如下:1)系統(tǒng)以秒為計時單位,通過四位數(shù)碼管實現(xiàn)時間的倒計時顯示,即顯示的時間范圍為0~9999秒。2)系統(tǒng)具有啟動/暫停計時功能,通過按鍵來實現(xiàn)。3)系統(tǒng)可通過按鍵實現(xiàn)時間調(diào)整,即分/秒的加減。4)當系統(tǒng)到達設(shè)定時間,蜂鳴器發(fā)出“嘟嘟”的響聲,響3秒。

系統(tǒng)方案設(shè)計(1)總體結(jié)構(gòu)設(shè)計:根據(jù)帶鬧鐘的數(shù)字鐘的功能要求,進行了系統(tǒng)的總體設(shè)計。該系統(tǒng)由51單片機模塊、按鍵控制模塊、蜂鳴器模塊、數(shù)碼管顯示模塊、電源模塊5個模塊組成。其系統(tǒng)結(jié)構(gòu)總體框圖如圖1所示。

晶振電路復(fù)位電路單片機按鍵控制模塊蜂鳴器數(shù)碼管顯示模塊項目任務(wù)1、數(shù)碼顯示2、蜂鳴器3、鍵盤4、定時/計數(shù)器任務(wù)要求理解本任務(wù)的軟、硬件原理,然后以個人為單位,完成如下任務(wù):硬件電路板的制作、調(diào)試;程序的編寫和仿真;軟硬件的聯(lián)調(diào)。任務(wù)3:鍵盤的應(yīng)用1、鍵盤的分類鍵盤分編碼鍵盤和非編碼鍵盤。在單片機組成的測控系統(tǒng)及智能化儀器中,用的最多的是非編碼鍵盤。非編碼鍵盤有分為:獨立式非編碼鍵盤和行列式非編碼鍵盤。2、鍵盤的結(jié)構(gòu)常用的機械式按鍵,按鍵是4腳封裝,內(nèi)部2腳相連,圖(b)是按鍵的背面圖,用萬用表測試4只引腳的通斷。1號和2號引腳是連通的,3號和4號引腳是連通的。硬件連接時注意引出按鍵4個引腳中不相通的2個引腳,如按鍵的對角上的兩個引腳。

按鍵與單片機引腳相連后,按鍵按下或閉合會影響單片機引腳狀態(tài),讀取引腳狀態(tài),推斷按鍵是否按下,從而達到輸入信息的目的。3、獨立式按鍵

獨立式按鍵是指各按鍵相互獨立地接通一條輸入數(shù)據(jù)線。當任何一個鍵按下時,與之相連的輸入數(shù)據(jù)線即可讀入數(shù)據(jù)0,而沒有按下時讀入1。獨立式鍵盤的電路簡單,易于編程,但占用的IO口線較多,當需要較多按鍵時可能產(chǎn)生IO資源緊張問題。獨立按鍵的三種接法的分析1)當按鍵閉合時,單片機引腳接地,當按鍵斷開時,單片機引腳不能穩(wěn)定工作,因為處于高阻態(tài),易受干擾。獨立按鍵的三種接法的分析2)當按鍵閉合時,單片機引腳接地,當按鍵斷開時,單片機引腳被上拉電阻拉為高電平,按鍵閉合或按下,單片機引腳的電平穩(wěn)定,是一種標準的接法。獨立按鍵的三種接法的分析3)當按鍵斷開時,單片機引腳接地,當按鍵閉合時,單片機引腳直接和電源相連,這種接法短路電流大,易燒毀單片機I/O口電路,是危險的連接方法。4、獨立按鍵讀取引腳狀態(tài)的方法

軟件方面如何讀取引腳狀態(tài)呢?有查詢法和中斷法。普遍采用查詢法。查詢法是CPU讀取連接按鍵的單片機端口的電平狀態(tài),如果讀取的是低電平,就確認該端口對應(yīng)的按鍵已按下,如果讀取的是高電平,就確認該端口對應(yīng)的按鍵沒按下。

提示:因為51系列單片機的端口是準雙向口,在讀引腳前,需要先對輸入端口置1。

舉例:讀P1.0bits1;//定義位變量s1,保存按鍵通斷狀態(tài)P1_0=1;S1=P1_0;讀P1:Unsignedcharsw;//定義字節(jié)變量

P1=0xff;Sw=P1;

5、按鍵的去抖由于機械觸點的彈性作用,按鍵在閉合時不會馬上穩(wěn)定地接地,在斷開時也不會立刻斷開。通常在閉合和斷開的瞬間都伴隨有一定時間的觸點機械抖動,如下圖。抖動時間一般為5

10ms,在觸點抖動期間檢測按鍵的通與斷狀態(tài),可能導(dǎo)致判斷出錯。因此,為保證CPU對按鍵的斷開和閉合做出正確的判斷,就必須消除抖動。按鍵的去抖—硬件方法在鍵數(shù)較少時可用硬件方法消除鍵抖動。如圖所示的RS觸發(fā)器為常用的硬件去抖。圖中兩個“與非”門構(gòu)成一個RS觸發(fā)器。當按鍵未按下時,輸出為1;當鍵按下時,輸出為0。此時即使用按鍵的機械性能,使按鍵因彈性抖動而產(chǎn)生瞬時斷開(抖動跳開B),中要按鍵不返回原始狀態(tài)A,雙穩(wěn)態(tài)電路的狀態(tài)不改變,輸出保持為0,不會產(chǎn)生抖動的波形。也就是說,即使B點的電壓波形是抖動的,但經(jīng)雙穩(wěn)態(tài)電路之后,其輸出為正規(guī)的矩形波。這一點通過分析RS觸發(fā)器的工作過程很容易得到驗證。按鍵的去抖—硬件方法利用電容的放電延時,采用按鍵并聯(lián)電容法,也可以實現(xiàn)消抖。按鍵的去抖—軟件延時法

(a)檢測按鍵(b)釋放按鍵按鍵去抖流程圖軟件去抖的原理一:前沿消抖法。讀按鍵狀態(tài),判斷有鍵按下,延時10ms,再次讀按鍵狀態(tài),有鍵按下,才確認是哪一個按鍵,從而消除前沿的抖動。流程如下圖(a)。按鍵的去抖—軟件延時法

軟件去抖的原理二:在去抖時間內(nèi)連續(xù)多次去讀按鍵所在端口的狀態(tài),并與上一次進行對比,若狀態(tài)改變,則重新初始化去抖時間。直到在去抖時間內(nèi),每次讀到的口狀態(tài)都一致時,我們才認為掃描到穩(wěn)定的按鍵。流程如下圖(C)。舉例編寫程序,識別圖中的8個按鍵是哪一個鍵被按下,返回鍵的編號。

硬件電路按鍵編號K0K1K2K3K4K5K6K7P1二進制1111111011111101111110111111011111101111110111111011111101111111十六進制0xfe0xfd0xfb0xf70xef0xdf0xbf0x7f/****************獲取按鍵狀態(tài)的參考程序片段*************///**********按鍵掃描程序

unsignedcharkeyscan(){unsignedcharsw;//定義變量sw,暫存P1狀態(tài)的變量

unsignedcharkey//定義變量key,暫存按下鍵的編號

P1=0xff;//預(yù)先對輸入端口置1

sw=P1;

switch(sw){ case0xfe:key=0;break; case0xfd:key=1;break; case0xfb:key=2;break; case0xf7:key=3;break; case0xef:key=4;break; case0xdf:key=5;break; case0xbf:key=6;break; case0x7f:key=7;break;} returnkey;//獲得按鍵編號}6、矩陣式按鍵特點:占用IO口線較少,但軟件將較為復(fù)雜。判斷鍵盤的位置—常用方法鍵盤掃描法和反線法。行列式鍵盤鍵盤掃描法步驟:第一步:判別有無按鍵按下。其方法:向所有行給低電平0,所有的列給高電平1。讀取此時列線I/O狀態(tài),如果不是全高,則有按鍵按下。第二步:有按鍵按下,則下一步就是查找按鍵所在位置,具體步驟:向第0行給低電平0,其它給高電平1,讀取所有列的電平狀態(tài)。如果所有列電平均為高電平,則說明按下的按鍵不在第0列。反之則找到了該按鍵。依次對第1列、第2列、第3列如此操作,直到找到按下的按鍵為止。第三步:對按鍵進行編碼。反線法步驟:①判斷哪一列有鍵壓下寫端口(0xf0):行線電平=0;列線電平=1。讀端口進行判斷:若P3=0xf0→沒有按鍵壓下。若P3≠0xf0→某列有鍵壓下→則將讀取的值賦值給K1。②判斷哪一行有鍵壓下寫端口(0x0f):行線電平=1;列線電平=0。讀端口進行判斷:若P3=0x0f→沒有按鍵壓下;若P3≠0x0f→某行有鍵壓下→K2。③將K1與K2相“或”并存于K2(形成鍵值)——閉合鍵所在行、列的狀態(tài)均為0,其余皆為1。

第一列第二列第三列第四列第一行

ee de be 7e第二行

ed dd

bd 7d第三行

eb db bb 7b第四行

e7 d7 b7 774*4行列式鍵盤的各按鍵的鍵值舉例:按下任意按鍵后,LED顯示器上顯示該鍵的鍵模(0~F)。練習:在任務(wù)1的4位數(shù)碼管動態(tài)顯示的基礎(chǔ)上,硬件上設(shè)計4個獨立按鍵,編程調(diào)試仿真實現(xiàn)按下其中一個按鍵啟動顯示,按下第2個鍵停止顯示。按下第三個鍵顯示數(shù)字加1,按下第4個鍵,顯示數(shù)字減1。項目3:

LED點陣廣告牌的設(shè)計與制作項目的目標及任務(wù)1.項目目標掌握單片機的串口的原理。掌握利用74HC595和單片機的串口實現(xiàn)數(shù)據(jù)的串轉(zhuǎn)并。掌握利用單片機控制LED點陣顯示屏符號的顯示。2.項目任務(wù)基于單片機的LED點陣廣告牌功能要求:利用單片機的串口,實現(xiàn)16X16LED點陣上滾動顯示漢字。任務(wù)1:8×8的LED點陣顯示

一、LED點陣屏的結(jié)構(gòu)和顯示原理LED點陣顯示器是把很多LED發(fā)光二極管按矩陣方式排列在一起,通過對每個LED進行發(fā)光控制,完成各種字符或圖形的顯示。最常見的LED點陣顯示模塊有5×7(5列7行),7×9(7列9行),8×8(8列8行)結(jié)構(gòu)。LED點陣由一個一個的點(LED發(fā)光二極管)組成,總點數(shù)為行數(shù)與列數(shù)之積,引腳數(shù)為行數(shù)與列數(shù)之和。1、8*8點陣的外部結(jié)構(gòu)及引腳排布2、8*8點陣的內(nèi)部結(jié)構(gòu)

共陰極LDM1088AX共陽極LDM1088BX3、LED點陣引腳的測試方法

①用機械式萬用表測試管腳的方法。把萬用表撥到電阻檔×10,先用黑表筆(極性為+)隨意選擇一個引腳,紅表筆碰余下的引腳,看點陣有沒發(fā)光,沒發(fā)光就用黑色探針再選擇一個引腳,紅色探針碰余下的引腳,當點陣發(fā)光,則這時黑色探針接觸的那個引腳為正極,紅色探針碰到就發(fā)光的7個引腳為負極,剩下的6個引腳為正極。②用數(shù)字萬用表的測試方法:把萬用表功能開關(guān)撥到發(fā)光二極管檔,將紅表筆插入

"HzVm

插孔,黑表筆插入

"COM"插孔,紅表筆極性為"+",黑表筆極性為"-",若萬用表有讀數(shù),同時發(fā)光二極管會發(fā)光,則此時紅表筆所測端為二極管的正極,如果被測二極管開路或極性接反,顯示屏將示

"OL"。提示:當測量在線二極管時,測量前必須斷開電源,并將相關(guān)的電容放電。4、判定LED點陣模塊引腳編號

先把器件的引腳正負分布情況記下來,正極(行)用數(shù)字表示,負極(列)用字母表示,先定負極引腳編號,黑色探針選定一個正極引腳,紅色點負極引腳,看是第幾列的二極管發(fā)光,第一列就在引腳寫A,第二列就在引腳寫B(tài),第三列......以此類推。這樣就點陣的一半引腳都編號了。剩下的正極引腳用同樣的方法,第一行的亮就在引腳標1,第二行就在引腳標2,第三行......5、動態(tài)掃描的原理分析

LED點陣的顯示過程以用動態(tài)掃描法,有逐線陰極掃描和逐線陽極掃描兩種。1)行掃描:一行一行的輪流顯示,具體如下:先給ROW1行的行控制線送有效電平,其他行送無效電平,控制只可能ROW1行上的發(fā)光管亮,把列控制數(shù)據(jù)送給L0~L7,控制ROW1行上的哪些發(fā)光管亮;延時1~3ms后,再給ROW2行的行控制線送有效電平,其他行送無效電平,控制只可能ROW2行上的發(fā)光管亮,把列控制數(shù)據(jù)送COL1~COL8,控制ROW2行上的哪些發(fā)光管亮;延時1~3ms后……最后給ROW8行的行控制線送有效電平,其他行送無效電平,控制只可能ROW8行上的發(fā)光管亮,把列控制數(shù)據(jù)送給COL1~COL8,控制ROW8行上的哪些發(fā)光管亮;延時1~3ms,如此反復(fù)。2)列掃描:同上原理一樣,唯一不同的就是它是按列輪流顯示。行與行之間的延時為行周期,所有行掃描完為場周期,行周期和場周期的時間是多少呢?場周期的時間不超過人的視覺暫留時間,取20ms為場周期,行周期為20ms/8,取1~3ms。時間短了,會重影或全亮,時間長了會閃爍。任務(wù)實施舉例:心形圖形1234567812345678方案一:單片機I/O直接控制參考程序:#include<reg51.h>unsignedchartable1[16][2]={0xfe,0x1c,0xfd,0x3e,0xfb,0x7e,0xf7,0xfc,0xef,0xfc,0xdf,0x7e,0xbf,0x3e,0x7f,0x1c};unsignedchartable2[8][2]={0xfe,0x00,0xfd,0x18,0xfb,0x3c,0xf7,0x78,0xef,0x78,0xdf,0x3c,0xbf,0x18,0x7f,0x00};unsignedint

i,j;voidmain(){ TMOD=0x01; TH0=0xfc; TL0=0x18; TR0=1; EA=1; ET0=1; P0=0xff; P1=0x00; while(1); }voidt0_inter()interrupt1{ TH0=0xfc; TL0=0x18; P0=table1[i][0]; P1=table1[i][1]; i=i+1;

if(i==8)i=0;

}方案二:單片機串口控制補充知識:1、串行通信的相關(guān)知識;2、51單片機的串行口;3、數(shù)據(jù)的串行并行轉(zhuǎn)換;1、串行通信的相關(guān)知識計算機通信是計算機技術(shù)和通信技術(shù)的相結(jié)合,完成計算機與外部設(shè)備或計算機與計算機之間的信息交換。可以分為兩大類:并行通信與串行通信。并行通信通常是將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時進行傳送。并行通信控制簡單、傳輸速度快;由于傳輸線較多,長距離傳送時成本高且接收方的各位同時接收存在困難。

串行通信是將數(shù)據(jù)字節(jié)分成一位一位的形式在一條傳輸線上逐個地傳送。串行通信的特點:傳輸線少,長距離傳送時成本低,且可以利用電話網(wǎng)等現(xiàn)成的設(shè)備,但數(shù)據(jù)的傳送控制比并行通信復(fù)雜。

串行通信的傳輸方向單工:通訊的A方只能送,而B方只能接收——廣播式。例如:除了用于遠程通信外,系統(tǒng)內(nèi)部單片機以串行方式接收外圍芯片(ADC)的數(shù)據(jù);或者控制外圍芯片(DAC、LCD等)工作。發(fā)送方A接收方BTXDRXD串行通信的傳輸方向半雙工 在某一時刻A方只能發(fā)送,B方只能接收;而在另一時刻B方只能發(fā)送,A方只能接收——對講機模式。例如:除了用于遠程通信外,系統(tǒng)內(nèi)部單片機與串行接口的RAM、E2PROM之間的數(shù)據(jù)交換。發(fā)送方A接收方BTXDRXDTXDRXD串行通信的傳輸方向全雙工:A、B雙方可以同時發(fā)送和接收數(shù)據(jù)——手機模式。例如:兩臺單片機系統(tǒng)之間的數(shù)據(jù)串行交換。發(fā)送方A接收方BTXDRXDTXDRXD2、51單片機的串行口具有一個“全雙工”的通訊能力串行接口。 其中:P3.0端口作RXD——數(shù)據(jù)接收端;

P3.1端口作TXD——數(shù)據(jù)發(fā)送端。與串行口相關(guān)的SFR有:1、SBUF---數(shù)據(jù)緩沖寄存器(存放發(fā)送和接收的數(shù)據(jù))2、

SCON---串口控制寄存器(設(shè)定串行接口工作模式、表征串口的工作狀態(tài))3.PCON---電源及波特率選擇寄存器(使波特率加倍)數(shù)據(jù)緩沖寄存器SBUF在MCS-51的串行口電路中,SBUF是用來存放發(fā)送和接收數(shù)據(jù)的兩個物理上獨立的數(shù)據(jù)緩沖寄存器,但地址都是99H。那單片機

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論