freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于51單片機的智能家居控制系統(tǒng)設(shè)計(已改無錯字)

2022-12-02 15:27:24 本頁面
  

【正文】 DS/RD:數(shù)據(jù)選擇或讀輸入腳,該引腳有兩種工作模式,當(dāng) MOT接 GND 時,選用Intel 工作模式,在該模式中,該引腳 是讀允許輸入腳。 R/W:讀 /寫輸入端,該管腳也有 2 種工作模式,當(dāng) MOT接 GND 時,該腳工作在 Intel模式,此時該作為寫允許輸入。 CS:片選輸入,低電平有效。 IRQ :中斷請求輸入,低電平有效,該腳有效對 DS12C887 內(nèi)的時鐘、日歷和 RAM 中的內(nèi)容沒有任何影響,僅內(nèi)部的控制寄存器有影響,在典型的應(yīng)用中, RESET可以直接接 VCC,這樣可以保證 DS12C887 在掉電時,其內(nèi)部控制寄存器不受影響。 時鐘電路如圖 所示: 13 圖 DS12C887 時鐘電路 點陣顯示電路設(shè)計 顯示 部分包括了一塊顯示屏,以及驅(qū)動該顯示屏的驅(qū)動電路。由于單片機的 I/O 口有限 , 不能直接用 I/O 口來驅(qū)動 LED顯示屏,所以需要對單片機 I/O 口進行擴展增加單片機并行輸出的能力。 LED 顯示屏是由一個一個的發(fā)光二極管點陣構(gòu)成的,要構(gòu)成大屏幕的 LED顯示屏就需要多個發(fā)光二極管。構(gòu)成 LED 屏幕的方法有兩種,一是由單個的發(fā)光二極管逐點連接起來;二是選用一些由單個發(fā)光二極管構(gòu)成的 LED 點陣子模塊構(gòu)成大的 LED點陣模塊。目前市場上普遍采用的點陣模塊有 8 1616 幾種;這兩種屏幕構(gòu)成方法各有有缺點,單個發(fā)光二極管構(gòu)成顯 示屏優(yōu)點在于當(dāng)單個的發(fā)光二極管出現(xiàn)問題時只需更換一個二極管即可,檢修的成本較低,缺點在于連接線路復(fù)雜;而點陣模塊構(gòu)成的方法卻正好與之相反,模塊構(gòu)成省約了大量的連線,不過當(dāng)一個 LED 出現(xiàn)問題時同在一個模塊的所有LED 都必須被更換。這就加大了維修的成本。 兩種方法相比較,決定采取模塊構(gòu)成的方法來制作一個 LED 點陣顯示屏。本設(shè)計采用 1664 的點陣顯示屏,為了降低電路出現(xiàn)問題時檢修的難度,將 1664 的點陣顯示屏分為四個獨立的 1616 的 LED 點陣屏,再將四個 1616 的 LED點陣屏級聯(lián)成 1664 的點陣顯示屏。 同時 為了避免模塊的缺點,選擇點陣數(shù)較小的模塊來減小出現(xiàn)這一問題的風(fēng)險,所以構(gòu)建一個 1616 的 LED 點陣屏選用四塊 88 點陣模塊。 88 點陣模塊如圖 所示: 14 圖 88 點陣模塊 一個 1616 的 LED 顯示屏行和列各有 16 支引腳,不能單靠 51 單片機的端口驅(qū)動所以必須要對單片機的端口個數(shù)進行擴展。經(jīng)常采用的端口擴展方法是用串并轉(zhuǎn)換芯片進行譯碼。常用的串并轉(zhuǎn)換芯片有 74LS154( 4 線 16 線譯碼器)、 74HC138( 8 位串并轉(zhuǎn)換器)、 74HC595 等。 51 系列單片機端口低電平時,吸入電流可達(dá) 20mA,具有一定的驅(qū)動能力;而為高電平時,輸出電流僅數(shù)十 μA甚至更?。娏鲗嶋H上是由腳的上拉電流形成的),基本上沒有驅(qū)動能力,所以單片機不能直接驅(qū)動 LED 顯示屏顯示。在單片機和顯示屏之間還需要增加以功能放大 為 目的的驅(qū)動電路 [14]。 行驅(qū)動系統(tǒng)設(shè)計 譯碼電路的功能是為了解決單片機 I/O 端口不足。行譯碼所用器件為串并轉(zhuǎn)換器74HC138。兩個 138 級聯(lián)成 4 線 16 線譯碼器,三級管 Q1Q16 接顯示屏 H1H16 解決了顯示屏供電不足的問題。具體電路如圖 所示: 15 圖 行驅(qū)動電路圖 列驅(qū)動系統(tǒng)設(shè)計 列驅(qū)動電路由 74HC595 構(gòu)成,它具有一個 8 位串入并出的移位寄存器和一個 8 位輸出鎖存器,而且移位寄存器和輸出鎖存器的控制是各自獨立的,可以實現(xiàn)在顯示本行各列數(shù)據(jù)的同時,傳送下一行的列數(shù)據(jù),達(dá)到重疊處理的目的。數(shù)據(jù)在 SH_CP 的上升沿輸入,在 ST_CP 的上升沿進入的存儲寄存器中去。如果兩個時鐘連在一起,則移位寄存器總是比存儲寄存器早一個脈沖。移位寄存器有一個串行移位輸入( DS),和一個串行輸出( Q7) ,和一個異步的低電平復(fù)位,存儲寄存器有一個并行 8 位的,具備三態(tài)的總線輸出,當(dāng)使能 OE時(為低電平),存儲寄存器的數(shù)據(jù)輸出到總線 [15]。 工作順序:單片機先送 1 個 8 位數(shù)據(jù)到第一個 595 的內(nèi)部移位寄存器 然后數(shù)據(jù)會送到內(nèi)部的輸出寄存器 輸出 ,當(dāng) MR( 10 引腳)為高電平, OE( 13 引腳)為低電平時,數(shù)據(jù)在 SHCP 上升沿進入移位寄存器,在 STCP 上升沿輸出到并行端口。 具體電路如圖310 所示: 16 圖 列驅(qū)動電路圖 17 4 智能家居控制系統(tǒng)軟件設(shè)計 設(shè)計目標(biāo)和硬件總體結(jié)構(gòu)確定的情況下,軟件可以分為主程序, LED 顯示子程序,數(shù)字時鐘控制子程序, 步 進電機 控制子程序,溫度采集子程序,光線強度采集子程序六個主要部分組成。具體結(jié)構(gòu)如圖 所示。 圖 軟件功能結(jié)構(gòu)框圖 主 程序 設(shè)計 系統(tǒng)軟件采用 C 語言編寫,按照模塊化的設(shè)計思路設(shè)計。首先分析程序所要實現(xiàn)的功能,程序要實現(xiàn)采集溫度數(shù)據(jù),采集光線數(shù)據(jù),采集時鐘芯片數(shù)據(jù),點陣顯示, 步進電機 控制等功能。采集溫度數(shù)據(jù)和時鐘芯片數(shù)據(jù)然后通過點陣進行顯示;采集光線數(shù)據(jù)通過單片機控制 步進電機 轉(zhuǎn)角。 主程序 LED 顯示子程序 步進電機控制子程序 時鐘控制子程序 光線強度采集子程序 溫度采集子程序 18 主程序的工作流程如圖 所示: 圖 主程序流程圖 顯示 程序 的設(shè)計 LED 點陣屏顯示方式主要由靜態(tài)顯示和動態(tài)掃描顯示兩種。 對靜態(tài)顯示來說,每一個發(fā)光二極管都需要一套驅(qū)動電路,一幀畫面輸入以后便可一勞永逸地顯示,除非我們改變了顯示內(nèi)容,需要重新輸出新的點陣數(shù)據(jù) 。 這種方式系統(tǒng)原理相對簡單一些,但所需的譯碼驅(qū)動裝量很多,引線多而繁雜,不便于大屏幕的制造,成本高,其可靠性也較低 。 另一種動態(tài)掃描顯示是把整個 LED 屏幕分成若干部分,每一幅畫面的顯示是顯示完一部分后,又顯示第二部分 …… 直到顯示完最后一部分又重新開始顯示第一部分,重復(fù)循環(huán)進行 。 在重復(fù)掃描速度足夠快的情況下,我們看到的就是一幅穩(wěn)定的畫面 。 也就是說采用動態(tài)掃描顯示需要不斷進行畫面的刷新 。 在這種方式下其顯示驅(qū)動電路可重復(fù)利用,引線也大大減少,從而使硬件成本降低,且屏幕上的發(fā)光二極管輪流發(fā)光,使用時的耗電量大大降低 。 大屏幕的制造、維護要容易許多,可靠性也增加了 。 兩種顯示方式的比較再結(jié)合 51 單片機 I/O 口數(shù)量有限的原因決定采用動態(tài)掃描的方式進行顯示。 開始 系統(tǒng)初始化 從顯示數(shù)組讀取數(shù)據(jù)到顯示寄存器 讀取顯示控制命令選擇顯示方式 調(diào)用相應(yīng)顯示程序 19 動態(tài)掃描分為行掃描和列掃描兩種方式區(qū)別在于選通端和數(shù) 據(jù)輸入端分別是行還是列。在該顯示系統(tǒng)中掃描顯示的工作原理如圖 所示,先選通列然后再從行送入對應(yīng)列的數(shù)據(jù),這樣從第 1 列到第 16 列循環(huán)往復(fù),只要切換的速度足夠的快 , 利用人眼的延時特性就可以看見一幅穩(wěn)定的畫面 [16]。 選通 LED 第 1 列 選通 LED 第 2 列 選通 LED 第 16 列 按數(shù)據(jù)導(dǎo)通相應(yīng)行 按數(shù)據(jù)導(dǎo)通相應(yīng)行 按數(shù)據(jù)導(dǎo)通相應(yīng)行 圖 掃描顯示程序原理圖 點陣顯示某一行程序如下: void HC595_Data_Send(uchar *p,han,zishu) //點陣 LED 第幾行顯示數(shù)據(jù) ,其中 *p 為傳輸?shù)狞c陣數(shù)據(jù), han 為第幾 行顯示, zishu 為顯示多少個字 { uchar i。 uchar data_buff,temp=0。 Latch_port = 0。 //HC595 鎖定輸出 ,避免數(shù)據(jù)傳輸過程中,屏數(shù)據(jù)變化從而顯示閃爍 CLK_port = 0。 for(。zishu0。zishu) { data_buff = p[temp]。 temp++。 for(i=0。i8。i++) { if((data_buffamp。0x80)!=0) DA_in_port = 1。 else DA_in_port = 0。 CLK_port = 1。 CLK_port = 0。 data_buff = 1。 } 讀取所需要顯示的數(shù)據(jù)至顯示寄存器 選通第 1 列 16*16LED 從數(shù)據(jù)中讀取第 1 列對應(yīng)的行數(shù)據(jù) 選通第 2 列 從數(shù)據(jù)中讀取第 2 列對應(yīng)的行數(shù)據(jù) 選通第 16 列 從數(shù)據(jù)中讀取第 16 列對應(yīng)的行數(shù)據(jù) 16*16LED 16*16LED 20 data_buff = p[temp]。 temp++。 for(i=0。i8。i++) { if((data_buffamp。0x80)!=0) DA_in_port = 1。 else DA_in_port = 0。 CLK_port = 1。 CLK_port = 0。 data_buff = 1。 } } EN_port = 1。 //關(guān)屏顯示,原理為使 HC138 輸出全為 1,從而三極管截止,點陣不顯示 ABCD_port = (ABCD_port amp。 0x0f)|(han4)。 Latch_port = 1。 //允許 HC595 數(shù)據(jù)輸出到 Q1Q8 端口 EN_port = 0。 //HC138 輸出有效,打開顯示 Latch_port = 0。 //鎖定 HC595 數(shù)據(jù)輸出 } 點陣顯示溫度、時間的程序流程圖如圖 所示: 圖 LED 顯示日期、時間流程圖 開始 返回 讀 /寫日期、星期、時間、溫度信 息 分離出日期、星期、時間、溫度值 LED 模塊顯示對應(yīng)內(nèi)容 日期、星期、時間修改子程序 顯示自動更新子程序 模塊初始化 21 點陣顯示 日期 的程序 如下: void display_LED() //點陣顯示 { uint riqi=0,shijian=0,xingqi=0。 if(s1num==0) { while (riqi200) //顯示年月日頁面 { if(j==0) { day=read_ds(7)。 //從時鐘芯片讀取日期 month=read_ds(8)。 //從時鐘芯片讀取月份 year=read_ds(9)。 //從時鐘芯片讀取年份低兩位的數(shù)據(jù) second=read_ds(0)。 //從時鐘芯片讀取秒 minute=read_ds(2)。 //從時鐘芯片讀取分鐘 hour=read_ds(4)。 //從時鐘芯片讀取小時 yshi=year/10。 //分離年份的十位數(shù) yge=year%10。 //分離年份的個位數(shù) mshi=month/10。 //分離月份的十 位數(shù) mge=month%10。 //分離月份的個位數(shù) dshi=day/10。 //分離日期的十位數(shù) dge=day%10。
點擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1