




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用
劉燎原
江蘇建筑職業(yè)技術(shù)學(xué)院微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第1頁回顧:(一)動態(tài)顯示1.什么是動態(tài)顯示2.動態(tài)顯示步驟1個數(shù)碼管步驟:(1)送段值(2)送位選(公共端)(3)延時(shí)
(4)關(guān)閉3.加驅(qū)動方法
三極管
鎖存器微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第2頁試驗(yàn)總結(jié):試驗(yàn)板數(shù)碼管動態(tài)顯示假設(shè)要求第一個數(shù)碼管先顯示百位(比如2),則:1.送段值:P0輸出段值5BH,P2.6=1(數(shù)據(jù)進(jìn)入),P2.6=0(數(shù)據(jù)鎖存),段值送入數(shù)碼管段值端;2.送位選:P0輸出位選值FEH,P2.7=1(數(shù)據(jù)進(jìn)入),P2.7=0(數(shù)據(jù)鎖存),位選值送入數(shù)碼管位選端;3.延時(shí)其它兩個數(shù)碼管類似這三個步驟。微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第3頁回顧:(二)中止1.中止源5個2.中止優(yōu)先級2個3.外部中止P3.2,P3.34.外部中止存放器IE:EA,EX0,ET0,EX1,ET1,ESTCON:IE0,IT0,IE1,IT1IP:PX0,PT0,PX1,PT1,PS
中止程序怎樣編寫?微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第4頁Voidmain{
中止初始化;
一邊做平時(shí)工作,一邊等候中止來;}Void名字(
)interrupt0/3{
要求CPU做事情;}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第5頁
項(xiàng)目四倒計(jì)時(shí)
-------單片機(jī)定時(shí)計(jì)數(shù)器微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第6頁上節(jié)課復(fù)習(xí)舉出生活中中止例子。中止過程包含哪幾個步驟?中止請求、中止響應(yīng)、中止處理、中止返回單片機(jī)內(nèi)有哪個中止源。外部中止:2
內(nèi)部中止:3
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第7頁
定時(shí)器/計(jì)數(shù)器導(dǎo)入:單片機(jī)應(yīng)用系統(tǒng)中定時(shí)計(jì)數(shù)需求:
如用單片機(jī)控制打鈴器、空調(diào)定時(shí)開關(guān)、啤酒自動生產(chǎn)線上對酒瓶計(jì)數(shù)裝置等。以實(shí)現(xiàn)定時(shí)控制;以實(shí)現(xiàn)對外界事件進(jìn)行計(jì)數(shù)。用到定時(shí)/計(jì)數(shù)實(shí)現(xiàn)定時(shí)/實(shí)現(xiàn)方式:1.軟件定時(shí);(延時(shí)程序)占用CPU2.不可編程硬件定時(shí)(555);3.可編程定時(shí)(8253,單片機(jī)定時(shí)/計(jì)數(shù)器)
AT89S51內(nèi)部有兩個定時(shí)/計(jì)數(shù)器定時(shí)/計(jì)數(shù)器到底是什么?
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第8頁一、定時(shí)/計(jì)數(shù)器概述1.關(guān)鍵定時(shí)/計(jì)數(shù)器關(guān)鍵部件是16位二進(jìn)制加1計(jì)數(shù)器(TH0、TL0或TH1、TL1)。特征:(1)每來一個計(jì)數(shù)脈沖信號,T0或T1會在原來計(jì)數(shù)值(或初值)基礎(chǔ)上加1.(2)直到計(jì)滿,再來一脈沖,計(jì)數(shù)值清0,會發(fā)生溢出。
向CPU發(fā)出中止請求,告訴CPU這次計(jì)數(shù)結(jié)束。再開始下一輪計(jì)數(shù)。這就像鬧鐘定時(shí)時(shí)間一到,鬧鐘就會響一樣。2.計(jì)數(shù)和定時(shí)有什么不一樣類比生活中計(jì)數(shù),定時(shí)(定時(shí)1分鐘)所以定時(shí)也是一個計(jì)數(shù)16位加1計(jì)數(shù)器00H20H計(jì)數(shù)脈沖21H
FFH
FFH計(jì)數(shù)脈沖
TF1向CPU發(fā)出中止請求微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第9頁3.單片機(jī)中定時(shí)、計(jì)數(shù)器兩個定時(shí)/計(jì)數(shù)器分別叫T0,T1計(jì)數(shù)脈沖從哪來?當(dāng)需要計(jì)數(shù)時(shí),計(jì)數(shù)脈沖來自于外部脈沖源(P3.4,P3.5)當(dāng)需要定時(shí)時(shí),計(jì)數(shù)脈沖來自于系統(tǒng)機(jī)器周期(時(shí)鐘振蕩器經(jīng)12分頻以后脈沖信號)。(1).計(jì)數(shù)器對外部信號計(jì)數(shù),外部計(jì)數(shù)脈沖從T0(P3.4)和T1(P3.5)輸入,開關(guān)接在下面,來一個脈沖(下降沿),將加1計(jì)數(shù)。脈沖信號微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第10頁(2).定時(shí)器定時(shí)器也是一個計(jì)數(shù)器。開關(guān)接在上面,計(jì)數(shù)脈沖信號是振蕩器經(jīng)過12分頻后信號。這是什么信號?振蕩器(晶振)12分頻信號。假如晶振為12MHZ,則計(jì)數(shù)脈沖信號T=12*1/12M=1uS(機(jī)器周期)即定時(shí)就是每過一個機(jī)器周期(1uS),計(jì)數(shù)器加1,直至計(jì)滿溢出,定時(shí)結(jié)束。定時(shí)器定時(shí)時(shí)間與晶振頻率和計(jì)數(shù)次數(shù)、初值等相關(guān)相關(guān)。若計(jì)數(shù)器對此信號計(jì)數(shù)100次,則定時(shí)時(shí)間=100×1
s=100
s。脈沖信號微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第11頁單片機(jī)怎樣定義定時(shí)或計(jì)數(shù)功效?單片機(jī)定時(shí)或計(jì)數(shù)初值怎么設(shè)置?編程設(shè)定----單片機(jī)定時(shí)中止相關(guān)存放器設(shè)置單片機(jī)處理定時(shí)中止各種情況4.與定時(shí)/計(jì)數(shù)相關(guān)特殊功效存放器TH0,TL0:定時(shí)器T0高8位,低8位(存放T0計(jì)數(shù)值)TH1,TL1:定時(shí)器T1高8位,低8位(存放T1計(jì)數(shù)值)TCON:定時(shí)控制存放器TMOD:定時(shí)方式存放器二、定時(shí)/計(jì)數(shù)器相關(guān)存放器1.TMOD(工作方式存放器)定時(shí)器方式存放器TMOD作用是設(shè)置T0、T1工作方式。TMOD格式:各位功效說明:(1)M1、M0位:工作方式選擇位微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第12頁
(1)M1、M0位:工作方式選擇位(2):計(jì)數(shù)/定時(shí)功效選擇位。
=0,設(shè)置為定時(shí)器方式,計(jì)數(shù)器輸入是內(nèi)部時(shí)鐘脈沖,其周期等于機(jī)器周期。實(shí)際上是對機(jī)器周期進(jìn)行計(jì)數(shù)。從計(jì)數(shù)值能夠求得計(jì)數(shù)時(shí)間,所以稱為定時(shí)器模式
=1,設(shè)置為計(jì)數(shù)器方式,計(jì)數(shù)器輸入來自T0(P3.4)或T1(P3.5)端外部脈沖,對外部輸入引腳T0(P3.4)或T1(P3.5)外部脈沖(負(fù)跳變)計(jì)數(shù),允許最高計(jì)數(shù)頻率為晶振頻率1/24。
M1M0方式說明00013位定時(shí)器(TH8位和TL低5位)01116位定時(shí)器/計(jì)數(shù)器102自動重裝入初值8位計(jì)數(shù)器113T0分成兩個獨(dú)立8位計(jì)數(shù)器,T1在方式3時(shí)停頓工作微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第13頁(3)GATE:門控位。用于控制訂時(shí)器開啟是否受外部中止源信號影響。GATE=0:定時(shí)開啟與外部中止無關(guān),把TCON存放器中TR1(TR0)置1即可開啟定時(shí)器1(定時(shí)器0)。慣用。GATE=1:由控制位TR1(TR0)和引腳INT0(INT1)共同控制開啟,只有在沒有外部中止請求信號情況下即外部中止引腳INT0(INT1)引腳=1時(shí),把TR1(TR0)置1才能定時(shí)器開啟。用于檢測低電平時(shí)間。比如:要設(shè)定T0工作在定時(shí)方式2.TMOD=0X02;不能位尋址00000010微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第14頁2.定時(shí)器/計(jì)數(shù)器控制存放器TCON
TF0、TF1分別是定時(shí)器/計(jì)數(shù)器T0、T1溢出標(biāo)志位,加法計(jì)數(shù)器計(jì)滿溢出時(shí)硬件自動置1,申請中止。對該標(biāo)志位有兩種處理方法:一個是以中止方式工作,即TF1置1并申請中止,響應(yīng)中止后,執(zhí)行中止服務(wù)程序,并由硬件自動使TF1清0;另一個以查詢方式工作,即經(jīng)過查詢該位是否為1來判斷是否溢出,TF1置1后必須用軟件使TF1清0。TR1、TR0
分別是定時(shí)器/計(jì)數(shù)器T1、T0定時(shí)器1啟停控制位。
GATE=0時(shí),用軟件使TR1置1即開啟定時(shí)器1,若用軟件使TR1清0則停頓定時(shí)器1。
GATE=1時(shí),用軟件使TR1置1同時(shí)外部中止INT1引腳輸入高電平才能開啟定時(shí)器1。所以初始化時(shí),只包括到TR0/1
例:開啟TR0.TCON屬于特殊功效存放器,地址能被8整除,所以可位操作.這里用位操作方便。TR0=1;
TF1TR1TF0TR0IE1IT1IE0IT0微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第15頁存放器總結(jié):3個特殊功效存放器
IETMODTCON導(dǎo)入:比如要求單片機(jī)檢測計(jì)數(shù)200個脈沖信號?定時(shí)器/計(jì)數(shù)器用于定時(shí)或計(jì)數(shù)時(shí),必須按照需要給計(jì)數(shù)器設(shè)置初值。定時(shí)器/計(jì)數(shù)器在計(jì)數(shù)初值基礎(chǔ)上以加1方式進(jìn)行計(jì)數(shù),在計(jì)數(shù)器從全1變?yōu)槿?時(shí),將自動產(chǎn)生溢出中止請求,表示此次定時(shí)、計(jì)數(shù)結(jié)束。計(jì)數(shù)初值怎么設(shè)置?定時(shí)、計(jì)數(shù)器有四種工作方式,實(shí)際使用中應(yīng)用選擇哪種?
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第16頁三、定時(shí)/計(jì)數(shù)器計(jì)數(shù)容量及初值1.最大計(jì)數(shù)容量(次數(shù))最大計(jì)數(shù)容量與計(jì)數(shù)器二進(jìn)制位數(shù)相關(guān),關(guān)系為2N舉例,若為2位計(jì)數(shù)器,00,01,10,11,最大計(jì)數(shù)值為2N=42.計(jì)數(shù)初值計(jì)數(shù)不一定是從0開始,這要依據(jù)需要來設(shè)定。這個預(yù)先設(shè)定計(jì)數(shù)起點(diǎn)值稱為計(jì)數(shù)初值。
FFFFH
最大計(jì)數(shù)容量
初值
0000H計(jì)數(shù)值+初值=最大計(jì)數(shù)容量舉例,一個杯子總?cè)萘繛樽畲笥?jì)數(shù)容量,已經(jīng)裝了少許水為初值,還能裝多少水位計(jì)數(shù)值微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第17頁四.定時(shí)/計(jì)數(shù)器工作方式
MCS-51單片機(jī)T/C有4種工作方式,分別由TMOD存放器中M1、M0兩位二進(jìn)制編碼所決定。1.方式013位計(jì)數(shù)器在方式0下,T0和T1工作在13位定時(shí)/計(jì)數(shù)器方式,由TH高8位和TL低5位組成。
當(dāng)T1低五位TL1計(jì)滿時(shí)向它高八位TH1進(jìn)位,當(dāng)T113位計(jì)數(shù)器加到全部為1以后,再加1就產(chǎn)生溢出,這時(shí)置TCONTF1為1,同時(shí)把計(jì)數(shù)器全部變0。然后從0開始繼續(xù)計(jì)數(shù)。計(jì)數(shù)值范圍:0~1111111111111(8191)最大計(jì)數(shù)容量213=8192如計(jì)數(shù)值為N,則置入初值X為:
X+N=8192比如:若定時(shí)/計(jì)數(shù)器T0計(jì)數(shù)值為1000,則初值為7192,把初值轉(zhuǎn)換成二進(jìn)制數(shù)為1110000011000B,則TH0=11100000B,TL0=00011000B。脈沖信號微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第18頁2.方式116位計(jì)數(shù)器在方式1下,T0和T1工作在16位定時(shí)/計(jì)數(shù)器方式,由TH高8位和TL低8位組成。
當(dāng)T1低8位TL1計(jì)滿時(shí)向它高八位TH1進(jìn)位,當(dāng)T116位計(jì)數(shù)器加到全部為1以后,再加1就產(chǎn)生溢出,這時(shí)置TCONTF1為1,同時(shí)把計(jì)數(shù)器全部變0。然后從0開始繼續(xù)計(jì)數(shù)。最大計(jì)數(shù)次數(shù)216=65536如計(jì)數(shù)值為N,則置入初值X為:X+N=65536如定時(shí)/計(jì)數(shù)器T0計(jì)數(shù)值為1000,則初值為65536-1000=64536,把初值轉(zhuǎn)換成二進(jìn)制數(shù)為1111110000011000B,則TH0=11111100B,TL0=00011000B。脈沖信號微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第19頁3.方式28位自動重裝初值計(jì)數(shù)器在方式2下,TL0用作8位計(jì)數(shù)器,TH0用作初值存放器。當(dāng)T18位計(jì)數(shù)器加到全部為1以后,再加1就產(chǎn)生溢出,這時(shí)置TCONTF1為1;同時(shí),TH1中初值裝入TL1TL1又從初值開始計(jì)數(shù)。最大計(jì)數(shù)次數(shù)28=256如計(jì)數(shù)值為N,則置入初值X為:
X+N=256
如定時(shí)/計(jì)數(shù)器T0計(jì)數(shù)值為100,則初值為256-100=156,把初值轉(zhuǎn)換成二進(jìn)制數(shù)為10011100B,則TH0=TL0=10011100B。脈沖信號尤其適合于產(chǎn)生比較準(zhǔn)確連續(xù)脈沖信號。微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第20頁4.方式32個獨(dú)立8位計(jì)數(shù)器方式3只適合用于定時(shí)器T0,TL0既能作定時(shí)器也能作計(jì)數(shù)器使用,而TH0只能作定時(shí)器使用而不能作計(jì)數(shù)器使用。比較:(方式0,1,2)
1.3種方式最大區(qū)分是計(jì)數(shù)位數(shù)不一樣(13,16,8),所以最大計(jì)數(shù)值或定時(shí)時(shí)間也不一樣。
2.工作方式0和工作方式1特點(diǎn)就是計(jì)數(shù)溢出后,計(jì)數(shù)器變?yōu)槿?,因而循環(huán)定時(shí)或循環(huán)計(jì)數(shù)應(yīng)用時(shí)就存在重復(fù)設(shè)置初值。工作方式2含有自動重裝載功效,即自動加載計(jì)數(shù)初值。微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第21頁以方式1為例,16位,最大計(jì)數(shù)容量65536假如采取12MHz晶振,對應(yīng)脈沖周期是1微秒,計(jì)滿65536個脈沖所對應(yīng)時(shí)間就是65.536ms。計(jì)數(shù),只要用預(yù)置數(shù)方法先在計(jì)數(shù)容器內(nèi)存入一個初值,如我們要計(jì)100次,那就存入65436初值,只要再來100個脈沖,就剛好會溢出,引發(fā)中止。那么,定時(shí)初值計(jì)算?微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第22頁五.定時(shí)/計(jì)數(shù)初值計(jì)算由計(jì)數(shù)值+計(jì)數(shù)初值=最大計(jì)數(shù)容量,得到:(計(jì)數(shù)值+計(jì)數(shù)初值)×機(jī)器周期=最大計(jì)數(shù)容量×機(jī)器周期計(jì)數(shù)次數(shù)×機(jī)器周期+計(jì)數(shù)初值×機(jī)器周期=最大計(jì)數(shù)容量×機(jī)器周期定時(shí)時(shí)間+計(jì)數(shù)初值×機(jī)器周期=最大計(jì)數(shù)容量×機(jī)器周期即定時(shí)時(shí)間=(最大計(jì)數(shù)容量-初值)×機(jī)器周期所以,定時(shí)初值=最大計(jì)數(shù)容量-定時(shí)時(shí)間/機(jī)器周期
=2N-定時(shí)時(shí)間/機(jī)器周期不一樣工作方式定時(shí)初值或計(jì)數(shù)初值計(jì)算方法以下表所表示:工作方式計(jì)數(shù)位數(shù)最大計(jì)數(shù)容量最大定時(shí)時(shí)間定時(shí)初值計(jì)算公式計(jì)數(shù)初值計(jì)算公式方式013213=8192213
T機(jī)X=213-T/T機(jī)X=213-計(jì)數(shù)值方式116216=65536216
T機(jī)X=216-T/T機(jī)X=216-計(jì)數(shù)值方式2828=25628
T機(jī)X=28-T/T機(jī)X=28-計(jì)數(shù)值微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第23頁舉例:定時(shí)1秒,晶振12MHZ,方式1,初值為多少?怎樣產(chǎn)生1秒定時(shí)信號?晶振12MHZ,機(jī)器周期1us4種工作方式中,最大計(jì)數(shù)容量是方式1,65536則65536us=65.536ms所以定1次不夠那就定屢次,累計(jì)在一起,組成1秒那選擇T0,工作在方式0,一次定時(shí)50ms,循環(huán)20次初值多少?TH0=0x3c;TL0=0xb0;微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第24頁
所以,在用到定時(shí)中止之前,要先用指令來設(shè)置相關(guān)存放器初始值,來設(shè)定定時(shí)中止條件------定時(shí)中止初始化。五、定時(shí)程序編寫1、程序結(jié)構(gòu)幾個程序?回想中止定義兩個程序:主程序、定時(shí)中止服務(wù)子程序
voidmain(){…}
void名字()interrupt中止號
{…}
注意:名字,自己隨意??;中止號,0-4
定時(shí)中止,中止號是1或32、這兩個程序分別做什么結(jié)合一個例子看一下
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第25頁例1:發(fā)光二極管每隔1秒閃爍1次。要求用中止方法設(shè)計(jì)實(shí)現(xiàn)1s閃爍解:程序結(jié)構(gòu)(中止方式,查詢方式)怎樣產(chǎn)生1秒定時(shí)信號?T0一次定時(shí)50ms,循環(huán)20次確定工作方式,計(jì)算初值用到定時(shí)中止,需要定時(shí)中止初始化,設(shè)置存放器值
------放在主程序平時(shí)做事情,等候1次50ms定時(shí)結(jié)束;
------放在主程序定時(shí)時(shí)間到,有中止請求時(shí),燈閃爍,返回平時(shí)狀態(tài)。
------放在定時(shí)中止服務(wù)程序voidmain(){
定時(shí)中止初始化等候1次50ms定時(shí)結(jié)束
}void名字()interrupt中止號
{
重新賦初值燈閃爍
}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第26頁#include<REG51.h> sbitled=P1^0;unsignedcharm=0;voidmain() {P1=0xff;EA=1;中止初始化ET0=1;TMOD=0x01;TH0=0x3c;TL0=0xb0;TR0=1;while(1);等候中止(一次50ms)來}voidlsd()interrupt1{TH0=0x3c;重新賦初值
TL0=0xb0;if(++m>19)判斷是否1S到
{led=~led;m=0;}}看仿真微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第27頁總結(jié):這兩個程序分別做什么1、主程序(1)在產(chǎn)生定時(shí)中止請求前,即主程序中完成定時(shí)中止初始化(設(shè)置3個存放器)a.確定定時(shí)器/計(jì)數(shù)器工作方式,確定方式控制字,并寫入TMOD。b.預(yù)置定時(shí)初值或計(jì)數(shù)初值,依據(jù)定時(shí)時(shí)間或計(jì)數(shù)次數(shù),計(jì)算定時(shí)初值或計(jì)數(shù)初值,并寫入TH0、TL0或TH1、TL1。c.依據(jù)需要開放定時(shí)器/計(jì)數(shù)器中止,給IE中相關(guān)位賦值。d.開啟定時(shí)器/計(jì)數(shù)器,給TCON中TR1或TR0置1。(2)CPU平時(shí)做事情2、定時(shí)中止服務(wù)程序定時(shí)時(shí)間到時(shí)要做事情微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第28頁例2:設(shè)晶振頻率fOSC=12MHz,使用定時(shí)器1以方式1產(chǎn)生周期為400μs方波脈沖,并由P1.0
輸出。試以中止方式實(shí)現(xiàn)。要產(chǎn)生400μs
方波脈沖,只需在P1.0端以200μs為間隔,交替輸出高低電平即可實(shí)現(xiàn)。為此,定時(shí)間應(yīng)為200μs,定時(shí)時(shí)間一到,對P1.0端做取反操作即可。主程序:定時(shí)中止初始化定時(shí)中止服務(wù)子程序:P1.0端做取反,初值重新賦值初值計(jì)算:初值=216-T/T機(jī)=65536-200
難點(diǎn):把初值十進(jìn)制轉(zhuǎn)化為4位十六進(jìn)制,高8位放在TH0,低8位放在TL0簡單表示式寫法:
TH0=(65536-200)/256;TL0=(65536-200)%256;微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第29頁#include<REG51.h> sbitled=P1^0;voidmain() {P1=0xff;EA=1;ET0=1;TMOD=0x01;T1為方式1TH0=(65536-200)/256;初值TL0=(65536-200)%256;TR0=1;開啟定時(shí)while(1);等候中止}voidlsd()interrupt1{TH0=(65536-200)/256;重新設(shè)置初值
TL0=(65536-200)%256;led=~led;輸出取反}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第30頁例3:流水燈,每隔1秒循環(huán)左移點(diǎn)亮。
用定時(shí)中止來實(shí)現(xiàn)。
學(xué)生討論,確定編程方案。主程序做什么?定時(shí)中止服務(wù)程序做什么?微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第31頁#include<REG51.h> #include<intrins.h> sbitled=P1^0;unsignedcharm=0,n;voidmain() {P1=0xfe;n=0xfe;EA=1;ET0=1;TMOD=0x01;TH0=0x3c;TL0=0xb0;TR0=1;while(1);}voidlsd()interrupt1{TH0=0x3c;TL0=0xb0;if(++m>19){n=_crol_(n,1);P1=n;m=0;}}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第32頁例:設(shè)計(jì)出能夠顯示時(shí)間電子鐘,六位數(shù)碼管顯示。電子鐘兩個關(guān)鍵:顯示方式?
----數(shù)碼管顯示-----動態(tài)顯示(我們在前面講過顯示按鍵次數(shù)例子)秒脈沖怎樣產(chǎn)生?
------單片機(jī)T0來定時(shí)1S(前面例子)我們需要對秒脈沖計(jì)數(shù),記滿60個,為1分鐘;再需要對分鐘信號計(jì)數(shù),記滿60個,為1小時(shí)。主程序:定時(shí)中止初始化顯示小時(shí)、分鐘、秒中止服務(wù)子程序:重新賦初值判斷1秒到了嗎?判斷1分鐘到了嗎?判斷1小時(shí)到了嗎?
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第33頁#include<REG51.h> unsignedcharcodesz1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//數(shù)碼管段值數(shù)組unsignedcharsdat[]={0,0,0,0,0,0};//存放小時(shí)、分鐘、秒十位、個位數(shù)組
unsignedcharwx[]={0x01,0x02,0x04,0x08,0x10,0x20};//6個數(shù)碼管位選信號數(shù)組
unsignedcharm=0,sec=0,min=0,hou=0;//存放小時(shí)、分鐘、秒個數(shù)變量voiddelay(unsignedinta) { unsignedchari; while(a--){ for(i=0;i<120;i++); }}
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第34頁voiddisp(){unsignedchari;sdat[0]=hou/10;//小時(shí)十位
sdat[1]=hou%10;//小時(shí)個位
sdat[2]=min/10;sdat[3]=min%10;sdat[4]=sec/10;sdat[5]=sec%10;for(i=0;i<6;i++){P2=sz1[sdat[i]];動態(tài)顯示4步//送段值
P1=wx[i];//對應(yīng)位選有效
delay(10);//延時(shí)
P1=0x00;//關(guān)閉
}}voidmain() {P1=0x00;//關(guān)閉顯示
EA=1;//定時(shí)中止初始化
ET0=1;TMOD=0x01;TH0=0x3c;TL0=0xb0;TR0=1;while(1){disp();}//一邊顯示,一邊等候中止(一次50ms)來}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第35頁voidlsd()interrupt1{TH0=0x3c;//重新賦初值
TL0=0xb0;m++;if(m==20)//判斷是否1S到
{sec++;m=0;if(sec==60)//判斷是否1分鐘到
{min++;sec=0;if(min==60)//判斷是否1小時(shí)到
{hou++;min=0;{if(hou==24)//判斷是否1天到
{hou=0;}}}}}}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第36頁學(xué)生分組討論以下問題,:(1)怎樣設(shè)計(jì)1S程序(2)把書上靜態(tài)改為動態(tài),怎樣修改電路、程序教師提出問題:那么我們倒計(jì)時(shí)硬件電路怎樣構(gòu)建?構(gòu)建好后,怎樣編寫程序呢?總結(jié)布置作業(yè)
1.書上習(xí)題
2.書上靜態(tài)改為動態(tài)微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第37頁試驗(yàn):設(shè)計(jì)60秒倒計(jì)時(shí),兩位數(shù)碼管顯示。倒計(jì)到0時(shí),喇叭報(bào)警。(基于開發(fā)板)微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第38頁
項(xiàng)目四倒計(jì)時(shí)鍵盤設(shè)計(jì)與實(shí)現(xiàn)
-----------認(rèn)識鍵盤
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第39頁知識目標(biāo):1.掌握鍵盤掃描法2.掌握LCD引腳技能目標(biāo):1.掌握按鍵檢測2.掌握鍵盤連接方法3.掌握LCD與單片機(jī)接口微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第40頁
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第41頁一、基礎(chǔ)知識鍵盤是單片機(jī)應(yīng)用系統(tǒng)中人機(jī)交流不可缺乏輸入設(shè)備。鍵盤由一組規(guī)則排列按鍵組成,一個按鍵實(shí)際上是一個開關(guān)元件。鍵盤通常使用機(jī)械觸點(diǎn)式按鍵開關(guān),其主要功效是把機(jī)械上通斷轉(zhuǎn)換為電氣上邏輯關(guān)系(1和0)。觸點(diǎn)式按鍵開關(guān),使用時(shí)輕輕點(diǎn)按開關(guān)按鈕就可使開關(guān)接通,當(dāng)松開手時(shí)開關(guān)既斷開,恢復(fù)為原來電平。1.鍵盤分類(1)獨(dú)立式按鍵(2)矩陣按鍵
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第42頁二、單個按鍵1.結(jié)構(gòu)以下列圖所表示,其特點(diǎn)是每個按鍵單獨(dú)占用一根I/O口線,每個按鍵工作不會影響其它I/O口線狀態(tài)。(1)按鍵未按下,輸入高電平按鍵按下,輸入低電平(2)上拉電阻確保了有確定高電平,P0口。P1,P2,P3可不接上拉電阻)外接上拉電阻10K左右(3)使用時(shí):先把對應(yīng)輸入I/O口置1
再對該口做讀操作,若為1,說明沒按下;為0,
2.鍵可靠輸入因?yàn)闄C(jī)械觸點(diǎn)彈性作用,在開關(guān)閉合及斷開瞬間都有抖動過程,出現(xiàn)一系列電脈沖,然后其觸點(diǎn)才穩(wěn)定下來。其抖動過程如右圖所表示,這種抖動會影響我們檢測按鍵是否按下。抖動時(shí)間長短與開關(guān)機(jī)械特征相關(guān),普通為5
10ms。
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第43頁為了克服按鍵觸點(diǎn)機(jī)械抖動所致檢測誤判,必須采取去抖動辦法,可從硬件、軟件兩方面給予考慮。在鍵數(shù)較少時(shí),可采取硬件去抖;而當(dāng)鍵數(shù)較多時(shí),采取軟件去抖。在硬件上可采取在鍵輸出端加
R-S觸發(fā)器(雙穩(wěn)態(tài)觸發(fā)器)或單穩(wěn)態(tài)觸發(fā)器組成去抖動電路,以下列圖所表示是一個由R-S觸發(fā)器組成去抖動電路,當(dāng)觸發(fā)器翻轉(zhuǎn)時(shí),觸點(diǎn)抖動不會對其產(chǎn)生任何影響。鍵盤輸出經(jīng)雙穩(wěn)態(tài)電路之后變?yōu)橐?guī)范矩形方波。軟件上采取辦法是在檢測到有按鍵按下時(shí),執(zhí)行一個5ms左右(詳細(xì)時(shí)間應(yīng)視所使用按鍵進(jìn)行調(diào)整)延時(shí)程序,再確認(rèn)該鍵電平是否仍保持閉合狀態(tài)電平,若仍保持閉合狀態(tài)電平,則確認(rèn)該鍵處于閉合狀態(tài);同理,在檢測到該鍵釋放后,也應(yīng)采取相同步驟進(jìn)行確認(rèn),從而消除抖動影響。微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第44頁3、應(yīng)用(1)獨(dú)立按鍵需檢測先按下,再抬起:
if(S1==0)//假如按鍵按下
{delay(5);//延時(shí)消抖
if(S1==0)//確定按鍵按下
{while(S1==0);i++;…….}//等候按鍵抬起再做相關(guān)操作
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第45頁例:設(shè)計(jì)發(fā)聲電路。不一樣頻率脈沖電信號送到揚(yáng)聲器上,會發(fā)出不一樣聲音即不一樣音調(diào)“DO”,“RE”,“ME”等。音樂就是由不一樣頻率脈沖信號組合來組成,所以假如要播放一首歌曲,只需把一首歌曲音調(diào)對應(yīng)頻率關(guān)系弄正確即可。我們能夠利用單片機(jī)定時(shí)器產(chǎn)生各種不一樣頻率方波脈沖信號。DO:523HZRE:587HZME:659HZ此次設(shè)計(jì)中單片機(jī)晶振為12MHZ,那么定時(shí)器計(jì)數(shù)周期為1MHZ,假如選擇工作方式1,那T值便為T=65536--5﹡105/對應(yīng)頻率,那么依據(jù)不一樣頻率計(jì)算出應(yīng)該賦給定時(shí)器計(jì)數(shù)值,列出不一樣音符與單片機(jī)計(jì)數(shù)T0相關(guān)計(jì)數(shù)值以下表所表示:微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第46頁#include<REG51.h>unsignedlongcodeyy[]={64580,64684,64777,64820,64898,64968,65030};sbitK1=P1^0;sbitK2=P1^1;sbitK3=P1^2;sbitK4=P1^3;sbitK5=P1^4;sbitK6=P1^5;sbitK7=P1^6;sbitBEEP=P3^0;unsignedchari,j,m;voidmain() {BEEP=0;P1=0XFF;EA=1;ET0=1;TMOD=0x01;TR0=0;while(1){if(K1==0){while(K1==0);m=0;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}if(K2==0){while(K2==0);m=1;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}if(K3==0){while(K3==0);m=2;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}if(K4==0){while(K4==0);m=3;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第47頁if(K5==0){while(K5==0);m=4;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}if(K6==0){while(K6==0);m=5;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}if(K7==0){while(K7==0);m=6;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}}}voidlsd()interrupt1{TH0=i;TL0=j;BEEP=~BEEP;}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第48頁播放音樂實(shí)現(xiàn)方法一首歌簡譜,由很多音組成,每個音由音調(diào)和節(jié)拍組成,才能發(fā)出正確音。(1)音頻控制向蜂鳴器輸出一定頻率脈沖方波信號就能發(fā)出某個音調(diào)。利用單片機(jī)定時(shí)器實(shí)現(xiàn)比如:求出“1”音定時(shí)時(shí)間建立簡譜中每個音調(diào)對應(yīng)頻率數(shù)組f[]為了使用方便,利用宏定義,把每個音調(diào)頻率值定義一下。以下以好人一生平安為例。#definel_dao262#definel_re286#definel_mi311#definel_fa349#definel_sao392#definel_la440#definel_xi494微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第49頁#definedao523#definere587#definemi659#definefa698#definesao784#definela880#definexi987#defineh_dao1046#defineh_re1174#defineh_mi1318#defineh_fa1396#defineh_sao1567#defineh_la1760#defineh_xi1975微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第50頁unsignedintcodef[]={re,mi,re,dao,l_la,dao,l_la,l_sao,l_mi,l_sao,l_la,dao,l_la,dao,sao,la,mi,sao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao, l_la,l_la,dao,l_la,l_sao,l_re,l_mi,l_sao,re,re,sao,la,sao,fa,mi,sao,mi,la,sao,mi,re,mi,l_la,dao,re,mi,re,mi,sao,mi,l_sao,l_mi,l_sao,l_la,dao,l_la,dao,re,l_la,dao,re,mi,re,l_la,dao,re,l_la,dao,re,mi,re,0xff};微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第51頁(2)節(jié)拍控制本例簡譜節(jié)拍為每分鐘72拍,則每拍所需時(shí)間:1/72=833ms依據(jù)樂譜知識,以第一行第一小節(jié)為例,各個音調(diào)節(jié)拍為:2:1拍,需延時(shí)833ms32:2個1/4拍,需分別延時(shí)208ms1:1拍,需延時(shí)833ms6:1/4拍,需延時(shí)208ms。。。依據(jù)以上分析,能夠取1/4拍(208ms)為1個延時(shí)單位。若某個音調(diào)為1/2拍,則延時(shí)2個單位,以這類推。利用軟件延時(shí)程序?qū)崿F(xiàn)。建立簡譜中每個音調(diào)對應(yīng)節(jié)拍數(shù)組jp[]微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第52頁unsignedcharcodejp[]={4,1,1,4,1,1,2,2,2,2,2,8, 4,2,3,1,2,2, 10, 4,2,2,4,4, 2,2,2,2,4, 2,2,2,2,2,2,2, 10, 4,4,4,2,2, 4,2,4,4, 4,2,2,2,2,2,2, 10, 4,2,2,4,4, 2,2,2,2,6, 4,2,2,4,1,1,4, 10, 4,2,2,4,1,1,4, 10};微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第53頁(3)音調(diào)和節(jié)拍聯(lián)合控制依次從f[]數(shù)組中讀出音調(diào)頻率,依據(jù)頻率計(jì)算出定時(shí)時(shí)間初值,開啟定時(shí),發(fā)出該頻率音調(diào);該音調(diào)發(fā)聲時(shí)間可由節(jié)拍控制,從jp[]數(shù)組中取出該音調(diào)節(jié)拍數(shù),經(jīng)過調(diào)用延時(shí)程序控制。微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第54頁3、應(yīng)用(2)一鍵多功效例:一上電,全滅;按下按鍵K1,D1閃爍;再次按下按鍵K1,D2閃爍;再次按下按鍵K1,D3閃爍;再按下按鍵K1,D4閃爍。再次按下K1,燈全滅,如此循環(huán)。K1鍵對應(yīng)五個功效,我們定義功效號ID為0,1,2,3,4ID=0,燈全滅;ID=1,D1閃爍;ID=2,D2閃爍;ID=3,D3閃爍;ID=4,D4閃爍;微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第55頁#include<AT89X52.H>//包含AT89X52.H頭文件sbitk1=P3^0;sbitd0=P1^0;sbitd1=P1^1;sbitd2=P1^2;sbitd3=P1^3;voiddelay(unsignedinta) { unsignedchari; while(--a!=0)
{for(i=0;i<125;i++); }}voidmain(){unsignedcharid=0;while(1){P1=0xff;delay(200);
if(k1==0){delay(10);if(k1==0){while(k1==0);id++;if(id==5){id=0;}}}
switch(id){case0:P1=0xff;break;case1:d0=~d0;delay(200);break;case2:d1=~d1;delay(200);break;case3:d2=~d2;delay(200);break;case4:d3=~d3;delay(200);break;}}}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第56頁(3)獨(dú)立式鍵盤能夠用case語句,也能夠用if語句。
if(k1==0)
{delay(5);if(k1==0){while(k1==0);i++;…….}}if(k2==0)
{delay(5);if(k2==0)
{while(k2==0);i--;…….}}省略了延時(shí)消抖,最好加上。微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第57頁電子琴:7個按鍵,分別發(fā)DOU、RE、MI、FA、SOL、。。。微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第58頁電子琴#include<REG51.h>unsignedlongcodeyy[]={64580,64684,64777,64820,64898,64968,65030};sbitK1=P1^0;sbitK2=P1^1;sbitK3=P1^2;sbitK4=P1^3;sbitK5=P1^4;sbitK6=P1^5;sbitK7=P1^6;sbitBEEP=P3^0;unsignedchari,j,m;voidmain() {BEEP=0;
P1=0XFF;
EA=1;ET0=1;TR0=0;TMOD=0x01;
while(1)
{
if(K1==0){while(K1==0);m=0;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}
if(K2==0){while(K2==0);m=1;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}
if(K3==0){while(K3==0);m=2;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}
if(K4==0){while(K4==0);m=3;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}
if(K5==0){while(K5==0);m=4;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}
if(K6==0){while(K6==0);m=5;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}
if(K7==0){while(K7==0);m=6;TH0=i=yy[m]/256;TL0=j=yy[m]%256;TR0=1;}
}
}voidlsd()interrupt1{TH0=i;TL0=j;BEEP=~BEEP;}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第59頁試驗(yàn):在上次試驗(yàn)倒計(jì)時(shí)基礎(chǔ)上,增加三個按鍵(K1:初值加1。K2:初值減1。K3:開始。)微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第60頁三、鍵盤鍵盤由一組規(guī)則排列按鍵組成,一個按鍵實(shí)際上是一個開關(guān)元件。1.鍵盤分類編碼鍵盤:電腦鍵盤,內(nèi)部含編碼芯片,每按一個鍵,由編碼芯片產(chǎn)生鍵值,如ASCII碼鍵盤、BCD碼鍵盤非編碼鍵盤:靠軟件編程來識別健值鍵盤。在單片機(jī)各種系統(tǒng)中,最慣用是非編碼鍵盤。非編碼鍵盤又分為獨(dú)立式按鍵和矩陣式鍵盤(如電話,取款機(jī)鍵盤)。
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第61頁2.矩陣式鍵盤(1)結(jié)構(gòu)單片機(jī)系統(tǒng)中,若使用按鍵較多時(shí),通常采取矩陣式鍵盤,其結(jié)構(gòu)以下列圖所表示,能夠節(jié)約I/O口。采取行列式結(jié)構(gòu)并按矩陣形式排列,如圖所表示。在行列交點(diǎn)上都對應(yīng)有一個單觸點(diǎn)按鍵。一個4×4行、列結(jié)構(gòu),能夠組成一個含有16個按鍵鍵盤,無鍵按下時(shí),各行、列線彼此相交但不相連;當(dāng)按鍵被按下時(shí)則其交點(diǎn)行線和列線接通。微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第62頁(2)按鍵原理控制方式:a.先判斷是否有鍵按下:行線都輸出低電平,然后讀列線值。若列線都為高電平,說明無鍵按下;不然,有鍵按下。b.如有,延時(shí)消抖,再判斷,確定有鍵按下。c.再判斷哪一鍵按下,并得到鍵號。d.等候按鍵釋放,依據(jù)鍵號轉(zhuǎn)向不一樣功效程序。(3)判斷哪個鍵按下方法(c步驟):掃描法微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第63頁(一)掃描法(行掃描)(1)判別鍵盤上有沒有鍵閉合其方法為:讓P3.0~P3.3(行線)全輸出0,P3.4~P3.7(列線)作輸入口然后讀P3口(列線值)。若高4位P3.4~P3.7(列線)全為1,則鍵盤上沒有閉合鍵,若P3.4~P3.7不全為1,則有鍵處于閉合狀態(tài)。(2)去除鍵機(jī)械抖動其方法為:當(dāng)判別到鍵盤上有鍵閉合后,延時(shí)一段時(shí)間再判別鍵盤狀態(tài),若仍有鍵閉合,則認(rèn)為鍵盤上有一個鍵處于穩(wěn)定閉合狀態(tài),不然認(rèn)為鍵抖動。(3)判別閉合鍵鍵號(逐行掃描)其方法為:對鍵盤行線進(jìn)行掃描,逐行進(jìn)行掃描微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第64頁(一)掃描法(行掃描)(1)判別鍵盤上有沒有鍵閉合(2)去除鍵機(jī)械抖動(3)判別閉合鍵鍵號(逐行掃描)建立一個鍵值數(shù)組:把16個按鍵按下時(shí)讀出P3值按次序?qū)懗梢粋€數(shù)組。jp[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};
掃描值讀過來P3口值
P3.3~P3.0P3.7~P3.0第一行01110:ee1:de2:be3:7e第二行10114:ed5:dd6:bd7:7d第三行11018:eb9:dbA:bbB:7b第四行1110C:e7D:D7E:b7F:77逐行掃描:對鍵盤每一行進(jìn)行掃描,判斷此行是否有鍵按下。對每一行掃描時(shí),讀P3口值,把該值和數(shù)組中值進(jìn)行逐一比較,找到相等時(shí)數(shù)組序號即為鍵號。微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第65頁掃描法每個按鍵掃描值(編碼)會伴隨按鍵連接不一樣而不一樣圖1
圖2
eehdehbeh7ehedhddhbdh7dhebhdbhbbh7bhe7hd7hb7h77h微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第66頁(一)掃描法(行掃描)(1)判別鍵盤上有沒有鍵閉合(2)去除鍵機(jī)械抖動(3)判別閉合鍵鍵號(逐行掃描)(4)使CPU對鍵一次閉合僅作一次處理采取方法是等候閉合鍵釋放以后再作處理eehdehbeh7ehedhddhbdh7dhebhdbhbbh7bhe7hd7hb7h77h微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第67頁例:用1位數(shù)碼管顯示按鍵鍵號。電路微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第68頁程序#include<REG51.h>#include<INTRINS.H> unsignedcharcodesz1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//數(shù)碼管段值數(shù)組unsignedcharcodejp[]={0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d,0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77};//矩陣鍵盤鍵值數(shù)組unsignedcharc=0; //定義c變量,用來存放鍵號
voiddelay(unsignedintt) { unsignedchari; while(t--){ for(i=0;i<125;i++); }}微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第69頁voidsm()//鍵盤掃描子程序{unsignedcharj,n,a,m=0xfe;P2=0xf0;//P2.0~P2.3(行線)全輸出0,P2.4~P2.7(列線)作輸入口
k=P2;//讀P2口
k=k&0xf0;//只要得到高4位(列線值)。
if(k!=0xf0)//假如列值全為1(1111即F),有鍵按下
{delay(5);//延時(shí)消抖
if(k!=0xf0)//再判斷是否按下
{for(j=0;j<4;j++)//4行掃描
{P2=m;//掃描值給P2n=P2;//讀P2值(含有列值)給nfor(a=0;a<16;a++)//與數(shù)組中值逐一進(jìn)行比較
{if(jp[a]==n){c=a;while(P2==jp[a]);}//假如找到相等,則序號即為鍵號,等候按鍵釋放
}m=_crol_(m,1);//左移一位得到下一行掃描值
}}}voidmain() {while(1) {sm();//掃描子程序
P1=sz1[c];}//顯示鍵號
}}
微控制器系統(tǒng)設(shè)計(jì)與應(yīng)用課程第70頁
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公寓裝修施工合同
- 五人合資經(jīng)營合同樣本
- 股權(quán)轉(zhuǎn)讓及承銷合同
- 2024年泰山版小學(xué)信息技術(shù)二年級上冊《6 綜合實(shí)踐》教學(xué)設(shè)計(jì)
- 商業(yè)合同審核標(biāo)準(zhǔn)大全
- 中學(xué)2024年教育教學(xué)專項(xiàng)發(fā)展規(guī)劃執(zhí)行、完成情況
- 品牌推廣合同(三)
- 合同范文:專業(yè)虛擬主機(jī)托管
- Unit 1 Making friends Part A Let's talk(教學(xué)設(shè)計(jì))-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 按月退費(fèi)合同范本
- 2024-2025學(xué)年山東省濰坊市高三上學(xué)期1月期末英語試題
- 2025-2030年中國青海省旅游行業(yè)市場現(xiàn)狀調(diào)查及發(fā)展趨向研判報(bào)告
- 人力資源部門2023年度招聘效果分析
- 八年級數(shù)學(xué)下冊 第1章 單元綜合測試卷(北師版 2025年春)
- 2025年春新外研版(三起)英語三年級下冊課件 Unit1第1課時(shí)Startup
- 2025年安徽碳鑫科技有限公司招聘筆試參考題庫含答案解析
- 2025廣東珠海高新區(qū)科技產(chǎn)業(yè)局招聘專員1人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 數(shù)學(xué)-福建省泉州市2024-2025學(xué)年高三上學(xué)期質(zhì)量監(jiān)測(二)試卷和答案(泉州二模)
- 員工行為守則及職業(yè)道德規(guī)范
- 3學(xué)會反思 第一課時(shí) (說課稿) -2023-2024學(xué)年道德與法治六年級下冊統(tǒng)編版
- 2024年國土個人工作總結(jié)樣本(3篇)
評論
0/150
提交評論