標(biāo)題: 單片機(jī)模擬電話撥號系統(tǒng)設(shè)計(jì)資料 帶程序 [打印本頁]
作者: zhoujiacheng1 時(shí)間: 2017-6-5 18:29
標(biāo)題: 單片機(jī)模擬電話撥號系統(tǒng)設(shè)計(jì)資料 帶程序
系統(tǒng)總體設(shè)計(jì)
2.1系統(tǒng)基本設(shè)計(jì)方案
2.1.1控制部分的選擇方案與論證
2.1.2 顯示電路模塊的選擇方案與論證
2.1.3輸入電路模塊的選擇方案與論證
2.2電路設(shè)計(jì)最終方案
3 系統(tǒng)硬件設(shè)計(jì)
3.1 系統(tǒng)硬件原理圖
3.2主芯片模塊
3.2.1 AT89C51芯片引腳
3.2.2晶振和復(fù)位電路模塊
3.3顯示電路模塊
3.3.1 1602LCD簡介
3.3.2 1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表
3.3.3 1602LCD的一般初始化過程
3.4矩陣鍵盤輸入電路模塊
3.4.1矩陣鍵盤的基本結(jié)構(gòu)
3.4.2矩陣鍵盤的按鍵識別方法
4 系統(tǒng)軟件設(shè)計(jì)
4.1 程序設(shè)計(jì)整體思路
4.2.主要功能模塊設(shè)計(jì)
4.2.1 鍵盤掃描模塊設(shè)計(jì)
4.2.2 LCD顯示模塊設(shè)計(jì)
5 系統(tǒng)仿真與調(diào)試
5.1系統(tǒng)運(yùn)行環(huán)境
5.2 系統(tǒng)仿真說明
5.2.1 KEILC調(diào)試
5.2.2 Proteus調(diào)試
5.2.3 Proteus與Keilc聯(lián)調(diào)實(shí)現(xiàn)電路仿真
總 結(jié)
致 謝
參考文獻(xiàn)
附件1 源程序代碼
附件2 電話撥號系統(tǒng)電路原理圖
隨著社會的發(fā)展,科學(xué)的進(jìn)步,人們的生活水平在逐步的提高,尤其是微電子技術(shù)的發(fā)展,猶如雨后春筍般的變化。各種數(shù)字顯示儀器中的顯示、廣告牌、數(shù)碼產(chǎn)品等,傳統(tǒng)的數(shù)碼管顯示已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足各行各業(yè)的需求。單片機(jī)的應(yīng)用已經(jīng)越來越貼近生活,用單片機(jī)來實(shí)現(xiàn)一些電子設(shè)計(jì)也變得容易起來�;趩纹瑱C(jī)的LCD顯示是一種用單片機(jī)來控制的一種顯示系統(tǒng),它不僅能顯示種各數(shù)字、字母、還能顯示各種字體的漢字以及一些簡單的圖象,使用起來極為方便,只要通過對單片機(jī)寫入一定的程序來控制LCD的顯示即可完成,根據(jù)程序的不同而產(chǎn)生不同不效果。隨著單片機(jī)產(chǎn)品以及LCD產(chǎn)品的不斷涌現(xiàn),這一領(lǐng)域已經(jīng)得到了飛速的發(fā)展。
本文設(shè)計(jì)的是基于單片機(jī)的電話撥號系統(tǒng),主要介紹了一種基于AT89C51單片機(jī)的電話撥號控制系統(tǒng),該系統(tǒng)可以實(shí)現(xiàn)電話號碼數(shù)字顯示。系統(tǒng)主要由電話撥號矩陣鍵盤、單片機(jī)最小系統(tǒng)、LCD1602顯示屏幾個(gè)單元電路組成。在本設(shè)計(jì)中,最終選用的是矩陣式鍵盤,把所操作的數(shù)字送至單片機(jī),通過單片機(jī)實(shí)現(xiàn)號碼的顯示與控制。
2 系統(tǒng)總體設(shè)計(jì)
2.1系統(tǒng)基本設(shè)計(jì)方案
2.1.1控制部分的選擇方案與論證 方案一:用可編程邏輯器件設(shè)計(jì)
可采用PLD器件,設(shè)計(jì)起來結(jié)構(gòu)清晰,各個(gè)模塊從硬件上設(shè)計(jì)起來相對簡單,控制與顯示的模塊間連接也會比較方便。但是考慮到本設(shè)計(jì)的特點(diǎn),EDA在能夠擴(kuò)展上比較受局限,占用的資源也多。從成本上講,可編程邏輯器件價(jià)格比較高。
方案二:用單片機(jī)設(shè)計(jì)
用單片機(jī)芯片作為控制部分,單片機(jī)有豐富的中斷源,它的準(zhǔn)確度相當(dāng)高,并且C語言的靈活運(yùn)用,給編程帶來了方便。單片機(jī)I/O功能也比較強(qiáng)大,容易對其進(jìn)行擴(kuò)展,使設(shè)計(jì)更加完善,此外單片機(jī)的成本也比較低。
綜上所述,單片機(jī)資源豐富,程序編寫也靈活簡單,可移植性強(qiáng),性價(jià)比也高,所以選擇單片機(jī)作為主控芯片。
2.1.2 顯示電路模塊的選擇方案與論證LCD由于其顯示清晰,顯示內(nèi)容豐富,顯示信息量大,使用方便,顯示快速而得到了廣泛的應(yīng)用。
對于此系統(tǒng)本設(shè)計(jì)選用的LCD液晶能夠顯示英語字母和數(shù)字,能夠很好的滿足顯示要求,因此本設(shè)計(jì)選擇了此方案。
2.1.3輸入電路模塊的選擇方案與論證鍵盤用于實(shí)現(xiàn)單片機(jī)應(yīng)用系統(tǒng)中的數(shù)據(jù)和控制命令的輸入,鍵盤輸入也是單片機(jī)應(yīng)用系統(tǒng)中使用最廣泛的一種輸入方式。鍵盤輸入的主要對象是各種按鍵或開關(guān)。這些按健或者開關(guān)可以獨(dú)立使用,也可以組合成鍵陣使用。單片機(jī)中常用的按鍵式鍵盤可以分為兩類:獨(dú)立連接式和行列式。每類按譯碼方式的不同又分為編碼式和非編碼式兩種。單片機(jī)中一般使用的都是用軟件來識別和產(chǎn)生鍵代碼的非編碼鍵盤。行列式鍵盤的編碼方式有靜態(tài)和動(dòng)態(tài)兩種。靜態(tài)接口主要由一個(gè)行編碼器和一個(gè)列編碼器構(gòu)成;動(dòng)態(tài)接口可采用計(jì)數(shù)器,譯碼器和數(shù)據(jù)選擇器構(gòu)成。這兩種鍵盤由硬件完成鍵的辨碼任務(wù)。一般在小型儀器儀表和控制系統(tǒng)中,使用較多的是行列式和獨(dú)立式的非編碼鍵盤;如果系統(tǒng)要求實(shí)現(xiàn)多鍵同時(shí)按下的處理,則用非編碼獨(dú)立方式較為合適。
方案一:采用獨(dú)立式按鍵電路
獨(dú)立式按鍵電路每個(gè)按鍵單獨(dú)占有一根I/O接口線, 每個(gè)I/O口的工作狀態(tài)互不影響,此類鍵盤采用端口直接掃描方式。缺點(diǎn)為當(dāng)按鍵較多時(shí)占用單片機(jī)的I/O口數(shù)目較多,優(yōu)點(diǎn)為電路設(shè)計(jì)簡單,且編程相對比較容易。
方案二:采用矩陣式鍵盤電路
矩陣式鍵盤為4*3矩陣式行列掃描,雖然軟件較為復(fù)雜,但是當(dāng)按鍵較多時(shí)可降低占用單片機(jī)的I/O口數(shù)目。
對于本系統(tǒng),由于按鍵數(shù)目多,故采用方案二。
2.2電路設(shè)計(jì)最終方案本系統(tǒng)包括主芯片模塊、顯示電路模塊、鍵盤輸入模塊、晶振和復(fù)位電路模塊。綜上各方案所述,確定最終設(shè)計(jì)方案為:采用單片機(jī)作為主控芯片,1602LCD液晶作為顯示部分,矩陣式按鍵作為鍵盤輸入模塊。
3 系統(tǒng)硬件設(shè)計(jì)3.1 系統(tǒng)硬件原理圖 將電話撥號鍵盤上所撥號碼顯示在1602液晶屏上的電路如圖3.1所示。
1.011.jpg (21.61 KB, 下載次數(shù): 195)
下載附件
2017-6-5 19:03 上傳
圖3.1系統(tǒng)硬件原理圖
3.2主芯片模塊 AT89C51是一種帶4K字節(jié)閃存可編程可擦除只讀存儲器FPEROM—Falsh Programmable and Erasable Read Only Memory )的低電壓、高性能CMOS8位微處理器,俗稱單片機(jī)。AT89C2051是一種帶2K字節(jié)閃存可編程可擦除只讀存儲器的單片機(jī)。單片機(jī)的可擦除只讀存儲器可以反復(fù)擦除1000次。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個(gè)芯片中,ATMEL的AT89C51是一種高效微控制器,AT89C2051是它的一種精簡版本。AT89C51單片機(jī)為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。如圖3.2所示。
1.012.jpg (24.97 KB, 下載次數(shù): 150)
下載附件
2017-6-5 19:03 上傳
圖3.2 AT89C51芯片引腳圖
3.2.1 AT89C51芯片引腳管腳說明
VCC:供電電壓。
GND:接地。
P0口:P0口為一個(gè)8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P0口的管腳第一次寫1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。
P1口:P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。
P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門電流,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號和控制信號。
P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個(gè)TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。P3口也可作為AT89C51的一些特殊功能口,如表3.1所示。
表3.1 P3口特殊功能表
P3口同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號。
RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時(shí),要保持RST腳兩個(gè)機(jī)器周期的高電平時(shí)間。
ALE/PROG:當(dāng)訪問外部存儲器時(shí),地址鎖存允許的輸出電平用于鎖存地址的地位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時(shí)目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時(shí),將跳過一個(gè)ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí),ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。
/PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個(gè)機(jī)器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時(shí),這兩次有效的/PSEN信號將不出現(xiàn)。
/EA/VPP:當(dāng)/EA保持低電平時(shí),則在此期間外部程序存(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時(shí),/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時(shí),此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。
XTAL1:反向振蕩放大器的輸入及內(nèi)部時(shí)鐘工作電路的輸入。
XTAL2:來自反向振蕩器的輸出。
3.2.2晶振和復(fù)位電路模塊 (1)復(fù)位電路
單片機(jī)需要復(fù)位以后才能正常工作,復(fù)位的目的就是使單片機(jī)處于一個(gè)基準(zhǔn)點(diǎn),在這個(gè)基準(zhǔn)點(diǎn),程序?qū)䦶腃51的main()主函數(shù)的第一條語句開始執(zhí)行。復(fù)位工作是一個(gè)純硬件的工作,一般是在上電開始幾毫秒內(nèi)執(zhí)行完畢。
復(fù)位的過程很簡單,在電源剛剛合上時(shí),電流經(jīng)過電阻對電解電容器充電,這樣在電阻上就形成一個(gè)電壓,對于單片機(jī)來說,這個(gè)電壓就是復(fù)位電壓。經(jīng)過若干毫秒以后,電解電容器被充滿電,這時(shí)電阻就沒有電流流過,電阻兩端也就沒有電壓,單片機(jī)的復(fù)位腳電壓恢復(fù)為0,復(fù)位工作結(jié)束,單片機(jī)開始工作。晶振和復(fù)位電路模塊是系統(tǒng)中很重要的一部分,如圖3.3所示。
1.013.jpg (11.72 KB, 下載次數(shù): 158)
下載附件
2017-6-5 19:03 上傳
圖3.3 晶振和復(fù)位電路
(2)晶振電路
在AT89C51單片機(jī)內(nèi)部有一振蕩電路,只要在單片機(jī)的XTAL1和XTAL2引腳外接晶振,就改成了自激振蕩器并在單片機(jī)內(nèi)部產(chǎn)生時(shí)鐘脈沖信號。
如圖3.3所示,單片機(jī)工作的時(shí)間基準(zhǔn)是由時(shí)鐘電路提供的。在單片機(jī)的XTAL1和XTAL2兩個(gè)引腳間,接一個(gè)晶振及兩只電容就構(gòu)成了時(shí)鐘電路。
電路中的器件可以通過計(jì)算和實(shí)驗(yàn)確定,也可以參考一些典型電路參數(shù)。電路中,電容器C1和C2對晶振器頻率有微調(diào)作用,通常取值范圍30+10pF;石英晶體選擇6MHZ或12MHZ都可以。其結(jié)果只是機(jī)器周期時(shí)間不同,影響計(jì)算器的計(jì)數(shù)初值。
3.3顯示電路模塊本設(shè)計(jì)中重點(diǎn)部分是基于單片機(jī)系統(tǒng)的液晶顯示部分。液晶顯示模塊是一種將液晶顯示器件、連接件、集成電路、PCB線路板、背光源、結(jié)構(gòu)件裝配在一起的組件,英文名叫“LCD Module”, 簡稱“LCM”,中文一般為“液晶顯示模塊”。在單片機(jī)系統(tǒng)中使用液晶顯示模塊作為輸出有以下優(yōu)點(diǎn):顯示資料高、數(shù)字式接口、功率消耗小、電路中的應(yīng)用。
3.3.1 1602LCD簡介工業(yè)字符型液晶能夠同時(shí)顯示16*2即32個(gè)字,(16列2行)1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的兩條是背光電源線。 一般1602字符型液晶顯示器實(shí)物如圖3.4所示。
1.014.jpg (14.7 KB, 下載次數(shù): 160)
下載附件
2017-6-5 19:03 上傳
圖3.4 1602LCD的實(shí)物圖
1602LCD分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,應(yīng)用中并無差別。
1602LCD原件顯示原理如圖3.5所示。
圖3.5 1602LCD原件顯示原理圖
1.015.jpg (10.03 KB, 下載次數(shù): 155)
下載附件
2017-6-5 19:03 上傳
1602LCD采用標(biāo)準(zhǔn)的14腳(無背光)或16腳(帶背光)接口,各引腳接口說明如表3.2所示。
表3.2 引腳接口說明表
第1腳:VSS為地電源。
第2腳:VDD接5V正電源。
第3腳:VEE為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地時(shí)對比度最高,對比度過高時(shí)會產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度。
第4腳:RS為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。
第5腳:R/W為讀寫信號線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng)RS和R/W共同為低電平時(shí)可以寫入指令或者顯示地址,當(dāng)RS為低電平R/W為高電平時(shí)可以讀忙信號,當(dāng)RS為高電平R/W為低電平時(shí)可以寫入數(shù)據(jù)。
第6腳:E端為使能端,當(dāng)E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。
第7~14腳:D0~D7為8位雙向數(shù)據(jù)線。
第15腳:背光源正極。
第16腳:背光源負(fù)極。
1602LCD的控制命令表如表3.3所示。
表3.3 控制命令表
1602液晶模塊的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的。(說明:1為高電平、0為低電平)
指令1:清顯示,指令碼01H, 光標(biāo)復(fù)位到地址00H位置。
指令2:光標(biāo)復(fù)位,光標(biāo)返回到地址00H。
指令3:光標(biāo)和顯示模式設(shè)置 I/D:光標(biāo)移動(dòng)方向,高電平右移,低電平左移 S: 屏幕上所有文字是否左移或者右移。高電平表示有效,低電平則無效。
指令4:顯示開關(guān)控制。 D:控制整體顯示的開與關(guān),高電平表示開顯示,低電平表示關(guān)顯示 C:控制光標(biāo)的開與關(guān),高電平表示有光標(biāo),低電平表示無光標(biāo) B:控制光標(biāo)是否閃爍,高電平閃爍,低電平不閃爍。
指令5:光標(biāo)或顯示移位 S/C:高電平時(shí)移動(dòng)顯示的文字,低電平時(shí)移動(dòng)光標(biāo)。
指令6:功能設(shè)置命令 DL:高電平時(shí)為4位總線,低電平時(shí)為8位總線 N:低電平時(shí)為單行顯示,高電平時(shí)雙行顯示 F: 低電平時(shí)顯示5x7的點(diǎn)陣字符,高電平時(shí)顯示5x10的點(diǎn)陣字符。
指令7:字符發(fā)生器RAM地址設(shè)置。
指令8:DDRAM地址設(shè)置。
指令9:讀忙信號和光標(biāo)地址 BF:為忙標(biāo)志位,高電平表示忙,此時(shí)模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。
指令10:寫數(shù)據(jù)。
指令11:讀數(shù)據(jù)。
3.3.2 1602LCD的RAM地址映射及標(biāo)準(zhǔn)字庫表液晶顯示模塊是一個(gè)慢顯示器件,所以在執(zhí)行每條指令前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。要顯示字符時(shí)要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖3.6是1602的內(nèi)部顯示地址。
1.016.jpg (21.09 KB, 下載次數(shù): 142)
下載附件
2017-6-5 19:03 上傳
圖3.6 1602LCD內(nèi)部顯示地址
例如第二行第一個(gè)字符的地址是40H,那么是否直接寫入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置呢?這樣不行,因?yàn)閷懭腼@示地址時(shí)要求最高位D7恒定為高電平1所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是01000000B(40H)+10000000B (80H) =11000000B (C0H) 。
在對液晶模塊的初始化中要先設(shè)置其顯示模式,在液晶模塊顯示字符時(shí)光標(biāo)是自動(dòng)右移的,無需人工干預(yù)。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。1602液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個(gè)不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母“A”的代碼是01000001B(41H),顯示時(shí)模塊把地址41H中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A”。其中字符代碼與字符圖形對應(yīng)關(guān)系如圖3.7所示。
1.017.jpg (67.4 KB, 下載次數(shù): 156)
下載附件
2017-6-5 19:03 上傳
圖3.7字符代碼與字符圖形對應(yīng)關(guān)系
3.3.3 1602LCD的一般初始化過程延時(shí)15mS
寫指令38H(不檢測忙信號)
延時(shí)5mS
寫指令38H(不檢測忙信號)
延時(shí)5mS
寫指令38H(不檢測忙信號)
以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號
寫指令38H:顯示模式設(shè)置
寫指令08H:顯示關(guān)閉
寫指令01H:顯示清屏
寫指令06H:顯示光標(biāo)移動(dòng)設(shè)置
寫指令0CH:顯示開及光標(biāo)設(shè)置
3.4矩陣鍵盤輸入電路模塊3.4.1矩陣鍵盤的基本結(jié)構(gòu)矩陣鍵盤中的鍵實(shí)際上就是一個(gè)機(jī)械開關(guān),位于行線和列線的交點(diǎn)處,圖3.8所示為本設(shè)計(jì)中使用的4行×3列的12鍵矩陣鍵盤,當(dāng)鍵被按下時(shí),其交點(diǎn)的行線和列線接通,使相應(yīng)行線或列線上的電平發(fā)生變化,根據(jù)電平變化情況確定被按下的鍵。
1.018.jpg (9.53 KB, 下載次數(shù): 148)
下載附件
2017-6-5 19:03 上傳
圖3.8鍵盤排列圖
3.4.2矩陣鍵盤的按鍵識別方法常用的鍵盤識別方法有:行掃描法,線翻轉(zhuǎn)法和利用8279鍵盤接口的中斷法。前兩種方法相當(dāng)于查詢法,需要反復(fù)查詢按鍵的狀態(tài),會占用大量的CPU時(shí)間。后一種方法在有鍵按下時(shí)向CPU申請中斷,平時(shí)并不需要占用CPU時(shí)間。在本系統(tǒng)中,完全可以不使用中斷法完成鍵盤接口,這是由系統(tǒng)的特殊性決定的。首先,對于本系統(tǒng)而言,要實(shí)現(xiàn)便攜式的設(shè)計(jì),硬件電路使用的器件越少越好。其次,被測信號由外中斷引腳輸入,未占用單片機(jī)4個(gè)并行I/O口中的任何一個(gè),系統(tǒng)有足夠的資源利用自身I/O 口完成接口。最后,只有當(dāng)傳感器輸出信號頻率為空載頻率,系統(tǒng)處于空閑待測的狀態(tài)下,才允許鍵盤輸入,因此鍵盤識別占用的CPU時(shí)間不會對系統(tǒng)正常工作造成影響。因此直接利用單片機(jī)并行接口完成鍵盤的接口,采用行掃描法進(jìn)行鍵盤識別。
1.019.jpg (9.28 KB, 下載次數(shù): 161)
下載附件
2017-6-5 19:03 上傳
行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如圖3.9所示鍵盤。
圖3.9鍵盤原理圖
(1)判斷鍵盤上是否有鍵閉合
將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與4根行線相交叉的4個(gè)按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。
(2)去除鍵的機(jī)械抖動(dòng)
為保證鍵的正確識別,需要進(jìn)行去抖動(dòng)處理。其方法是得知鍵盤上有鍵閉合后延遲一段時(shí)間,再判別鍵盤的狀態(tài),若仍有鍵閉合,則認(rèn)為鍵盤上有一個(gè)鍵處于穩(wěn)定的閉合期,否則認(rèn)為是鍵的抖動(dòng)或者是干擾。
(3)確定閉合鍵的物理位置
在確認(rèn)有鍵按下后,即可進(jìn)入確定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在置某根行線為低電平時(shí),其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。
(4)得到閉合鍵的編號
在得到閉合鍵的物理位置的基礎(chǔ)上,根據(jù)給定的按鍵編號規(guī)律,計(jì)算得出閉合鍵的編號。
(5)確保CPU對鍵的一次閉合僅做一次處理
為實(shí)現(xiàn)這一功能,可以采用等待閉合鍵釋放以后在處理的方法。
4 系統(tǒng)軟件設(shè)計(jì)C51單片機(jī)可以應(yīng)用匯編語言和C語言進(jìn)行編程。匯編語言與機(jī)器指令一一對應(yīng),所以用匯編語言編寫的程序在單片機(jī)里運(yùn)行起來效率較高,但可移植性差。C語言程序可讀性高,也便于移植到其它系統(tǒng)中,故本次設(shè)計(jì)使用C語言編程。
4.1 程序設(shè)計(jì)整體思路本設(shè)計(jì)是由單片機(jī)控制的LCD顯示系統(tǒng),另外鍵盤來控制顯示的方式。
用P3口作為鍵盤的輸入端,對于按鍵的識別方式可以是中斷也可以是查詢,在此設(shè)計(jì)中所選用的是行掃描法進(jìn)行鍵盤識別。
用P0口作為LCD的顯示控制端,由于此LCD的顯示屏被分為了兩部分,所以應(yīng)該對LCD顯示位置進(jìn)行設(shè)置。由此LCD的顯示時(shí)序可知,在顯示過程中還需要一定的延時(shí)并且在顯示前需將一些特定的控制端置相應(yīng)的電平,所以還需要一個(gè)適當(dāng)?shù)难訒r(shí)子程序以及輸入數(shù)據(jù)前的準(zhǔn)備程序。除了這些外,還應(yīng)寫一個(gè)初始化程序,用來對LCD進(jìn)行初始化設(shè)置。
最后就是主函數(shù),它的主要功能就是判斷鍵盤上是否有按鍵閉合,若有按鍵閉合,然后根據(jù)按下的是哪一個(gè)鍵來執(zhí)行相應(yīng)的程序,選擇相應(yīng)的顯示方式。系統(tǒng)功能設(shè)計(jì)框圖如圖4.1所示。
圖4.1 系統(tǒng)功能設(shè)計(jì)框圖
4.2.主要功能模塊設(shè)計(jì) 系統(tǒng)主程序設(shè)計(jì)流程圖如圖4.2,其源代碼見附件1。
圖片見附件
圖4.2 系統(tǒng)主程序設(shè)計(jì)流程圖
系統(tǒng)第一次上電后,先進(jìn)行初始化,初始化LCD模塊,設(shè)置LCD中各個(gè)部分的顯示內(nèi)容,然后進(jìn)行鍵盤掃描,獲取按鍵,以及根據(jù)各按鍵的不同執(zhí)行相應(yīng)的操作,最后等待釋放,釋放之后再進(jìn)行鍵盤掃描,循環(huán)以上操作。
4.2.1 鍵盤掃描模塊設(shè)計(jì)鍵盤上有很多鍵,每一個(gè)鍵對應(yīng)一個(gè)鍵碼,以便根據(jù)鍵碼轉(zhuǎn)到相應(yīng)的鍵處理子程序,進(jìn)一步實(shí)現(xiàn)數(shù)據(jù)輸入和命令處理的功能。
鍵盤掃描子程序設(shè)計(jì)流程圖如圖4.3所示,其源代碼見附件1。
1.073.jpg (19.24 KB, 下載次數(shù): 150)
下載附件
2017-6-5 19:03 上傳
下面給出一個(gè)具體的例子解釋圖4.3的流程。
如圖3.2所示,AT89C51單片機(jī)的P3口用作鍵盤I/O口,鍵盤的列線接到P3口的低4位,鍵盤的行線接到P3口的高4位。列線P3.0-P3.3分別接有4個(gè)上拉電阻到正電源+5V,并把列線P3.0-P3.3設(shè)置為輸入線,行線P3.4-P3.7設(shè)置為輸出線。4根行線和4根列線形成16個(gè)相交點(diǎn)。
(1)檢測當(dāng)前是否有鍵被按下。檢測的方法是P3.4-P3.7輸出全“0”,讀取P3.0-P3.3的狀態(tài),若P3.0-P3.3為全“1”,則無鍵閉合,否則有鍵閉合。
(2)去除鍵抖動(dòng)。當(dāng)檢測到有鍵按下后,延時(shí)一段時(shí)間再做下一步的檢測判斷。
(3)若有鍵被按下,應(yīng)識別出是哪一個(gè)鍵閉合。方法是對鍵盤的行線進(jìn)行掃描。P3.4-P3.7按下述4種組合依次輸出如表 4.1所示。
表4.1 鍵盤掃描
(4)在每組行輸出時(shí)讀取P3.0-P3.3,若全為“1”,則表示為“0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計(jì)算法或查表法將閉合鍵的行值和列值轉(zhuǎn)換成所定義的鍵值。鍵盤掃描主要代碼如下:
uchar GetKey ()
{
uchar i, j, k = 0;
uchar KeyScanCode [] = {0xEF, 0xDF, 0xBF, 0x7F}; //鍵盤掃描碼
uchar KeyCodeTable[] ={0xEE,0xED,0xEB,0xDE,0xDD,0xDB,
0xBE,0xBD,0xBB,0x7E,0x7D,0x7B}; //鍵盤特征碼
P3 = 0x0F;//掃描鍵盤獲取按鍵序號
if (P3! = 0x0F) DelayMS(20);//延時(shí)去機(jī)械抖動(dòng)
if (P3! = 0x0F)
{
for (i = 0; i< 4;i++)
{ P3 = KeyScanCode;
for (j = 0;j < 3;j++)
{ k = i * 3 + j;
if (P3 == KeyCodeTable[k]) return k;}
}
}
else return 0xFF;
}
//--------------------------------------------------------------------
4.2.2 LCD顯示模塊設(shè)計(jì)LCD LM016L的顯示函數(shù)很簡單,只要按照時(shí)序圖操作,結(jié)合相關(guān)指令集,寫好LCD初始化程序,清屏程序,寫指令程序,寫數(shù)據(jù)程序,讀數(shù)據(jù)程序等一系列驅(qū)動(dòng)程序,可完成LCD的所有顯示需要。在本設(shè)計(jì)中,由于要顯示的內(nèi)容比較多,且有些需重復(fù)顯示,有些只要顯示一次,故只畫液晶顯示的基本流程。
LCD顯示模塊流程如圖4.4所示,其源代碼見附件1。
1.075.jpg (14.21 KB, 下載次數(shù): 160)
下載附件
2017-6-5 19:03 上傳
圖4.4 LCD顯示模塊流程圖
5 系統(tǒng)仿真與調(diào)試5.1系統(tǒng)運(yùn)行環(huán)境 (1)本系統(tǒng)的硬件電路是在Proteus電路仿真軟件上運(yùn)行的。
(2)本系統(tǒng)的軟件是在 Keil uVision3 上編譯運(yùn)行的。
(3)通過Proteus與Keil連調(diào)實(shí)現(xiàn)電路仿真。
5.2 系統(tǒng)仿真說明5.2.1 KEILC調(diào)試打開Keil新建工程文件,然后添加源程序文件,保存時(shí)把文件后綴名改成“.c”,再直接導(dǎo)入新建的工程中。
把源程序全部錄入后,先粗略的檢查一遍,主要改正明顯的各種錯(cuò)誤,這樣可以減少之后的修改工作量。接著Options for Target “Target 1” ,點(diǎn)擊Output ,勾選Create Hex 那個(gè)選項(xiàng),一邊生成可執(zhí)行的文件。然后點(diǎn)擊Project菜單下的Built Target命令然后再進(jìn)行編譯、連接,形成目標(biāo)文件。編譯、連接用Project菜單下的Built Target命令(或快捷鍵F7),也可以直接點(diǎn)擊工具欄中相對應(yīng)的圖標(biāo)。.
編譯、連接時(shí),如果程序存在語法有錯(cuò),則不會通過編譯,并在下面的信息窗口給出相應(yīng)的出錯(cuò)提示信息,其中錯(cuò)誤是一定得改正的,警告可以忽略。雙擊下面顯示錯(cuò)誤信息的那一行,可以直接定位錯(cuò)誤所在的行,用戶可以方便的對程序進(jìn)行修改。修改后再編譯、連接,繼續(xù)進(jìn)行調(diào)試,這個(gè)過程可能會重復(fù)多次。如果沒有任何語法上的錯(cuò)誤,則編譯、連接成功,并且信息窗口給出提示信息。
5.2.2 Proteus調(diào)試在Proteus軟件中先從元件庫中加載要使用的那些元件,然后把元件放在圖紙上一個(gè)一個(gè)的接線,盡量不讓線交錯(cuò),便于查看、分析,有必要時(shí),使用接線標(biāo)號法,完成所有元器件的接線。
5.2.3 Proteus與Keilc聯(lián)調(diào)實(shí)現(xiàn)電路仿真在Proteus中雙擊AT89C51,在彈出的窗口中Program File后面選擇在Keil中生成的以“.hex”為后綴名的文件,為單片機(jī)添加可執(zhí)行文件。然后點(diǎn)擊左下角的相關(guān)圖標(biāo),開始進(jìn)行仿真。
仿真運(yùn)行結(jié)果如下圖5.1所示。
1.076.jpg (49.56 KB, 下載次數(shù): 179)
下載附件
2017-6-5 19:03 上傳
圖5.1 電路仿真圖
總 結(jié)隨著IT行業(yè)的不斷發(fā)展,傳統(tǒng)的固定電話已漸漸不能滿足人們?nèi)粘5耐ㄐ判枨�,而更智能、更人性化、微小型、多元化的電子產(chǎn)品成為了現(xiàn)代化電子產(chǎn)業(yè)的主要發(fā)展方向。本系統(tǒng)就是基于這樣一個(gè)背景下開始設(shè)計(jì)的。系統(tǒng)以AT89C51芯片作為主控模塊,鍵盤作為輸入電路模塊,1602LCD作為顯示電路模塊,實(shí)現(xiàn)了以下功能如下:
(1)系統(tǒng)運(yùn)行時(shí)將所按下的鍵盤顯示在液晶屏上;
(2)電話號碼鍵盤上的“*”鍵能夠?qū)崿F(xiàn)退格功能;
(3)電話號碼鍵盤上的“#”鍵能夠?qū)崿F(xiàn)清除功能;
(4)每按下一個(gè)鍵盤能夠發(fā)出聲音;
通過此次設(shè)計(jì)本人在各方面有了一定的提高。
首先,通過這次設(shè)計(jì),我不僅對理論有了更深一步的認(rèn)識,增強(qiáng)了和外界技術(shù)的溝通,還培養(yǎng)了自學(xué)能力和分析解決問題的能力,更重要的是,培養(yǎng)了克服困難的勇氣和信心。
其次,培養(yǎng)了自己的市場觀念。一個(gè)商品是否能夠搶占市場,除了必須的功能和質(zhì)量要求外,其價(jià)格是最大的競爭優(yōu)勢。如何在保證質(zhì)量和完成同等功能的情況下,把產(chǎn)品的成本降到最低。是每個(gè)設(shè)計(jì)人員在作出方案時(shí)首要考慮的因素。
此次設(shè)計(jì)不僅鍛煉了我們理論和實(shí)踐相結(jié)合的綜合能力,還使得我對專業(yè)有了更深一步的了解,鞏固了我們所學(xué)的專業(yè)基礎(chǔ)知識,提高了我們解決實(shí)際工程問題的能力,同時(shí)也提高我們查閱文獻(xiàn)資料、設(shè)計(jì)手冊、設(shè)計(jì)規(guī)范的動(dòng)手能力,通過對整體的掌控,對局部的取舍,以及對細(xì)節(jié)的斟酌處理,都使我的能力得到了鍛煉,經(jīng)驗(yàn)得到了豐富,并且意志力,抗壓能力也都得到了不同程度的提升。這正是我們進(jìn)行設(shè)計(jì)的目的所在。
“團(tuán)結(jié)、合作、謙虛”這三個(gè)詞我的體會也比較深。做任何事包括做實(shí)驗(yàn)都不是孤立的,不是你“閉門造車”,而是一個(gè)需要和他人交往的過程。這就要求我們要團(tuán)結(jié),要有合作精神,要注意和他人的溝通,要謙虛,不懂就問所謂“知之為知之,不知為不知”。
總之,在整個(gè)實(shí)驗(yàn)操作和文檔完成的過程中,我體會到的是實(shí)驗(yàn)的艱辛和收獲的充實(shí),感受到的是一種堅(jiān)持不懈、契而不舍的科研精神。對我以后的深造學(xué)習(xí)有重要的意義。
致 謝設(shè)計(jì)即將完成之際,我特別想借此機(jī)會感謝一下賈老師。賈老師在百忙之中抽出時(shí)間,從方案的論證、資料的查閱、電路的設(shè)計(jì)、調(diào)試、文檔的撰寫、修改,都進(jìn)行了一絲不茍的指導(dǎo)和嚴(yán)格的要求,她的悉心指導(dǎo)是我設(shè)計(jì)能如期完成的重要因素,在此我衷心的感謝賈老師給我提供的大量指導(dǎo)與幫助。
同時(shí),在此我也非常感謝小組同學(xué)給我提供幫助。在設(shè)計(jì)過程中,我遇到的問題有很多,在編程上給了我很多指導(dǎo),在他們的幫助下我才能完成整體程序的編制。可以說,本設(shè)計(jì)的順利完成,他們對我的幫助是不可忽視的。在此,我要向他們表示由衷的感謝。
最后,感謝學(xué)校三年來對我的培養(yǎng)與教育,感謝學(xué)院各級領(lǐng)導(dǎo)及相關(guān)老師對我三年來成長的關(guān)心與本設(shè)計(jì)的指導(dǎo)。感謝所有在我完成本設(shè)計(jì)過程中給予我?guī)椭耐瑢W(xué)和朋友。也祝愿大家身體健康,工作順利,合家歡樂,萬事如意!
參考文獻(xiàn)[1] 李朝青編著,單片機(jī)原理及接口技術(shù).北京:北京航空航天大學(xué)出版社,2006.
[3] 張毅剛編著,單片機(jī)原理極其應(yīng)用.哈爾濱:哈爾濱工業(yè)大學(xué)出版社,2004.
[4] 趙建領(lǐng)編著,51系列單片機(jī)開發(fā)寶典.電子工業(yè)出版社,2007.
[5] 潘永雄編著,新編單片機(jī)原理與應(yīng)用.西安電子科技大學(xué)出版社,2003.
[6] 李國興、李偉編著,單片機(jī)開發(fā)應(yīng)用技術(shù).北京大學(xué)出版社,2007.
[7] 劉瑞新編著,單片機(jī)原理及應(yīng)用教程.機(jī)械工業(yè)出版社,2003.
[8] 譚浩強(qiáng)編著,C程序設(shè)計(jì)(第二版) [M]. 北京: 清華大學(xué)出版社, 1999.12.
[9]楊居義編著,單片機(jī)設(shè)計(jì)實(shí)例教程.清華大學(xué)出版社,2010.8.
[10] 趙又新著,微機(jī)原理與接口技術(shù).中國電力出版社,2007.
[11] 韓曉東、李勇江等著,Protel 99 SE電路設(shè)計(jì)實(shí)用教程. 中國鐵道出版社,2008.
[12] 胡漢才,單片機(jī)原理及其接口技術(shù).清華大學(xué)出版社,2010.
[13] 陳忠平編著,51單片機(jī)C語言程序設(shè)計(jì)經(jīng)典實(shí)例. 電子工業(yè)出版社,2012.
1.080.jpg (89.41 KB, 下載次數(shù): 173)
下載附件
2017-6-5 19:03 上傳
程序代碼:
- //-------------------------------------------------------------------
- // 名稱:1602顯示電話撥號鍵盤按鍵
- // 說明: 本例將電話撥號鍵盤上所撥號碼顯示在1602液晶屏上。
- //--------------------------------------------------------------------
- #include <reg51.h>
- #include <intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define DelayNOPx() {_nop_();_nop_();_nop_();_nop_();}
- sbit BEEP = P1^0;
- sbit RS = P2^0;
- sbit RW = P2^1;
- sbit E = P2^2;
- void DelayMS (uint ms); //聲明延時(shí)函數(shù)
- bit LCD_Busy ();
- void LCD_Pos (uchar);
- void LCD_Wcmd (uchar);
- void LCD_Wdat (uchar);
- //--------------------------------------------------------------------
- // 標(biāo)題字符串
- char code Title_Text[] = {"-- Phone Code --"};
- // 鍵盤序號與鍵盤符號映射表
- uchar code Key_Table[]={'1','2','3','4','5','6','7','8','9','*','0','#'};
- // 鍵盤撥號數(shù)字緩沖
- uchar Dial_Code_Str[] = {" "};
- uchar KeyNo = 0xFF;
- int tCount = 0;
- //-------------------------------------------------------------------
- // 延時(shí)
- //-------------------------------------------------------------------
- void DelayMS (uint x)
- {
- uchar i;
- while(x--) for (i = 0;i < 120; i++);
- }
- //------------------------------------------------------------------
- // 在LCD指定鍵盤上顯示字符串
- //-------------------------------------------------------------------
- void Display_String(uchar * str,uchar LineNo)
- {
- uchar k;
- LCD_Pos(LineNo);
- for (k = 0; k< 16; k++) LCD_Wdat (str[k]);
- }
- //--------------------------------------------------------------------
- // LCD狀態(tài)檢測
- //--------------------------------------------------------------------
- bit LCD_Busy ()
- {
- bit result;
- RS =0;RW =1;E=1;DelayNOPx();result = (bit)(P0 & 0x80); E= 0;
- return result;
- }
- //--------------------------------------------------------------------
- // 寫LCD命令
- //--------------------------------------------------------------------
- void LCD_Wcmd (uchar cmd)
- {
- while (LCD_Busy ()); //判斷LCD是否忙碌
- RS=0;RW=0;E=0;_nop_();_nop_();
- P0=cmd;DelayNOPx();E=1;DelayNOPx();E=0;
- }
- //-------------------------------------------------------------------
- // 寫LCD數(shù)據(jù)
- //--------------------------------------------------------------------
- void LCD_Wdat (uchar str)
- {
- while (LCD_Busy ()); //判斷LCD是否忙碌
- RS =1;RW =0;E=0;
- P0=str; DelayNOPx ();
- E=1;DelayNOPx();E=0;
- }
- //--------------------------------------------------------------------
- // LCD初始化
- //--------------------------------------------------------------------
- void LCD_Init()
- {
- LCD_Wcmd(0x38);DelayMS(1);//設(shè)定LCD為16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
- LCD_Wcmd(0x0c);DelayMS(1);//開顯示,不顯示光標(biāo)
- LCD_Wcmd(0x06);DelayMS(1);//顯示光標(biāo),自動(dòng)右移,整屏不要?jiǎng)?br />
- LCD_Wcmd(0x01);DelayMS(1);//顯示清屏
- }
- //--------------------------------------------------------------------
- // 設(shè)置LCD顯示位置
- //--------------------------------------------------------------------
- void LCD_Pos (uchar pos)
- {
- LCD_Wcmd(pos | 0x80);
- }
- //--------------------------------------------------------------------
- // T0控制按鍵聲音
- //--------------------------------------------------------------------
- void T0_INT () interrupt 1
- {
- TH0 = -600 / 256;
- TL0 = -600 % 256;
- BEEP = ~BEEP;
- if (++tCount == 200)
- {
- tCount = 0; TR0 = 0;
- }
- }
- //--------------------------------------------------------------------
- // 鍵盤掃描
- //--------------------------------------------------------------------
- uchar GetKey ()
- {
- uchar i, j, k = 0;
- uchar KeyScanCode [] = {0xEF, 0xDF, 0xBF, 0x7F}; //鍵盤掃描碼
- uchar KeyCodeTable[] ={0xEE,0xED,0xEB,0xDE,0xDD,0xDB,
- 0xBE,0xBD,0xBB,0x7E,0x7D,0x7B}; //鍵盤特征碼
- P3 = 0x0F;//掃描鍵盤獲取按鍵序號
- if (P3!= 0x0F) DelayMS(20);//延時(shí)去機(jī)械抖動(dòng)
- if (P3!= 0x0F)
- {
- for (i = 0; i< 4;i++)
- {
- P3 = KeyScanCode[i];
- for (j = 0;j < 3;j++)
- {
- k = i * 3 + j;
- if (P3 == KeyCodeTable[k]) return k;
- }
- }
- }
- else return 0xFF;
- }
- //--------------------------------------------------------------------
- // 主程序
- //--------------------------------------------------------------------
- void main()
- {
- uchar i = -1,j,a;
- P0 = P2 = P1 = 0xFF;
- IE = 0x82;
- TMOD = 0X01;//寄存器工作方式設(shè)定為模式1
- LCD_Init();//初始化LCD
- Display_String (Title_Text,0x00);//在第一行顯示標(biāo)題
- while(1)
- {
- KeyNo = GetKey();//獲取按鍵
- if (KeyNo ==0xFF) continue;//無按鍵時(shí)繼續(xù)掃描
- i++;
- if(KeyNo==9)
- { Dial_Code_Str[i-1]= ' ';i=i-2; } //按”*”鍵退格
- else
- { if (KeyNo==11)
- {for (a = 0;a< 16;a++) Dial_Code_Str[a] = ' '; i=-1;}//按鍵“#”鍵清空
- else if (i == 11)
- {for (j = 0;j < 16;j++) Dial_Code_Str[j] = ' ';i = 0;} //超過11位清空
- Dial_Code_Str[i] = Key_Table [KeyNo]; }
- Display_String (Dial_Code_Str, 0x40); //在第二行顯示號碼
- TR0 = 1;//T0中斷控制按鍵聲音
- while(GetKey()!=0xFF);//等待釋放
-
- }
- }
復(fù)制代碼
以上圖文的Word格式文檔下載(內(nèi)容和本網(wǎng)頁上的一模一樣,方便大家保存):
基于單片機(jī)的電話撥號系統(tǒng)的設(shè)計(jì).doc
(568.5 KB, 下載次數(shù): 325)
2017-6-5 18:29 上傳
點(diǎn)擊文件名下載附件
單片機(jī)模擬電話撥號文檔
下載積分: 黑幣 -5
作者: zutter 時(shí)間: 2017-6-7 12:03
厲害了,我也想做這個(gè)類似的
作者: aixf 時(shí)間: 2017-12-27 19:54
有源文件嗎?
作者: aixf 時(shí)間: 2017-12-27 19:55
我想要這個(gè)系統(tǒng)的源文件圖和代碼可以嗎?
作者: lousty 時(shí)間: 2017-12-27 21:23
非常感謝樓主分享
作者: 5555liu 時(shí)間: 2018-1-6 22:49
非常有用 感謝感謝
作者: maybenexttime 時(shí)間: 2018-4-16 20:06
解惑不少 感謝分享
作者: regen 時(shí)間: 2018-7-2 11:07
老哥666
作者: lcy960 時(shí)間: 2018-8-28 13:11
89c52rc能用在這個(gè)程序嗎?
作者: ZPDN 時(shí)間: 2018-11-6 10:30
666 厲害啊
作者: ZPDN 時(shí)間: 2018-11-7 09:40
這個(gè)149行的a為啥未定義呀?但是網(wǎng)頁上面的程序可以用
作者: mmm0 時(shí)間: 2018-12-3 14:30
aixf 發(fā)表于 2017-12-27 19:54
有源文件嗎?
能發(fā)我
一份源程序嗎
作者: YGYG.1014 時(shí)間: 2020-6-28 12:57
keil3中應(yīng)該輸入哪些代碼?
作者: YGYG.1014 時(shí)間: 2020-6-28 14:44
厲害了,結(jié)果完美運(yùn)行


