基于幅移鍵控技術ASK(Amplitude-Shift Keying),以C8051F340單片機作為監測終端控制器,C8051F330D單片機作為探測節點控制器,采用半雙工的通信方式,通過監控終端和探測節點的無線收發電路,實現數據的雙向無線傳輸。收發電路采用直徑為0.8 mm的漆包線自行繞制成圓形空心線圈天線,天線直徑為(3.4±0.3)cm。試驗表明,探測節點與監測終端的通信距離為24 cm,通過橋接方式,節點收發功率為102 mW時,節點間的通信距離可達20 cm。與傳統無線收發模塊相比,該無線收發電路在受體積、功耗、成本限制的場合有廣闊的應用前景。 Abstract: Based on ASK technology and with the C8051F340 and C8051F330D MCU as the controller, using half-duplex communication mode, this paper achieves bi-directional data transfer. Transceiver circuit constituted by enameled wire which diameter is 0.8mm and wound into a diameter (3.4±0.3) cm circular hollow coil antenna. Tests show that the communication distance between detection and monitoring of the terminal is 24cm,the distance is up to 20cm between two nodes when using the manner of bridging and the node transceiver power is 102mW. Compared with the conventional wireless transceiver modules, the circuit has wide application prospect in small size, low cost and low power consumption and other characteristics.
上傳時間: 2013-10-19
上傳用戶:xz85592677
□基于來電顯示技術,識別主人,利用手機或固定電話實現免接通,免費用的絕密遙控關及撤防?!鯁涡酒喙δ芸删幊淘O計,MCU內核,有著十分靈活廣泛的應用(可定制特殊功能)。自動撥號的電話報警器方面:室內手動延時布防,手機或固定電話免接通遙控撤防;撥號報警+現場報警(可選)。電話遙控開關方面:用于開啟電控門鎖,保險柜電控鎖,車庫電動門,電器開關...等。更多應用......。□單芯片最多可存入6組電話號碼(6個主人)不重碼,最后一組號碼可刷新,掉電不丟失,可保100年。□非主人撥入無效,主人需20秒內連續撥通兩次遙控才有效(撤防或開關),操縱成功后會自動回撥遙控者電話一次,以表示遙控成功。絕不影響電話的正常使用。□循環撥打1-6組主人電話號碼報警15次,接聽報警時警聲提示,可同時選擇現場報警。無注冊用戶時,觸發報警將自動轉入連續現場報警1分鐘。□接警處理功能,接聽報警期間,手機或固定電話按"#"鍵退出報警。未接警的號碼繼續打報警。□僅設計兩按鈕實現用戶注冊、信息刪除、室那手動布防撤防、輸出開關控制、報警模式設定,報警期間無法手動撤防?!鮾煞N反復可編程報警模式。掉電不丟失。模式1:報警完畢自動撤防;模式2:報警完畢保持布防。□兩種自適應電路模式:DTMF解碼器接入模式和DTMF解碼器不接入模式。自動實現不同的電路設計實現不同的輸出控制功能。同一電路設計,通過增減硬部件即可實現不同的輸出功能,QL310上電時自動識別DTMF解碼器是否存在?!鮾陕肪曒敵觯浩渲幸宦份敵鲇糜诓僮饕籼崾炯皥缶瘯r加載到電話線路中供監聽用。另一路為現場報警使用(可根據需要選用,這路只有在報警時才有輸出,設計時可通過加大功率提高警聲)。□狀態記憶功能:布撤防狀態都有記憶功能(掉電不丟失)。可避免布撤防期間的偶然的停電再上電是狀態發生變化。比如,當前為布防狀態,掉電再上電后還是保持布防狀態?!跏謩硬汲贩捞崾疽?,布撤防LED指示燈?!跎想婇_機報警模式提示音,模式1發一聲提示音;模式2發兩聲提示音。□觸發端的信號智能檢測,因此可適應任何觸發信號:或高電平,或低電平,或高/低脈沖信號;無源的開關信號,如繼電器,干簧管或門磁開關等(由于觸發端內部有上拉電阻)。標準的TTL電平,通過外接簡單的限幅電路可實現更高電平或脈沖的輸入(紅外探頭,防火探頭等)。特強抗干擾處理,長距離布線可抗強電磁干擾?!?0腳PDIP封裝及20腳SOP封裝?!?V低功耗。使用3.58M晶振?!豕I級設計,工作溫度:-40℃~+85℃
上傳時間: 2013-11-13
上傳用戶:lacsx
摘要:超低頻信號發生器是科研、教學、制造業中一種最常用的通用儀器,輸出波形一般固定為正弦波、三角波、鋸齒波和方波,不能實現有時在實驗和工程應用中需要的特殊信號或自定義信號。而要實現這一要求,不是做成硬件式的專用信號發生器,就是用計算機系統來完成,前者仍然不靈活,后者費用太高。然而應用單片機技術,通過軟件與硬件的有機結合由硬件電路搭成一個環境平臺,再由軟件程序把要求的“任意函數信號”數據表嵌入在單片機程序存儲器內,通過軟件程序更改輸出波形數據表,即可方便實現輸出任意函數信號,而無需變動硬件電路。本原理樣機使用單片機AT89C51,對其進行一次固化,可以安排四種任意波形,頻率范圍為0.001~800Hz,幅值范圍為0~±10V。本文中對原理樣機的軟硬件系統的性能和誤差進行了定量分析,并設計了一套使用Intel公司的新一代16位單片機80296SA對該樣機進行了性能提升的新型樣機方案,然后對新型樣機方案進行了原理分析和性能分析,并給出了誤差的定量計算,表明此方案不但可使樣機的原理頻率范圍提高至1500Hz,輸出幅值不變,輸出分辨率提高至212,使波形質量大為改善。希望這種性價比較高的函數信號發生器對科研、教學、制造業有所幫助。關鍵詞:單片機應用 MCS51 MCS296 超低頻信號發生器
上傳時間: 2013-11-20
上傳用戶:7891
以89S52單片機和FPGA為控制核心,設計了一個測試四端網絡幅頻特性和相頻特性的掃頻儀。系統功能分為掃頻信號產生、幅頻特性測試、相頻特性測試等模塊;而操作部分包括矩陣鍵盤、點陣式液晶顯示器、波形顯示電路。系統可以測量未知網絡特定頻率點的頻率特性,此外,用戶還可以通過鍵盤設置掃頻信號的上下限,并利用示波器精確的顯示幅頻、相頻曲線。
上傳時間: 2013-11-15
上傳用戶:lingfei
基于PIC單片機的脈沖電源:設計了一種金屬凝固過程用脈沖電源。該電源采用PIC16F877作為主控芯片,實現對窄脈沖電流幅值的檢測,以及時電流脈沖幅值根據模糊PID算法進行閑環控制。使用結果表明:該電源的輸出脈沖波形良好,電流幅值穩定,滿足合金材料凝固過程的工藝要求且運行穩定可靠。關鍵詞:脈沖電源;PIC16F877單片機;模糊PID;閑環控制 Abstract:A kind of pulse power supply was designed which uses in the metal solidification process ..I11is power supply used PIC16F877 to take the master control chip reali on to the narrow pulse electric current peak-to-peak value examination,carried on the closed-loop control to the electric current pulse peak-to-peak value basis fuzzy PID algorithm.The use result indicated ,this power supply output se profile is good,and the electric current peak-to-p~k value is stable,It satisfies the alloy material solidification process the technological requirement and movement stable reliable,Key words:p se po wer supply;PIC16F877single-chip microcontroller;f r PID;closed-loop control
上傳時間: 2013-10-27
上傳用戶:xcy122677
單片機軟件濾波的幾種方法:假定從AD中讀取數據的子程序為:unsigned int get_ad();1、限幅濾波法(又稱程序判斷濾波法)A、方法:根據經驗判斷,確定兩次采樣允許的最大偏差值(設為A)。每次檢測到新值時判斷:如果本次值與上次值之差<=A,則本次值有效;如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值。B、優點:能有效克服因偶然因素引起的脈沖干擾C、缺點:無法抑制那種周期性的干擾,平滑度差D、軟件實現://=======================//值A可根據實際情況調整,value為有效值,new_value為當前采樣值//濾波程序返回有效的實際值
上傳時間: 2013-10-20
上傳用戶:xiaojie
含原理圖+電路圖+程序的波形發生器:在工作中,我們常常會用到波形發生器,它是使用頻度很高的電子儀器?,F在的波形發生器都采用單片機來構成。單片機波形發生器是以單片機核心,配相應的外圍電路和功能軟件,能實現各種波形發生的應用系統,它由硬件部分和軟件部分組成,硬件是系統的基礎,軟件則是在硬件的基礎上,對其合理的調配和使用,從而完成波形發生的任務。 波形發生器的技術指標:(1) 波形類型:方型、正弦波、三角波、鋸齒波;(2) 幅值電壓:1V、2V、3V、4V、5V;(3) 頻率值:10HZ、20HZ、50HZ、100HZ、200HZ、500HZ、1KHZ;(4) 輸出極性:雙極性操作設計1、 機器通電后,系統進行初始化,LED在面板上顯示6個0,表示系統處于初始狀態,等待用戶輸入設置命令,此時,無任何波形信號輸出。2、 用戶按下“F”、“V”、“W”,可以分別進入頻率,幅值波形設置,使系統進入設置狀態,相應的數碼管顯示“一”,此時,按其它鍵,無效;3、 在進入某一設置狀態后,輸入0~9等數字鍵,(數字鍵僅在設置狀態時,有效)為欲輸出的波形設置相應參數,LED將參數顯示在面板上;4、 如果在設置中,要改變已設定的參數,可按下“CL”鍵,清除所有已設定參數,系統恢復初始狀態,LED顯示6個0,等待重新輸入命令;5、 當必要的參數設定完畢后,所有參數顯示于LED上,用戶按下“EN”鍵,系統會將各波形參數傳遞到波形產生模塊中,以便控制波形發生,實現不同頻率,不同電壓幅值,不同類型波形的輸出;6、 用戶按下“EN”鍵后,波形發生器開始輸出滿足參數的波形信號,面板上相應類型的運行指示燈閃爍,表示波形正在輸出,LED顯示波形類型編號,頻率值、電壓幅值等波形參數;7、 波形發生器在輸出信號時,按下任意一個鍵,就停止波形信號輸出,等待重新設置參數,設置過程如上所述,如果不改變參數,可按下“EN”鍵,繼續輸出原波形信號;8、 要停止波形發生器的使用,可按下復位按鈕,將系統復位,然后關閉電源。硬件組成部分通過綜合比較,決定選用獲得廣泛應用,性能價格高的常用芯片來構成硬件電路。單片機采用MCS-51系列的89C51(一塊),74LS244和74LS373(各一塊),反相驅動器 ULN2803A(一塊),運算放大器 LM324(一塊) 波形發生器的硬件電路由單片機、鍵盤顯示器接口電路、波形轉換(D/ A)電路和電源線路等四部分構成。1.單片機電路功能:形成掃描碼,鍵值識別,鍵功能處理,完成參數設置;形成顯示段碼,向LED顯示接口電路輸出;產生定時中斷;形成波形的數字編碼,并輸出到D/A接口電路;如電路原理圖所示: 89C51的P0口和P2口作為擴展I/O口,與8255、0832、74LS373相連接,可尋址片外的寄存器。單片機尋址外設,采用存儲器映像方式,外部接口芯片與內部存儲器統一編址,89C51提供16根地址線P0(分時復用)和P2,P2口提供高8位地址線,P0口提供低8位地址線。P0口同時還要負責與8255,0832的數據傳遞。P2.7是8255的片選信號,P2.6是0832(1)的片選,P2.5是0832(2)的片選,低電平有效,P0.0、P0.1經過74LS373鎖存后,送到8255的A1、A2作,片內A口,B口,C口,控制口等寄存器的字選。89C51的P1口的低4位連接4只發光三極管,作為波形類型指示燈,表示正在輸出的波形是什么類型。單片機89C51內部有兩個定時器/計數器,在波形發生器中使用T0作為中斷源。不同的頻率值對應不同的定時初值,定時器的溢出信號作為中斷請求。控制定時器中斷的特殊功能寄存器設置如下:定時控制寄存器TCON=(00010000)工作方式選擇寄存器(TMOD)=(00000000)中斷允許控制寄存器(IE)=(10000010)2、鍵盤顯示器接口電路功能:驅動6位數碼管動態顯示; 提供響應界面; 掃面鍵盤; 提供輸入按鍵。由并口芯片8255,鎖存器74LS273,74LS244,反向驅動器ULN2803A,6位共陰極數碼管(LED)和4×4行列式鍵盤組成。8255的C口作為鍵盤的I/O接口,C口的低4位輸出到掃描碼,高4位作為輸入行狀態,按鍵的分布如圖所示。8255的A口作為LED段碼輸出口,與74LS244相連接,B口作為LED的位選信號輸出口,與ULN2803A相連接。8255內部的4個寄存器地址分配如下:控制口:7FFFH , A口:7FFFCH , B口:7FFDH , C口:7FFEH 3、D/A電路功能:將波形樣值的數字編碼轉換成模擬值;完成單極性向雙極性的波形輸出;構成由兩片0832和一塊LM324運放組成。0832(1)是參考電壓提供者,單片機向0832(1)內的鎖存器送數字編碼,不同的編碼會產生不同的輸出值,在本發生器中,可輸出1V、2V、3V、4V、5V等五個模擬值,這些值作為0832(2)的參考電壓,使0832(2)輸出波形信號時,其幅度是可調的。0832(2)用于產生各種波形信號,單片機在波形產生程序的控制下,生成波形樣值編碼,并送到0832(2)中的鎖存器,經過D/A轉換,得到波形的模擬樣值點,假如N個點就構成波形的一個周期,那么0832(2)輸出N個樣值點后,樣值點形成運動軌跡,就是波形信號的一個周期。重復輸出N個點后,由此成第二個周期,第三個周期……。這樣0832(2)就能連續的輸出周期變化的波形信號。運放A1是直流放大器,運放A2是單極性電壓放大器,運放A3是雙極性驅動放大器,使波形信號能帶得起負載。地址分配:0832(1):DFFFH ,0832(2):BFFFH4、電源電路:功能:為波形發生器提供直流能量;構成由變壓器、整流硅堆,穩壓塊7805組成。220V的交流電,經過開關,保險管(1.5A/250V),到變壓器降壓,由220V降為10V,通過硅堆將交流電變成直流電,對于諧波,用4700μF的電解電容給予濾除。為保證直流電壓穩定,使用7805進行穩壓。最后,+5V電源配送到各用電負載。
上傳時間: 2013-11-08
上傳用戶:685
用單片機制作多功能莫爾斯碼電路:用單片機制作多功能莫爾斯碼電路莫爾斯電碼通信有著悠久的歷史,盡管它已被現代通信方式所取代,但在業余無線電通信和特殊的專業場合仍具有重要的地位,這是因為等幅電碼通信的抗干擾能力是其它任何一種通信方式都無法相比的。在短波波段用幾瓦的功率即可進行國際間的通信,收發射設備簡單易制成本低廉,所以深受業余無線電愛好者的喜愛,是業余無線電高手必備的技能。要想熟練掌握莫爾斯電碼的收發技術除了持之以恒的毅力外,還需要相關的設備。設計本電路的目的就是給愛好者提供一個實用和訓練的工具。 一、功能簡介 本電路可以配合自動鍵體和手動鍵體,產生莫爾斯碼控制信號,設有16種速度,從初學者到操作高手都能適用。監聽音調也有16種,均可以通過功能鍵進行選擇??梢园闯绦蛑性O定好的呼號自動呼叫,設有聽抄練習功能,聽抄練習有短碼和混合碼兩種模式,分別對10個數字和常用的38個混合碼模擬隨機取樣,產生分組報碼,供愛好者提高抄收水平之用,速度低4檔的聽抄練習是專為初學者所設,內容是時間間隔較長的單字符。設有PTT開關鍵,可以決定是否控制發射機工作,不需要反復通斷控制線。無論當前處于呼叫狀態還是聽抄狀態只要電鍵接點接通則自動轉到人工發報程序。4分鐘內不使用電路將自動關閉電源,只有按復位鍵才能重新開始工作。先按住聽抄練習鍵復位則進入短碼練習狀態,其它功能不變。從開機到自動關機執行每個功能都有不同的莫爾斯碼提示音。本電路具有較強的抗高低頻干擾的能力和使用方便的大電流開關接口,以適應不同的發射設備。 二、硬件電路原理硬件電路如圖1所示。設計電路的目的在于方便實用,以免在緊張的操作中失誤,所以除了聽抄練習鍵外其它鍵沒有定義復用功能。各鍵的作用在圖中已經標出。PTT控制在每次復位時處于關閉狀態,每按動一次PTT功能鍵則改變一次狀態,這樣可以使用軟件開關控制發射。 PTT處于控制狀態時發光二極管隨控制信號閃亮。考慮到自制設備及淘汰軍用設備與高檔設備控制電流的不同,PTT開關管采用了2SC2073,可以承受500mA的電流,同時還增加了無極性PTT開關電路,無論外部被控制的端口直流極性如何加到VT3的極性始終不變,供有興趣的愛好者實驗。應該注意,如果被控制的負載是感性,則電感兩端必須并聯續流二極管,除自制設備外成品機在這方面一般沒有什么問題。手動鍵只有一個接點,接通后產生連續的音頻和發射控制信號。在本電路中手動鍵的輸入端是P1.5 ,程序不斷檢測P1.5電平,當按鍵按下時P1.5電平為0,程序轉入手動鍵子程序。 自動鍵的接點分別接到P1.3和P1.4 ,同樣當程序檢測到有接點閉合時便自動產生“點”或“劃”。音頻信號從P輸出,經VT1放大后推動揚聲器發音。單片機的I/O口在輸入狀態下阻抗較高,容易受到高低頻信號干擾,所以在每個輸入端口和三極管的be端并聯電阻和高頻旁路電容,確保在較長的電鍵連線和大功率發射時電路工作穩定。圖2是印刷電路版圖,尺寸為110mmX85mm,揚聲器用粘合劑直接粘接在電路版有銅箔的面。 三、軟件設計方法 “點”時間長度是莫爾斯電碼中的基本時間單位。按規定“劃”的時間長度不小于三個“點”,同字符中“點”與“劃”的間隔不小于一個“點”,字符之間不小于一個“劃”,詞與詞之間不應小于五個“點”。在本程序中用條件轉移指令來產生“點”時間長度。通過速度功能鍵功可以設置16種延時參數。用T0中斷產生監聽音頻信號,并將中斷設為優先級,保證在聽覺上純正悅耳。T1用于自動關機計時,如果不使用任何功能四分鐘后將向PCON 位寫1,單片機進入休眠狀態,此時耗電量僅有幾個微安。自動鍵的“點”或“劃”以及手動鍵的連續發音都是子程序的反復調用。P1.2對地短接時自動呼叫可設定為另一內容。為了便于熟悉匯編語言的讀者對發音內容進行修改,這里介紹發音字符的編碼方法。莫爾斯碼的信息與計算機中二進制恰好相同,我們可以用0表示“點”,用1表示“劃”。提示音、自動呼叫、聽抄內容等字符是預先按一定編碼方式存儲在程序中的常數。每個字符的莫爾斯碼一般是由1至6位“點”、“劃”組成,也就是發音次數最多6次。程序中每個字符占用1個字節,字符時間間隔不占用字節,但更長的延時或發音結束信息占用一個字節。我們用字節的低三位表示字節的性質,對于5次及5次以下發音的字符我們用存儲器的高5位存儲發音信息,發音順序由高位至低位,用低3位存儲發音次數,發音時將數據送入累加器A,先得到發音次數,然后使A左環移,對E0進行位尋址,判斷是發“點”還是“劃”,環移次數由發音次數決定。對于6次發音的字符不能完全按照上述編碼規則,否則會出現信息重疊,如果是6次發音且最后一次是“劃”我們把發音次數定義為111B,因為這時第6次位尋址得到的是1。如果第6次發音是“點”,那么這個字符的低三位定義為000B。字符間隔時間由程序自動產生,更長的時間隔或結束標志由字節低三位110B來定義,高半字節表示字符間隔的倍數,例如26H表示再加兩倍時間間隔。如果字節為06H則表示讀字符程序結束,返回主程序。更詳細的內容不再贅述,讀者可閱讀源程序。四、使用注意事項手動鍵的操作難度相對大一些,時間節拍全由人掌握,其特點是發出的電碼帶有“人情味”。自動鍵的“點”、“劃”靠電路產生,發音標準,容易操作,而且可以達到相當快的速度,長時間工作也不易疲勞。在干擾較大、信號微弱的條件下自動鍵碼的辨別程度好于手動鍵碼。初學者初次使用手動鍵練習發報要有老師指導,且不可我行我素,一旦養成不正確的手法則很難糾正。在電臺上時常聽到一些讓對方難以抄收的電碼,這可能會使對方反感而拒絕回答。使用自動鍵也應在一定的聽抄基礎上再去練習。在暫時找不老師的情況下可多練習聽力,這對于今后能夠發出標準正確的電碼非常有益。
上傳時間: 2013-10-31
上傳用戶:sdq_123
80C51單片機由于功能全面、開發工具較為完善、衍生產品豐富、大量的設計資源可以繼承和共享,得到廣泛的應用。我們設計的一款手持線PDA產品,也選擇80C51單片機作為主、輔CPU,還具備點陣液晶顯示屏、導電橡膠鍵盤、雙IC卡接口、EEPROM存儲器、實時時鐘和串行通信口。由于使用80C51單片機開發,高級語言編程,大大降低了設計的技術風險,產品在較短的時間內就推向了市場。但是,同一些低速的微控制器(如4位單片機)和高速的RISC處理器相比,80C51單片機在功耗上沒有優勢。為了在PDA類產品中發揮80C51單片機的上述特長,我們通過采取軟、硬件配合的一系列措施,加強低電壓、低功耗設計,取得了良好的效果。該機使用一顆3V鈕扣式鋰電池,開機時工作電池小于4mA,瞬間最大工作電流小于20mA,瞬間最大工作電流小于20mA,關機電流小于2μA。一顆電池可以使用較長的時間,達到滿意的設計指標。一、低電壓低功耗設計理論在一個器件中,功耗通常用電流消耗來表示。下式表明消耗的電池與器件特性之間的關系:Icc = C ∫ Vda ≈ ΔV · C · f (1)式中:Icc是器件消耗的電流;Δ是電壓變化的幅值;C是器件電容和輸出容性負載的大小;f是器件運行頻率。從公式(1)可以得到降低系統功耗的理論依據。將器件供電電壓從5V降低3V,可以至少降低40%的功耗。降低器件的工作頻率,也能成比例地降低功耗。
上傳時間: 2013-10-13
上傳用戶:shaojie2080
16 16點陣顯示漢字原理及顯示程序 #include "config.h" #define DOTLED_LINE_PORT PORTB #define DOTLED_LINE_DDR DDRB #define DOTLED_LINE_PIN PINB #define DOTLED_LINE_SCKT PB1 #define DOTLED_LINE_SCKH PB5 #define DOTLED_LINE_SDA PB3 #define DOTLED_ROW_PORT PORTC #define DOTLED_ROW_DDR DDRC #define DOTLED_ROW_PIN PINC #define DOTLED_ROW_A0 PC0 #define DOTLED_ROW_A1 PC1 #define DOTLED_ROW_A2 PC2 #define DOTLED_ROW_A3 PC3 #define DOTLED_ROW_E PC4 uint8 font[] = { /*-- 調入了一幅圖像:這是您新建的圖像 --*/ /*-- 寬度x高度=16x16 --*/ 0x00,0x00,0x00,0x00,0x08,0x38,0x18,0x44,0x08,0x44,0x08,0x04,0x08,0x08,0x08,0x10, 0x08,0x20,0x08,0x40,0x08,0x40,0x08,0x40,0x3E,0x7C,0x00,0x00,0x00,0x00,0x00,0x00 }; static void TransmitByte(uint8 byte); static void SelectRow(uint8 row); static void FlipLatchLine(void); static void TransmitByte(uint8 byte) { uint8 i; for(i = 0 ; i < 8 ; i ++) { if(byte & (1 << i)) { DOTLED_LINE_PORT |= _BV(DOTLED_LINE_SDA); } else { DOTLED_LINE_PORT &= ~_BV(DOTLED_LINE_SDA); } //__delay_cycles(100); DOTLED_LINE_PORT |= _BV(DOTLED_LINE_SCKH); //__delay_cycles(100); DOTLED_LINE_PORT &= ~_BV(DOTLED_LINE_SCKH); //__delay_cycles(100); } } static void SelectRow(uint8 row) { //row -= 1; row |= DOTLED_ROW_PIN & 0xe0; DOTLED_ROW_PORT = row; } static void FlipLatchLine(void) { DOTLED_LINE_PORT |= _BV(DOTLED_LINE_SCKT); DOTLED_LINE_PORT &= ~_BV(DOTLED_LINE_SCKT); } void InitDotLedPort(void) { DOTLED_LINE_PORT &= ~(_BV(DOTLED_LINE_SCKT) | _BV(DOTLED_LINE_SCKH)); DOTLED_LINE_PORT |= _BV(DOTLED_LINE_SDA); DOTLED_LINE_DDR |= _BV(DOTLED_LINE_SCKT) | _BV(DOTLED_LINE_SCKH) | _BV(DOTLED_LINE_SDA); DOTLED_ROW_PORT |= 0x1f; DOTLED_ROW_PORT &= 0xf0; DOTLED_ROW_DDR |= 0x1f; } void EnableRow(boolean IsEnable) { if(IsEnable) { DOTLED_ROW_PORT &= ~_BV(DOTLED_ROW_E); } else { DOTLED_ROW_PORT |= _BV(DOTLED_ROW_E); } } void PrintDotLed(uint8 * buffer) { uint8 i , tmp; for(i = 0 ; i < 16 ; i ++) { tmp = *buffer ++; TransmitByte(~tmp); tmp = *buffer ++; TransmitByte(~tmp); SelectRow(i); FlipLatchLine(); } } void main(void) { InitDotLedPort(); EnableRow(TRUE); while(1) { PrintDotLed(font); __delay_cycles(5000); } } //---------------------------------------------------- config.h文件 #ifndef _CONFIG_H #define _CONFIG_H //#define GCCAVR #define CPU_CYCLES 7372800L #ifndef GCCAVR #define _BV(bit) (1 << (bit)) #endif #define MSB 0x80 #define LSB 0x01 #define FALSE 0 #define TRUE 1 typedef unsigned char uint8; typedef unsigned int uint16; typedef unsigned long uint32; typedef unsigned char boolean; #include <ioavr.h> #include <inavr.h> #include "dotled.h" #endif //-----
上傳時間: 2013-11-18
上傳用戶:mnacyf