作者: hdk123 時(shí)間: 2020-7-1 14:25
直接復(fù)制網(wǎng)頁里面的程序可以用 但是word里面的不行
作者: depression 時(shí)間: 2020-7-10 21:49
老鐵,有源文件嗎
作者: 3347702066 時(shí)間: 2020-7-12 08:56
感謝分享,仿真結(jié)果終于成功了
作者: oueryule 時(shí)間: 2021-6-2 19:03
直接復(fù)制網(wǎng)頁里面的程序可以用 但是word里面的不行
作者: shenlanzhou 時(shí)間: 2021-6-16 15:43
樓主有源文件嗎?
作者: TWCY 時(shí)間: 2022-3-31 10:00
請問結(jié)尾實(shí)現(xiàn)鍵盤清空功能時(shí),a未定義的問題怎么解決的?
作者: TWCY 時(shí)間: 2022-3-31 10:05
請問結(jié)尾實(shí)現(xiàn)鍵盤清空功能時(shí),a未定義的問題怎么解決的?
還有源代碼,能分享一下嗎?
作者: lmy200812 時(shí)間: 2022-3-31 14:06
加個(gè)調(diào)制解調(diào)電路更完美
作者: lxm_991 時(shí)間: 2022-4-4 00:20
額 以為是解析DTMF 不過也很不錯(cuò)了
作者: adadad132456 時(shí)間: 2022-7-7 17:29
word里面的代碼不對啊,可能是全角字符問題,還是用網(wǎng)頁上面的可以
作者: acrman 時(shí)間: 2023-12-21 11:28
有沒有好心人可以給我看看那個(gè)主程序設(shè)計(jì)模塊的流程圖還還控制聲音的代碼
作者: zhuyihu 時(shí)間: 2024-6-11 23:45
總結(jié)的好好
作者: daikai5418 時(shí)間: 2024-6-13 09:21
為什么矩陣鍵盤不能用,只有獨(dú)立按鍵可以按
作者: SDDQ 時(shí)間: 2024-11-2 10:36
嘿嘿,把哥哥,現(xiàn)在從事嵌入式行業(yè)嗎?
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |