![單片機控制AD9850的數(shù)字信號發(fā)生器C51程序文件_第1頁](http://file4.renrendoc.com/view12/M01/01/3A/wKhkGWXxHFCAWtc3AAFNITHE6Ko931.jpg)
![單片機控制AD9850的數(shù)字信號發(fā)生器C51程序文件_第2頁](http://file4.renrendoc.com/view12/M01/01/3A/wKhkGWXxHFCAWtc3AAFNITHE6Ko9312.jpg)
![單片機控制AD9850的數(shù)字信號發(fā)生器C51程序文件_第3頁](http://file4.renrendoc.com/view12/M01/01/3A/wKhkGWXxHFCAWtc3AAFNITHE6Ko9313.jpg)
![單片機控制AD9850的數(shù)字信號發(fā)生器C51程序文件_第4頁](http://file4.renrendoc.com/view12/M01/01/3A/wKhkGWXxHFCAWtc3AAFNITHE6Ko9314.jpg)
![單片機控制AD9850的數(shù)字信號發(fā)生器C51程序文件_第5頁](http://file4.renrendoc.com/view12/M01/01/3A/wKhkGWXxHFCAWtc3AAFNITHE6Ko9315.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
./單片機控制AD9850的數(shù)字信號發(fā)生器C51程序
261,文章入庫日期:2008-08-1701:28:06,來源:picavr單片機控制AD9850的數(shù)字信號發(fā)生器C51程序//函數(shù)聲明,變量定義
#include
<reg51.h>
#include
<intrins.h>
#include<ABSACC.H>
//定義管腳
#define
data_OUT
P1
sbit
FQ_UD=P3^0;
//AD9850信號更新申請
sbit
W_CLK=P3^1;
//寫控制字時鐘
unsigned
char
CON_word[5];
//Word
data[7]
data[6]
data[5]
data[4]
data[3]
data[2]
data[1]
data[0]
//W0
Phase
b
Phase
b3
Phase
b2
Phase
b1
Phase
b0
Power
Down
Control
Control
//W1
Freq-b31
Freq-b30
Freq-b29
Freq-b28
Freq-b27
Freq-b26
Freq-b25
Freq-b24
//W2
Freq-b23
Freq-b22
Freq-b21
Freq-b20
Freq-b19
Freq-b18
Freq-b17
Freq-b16
//W3
Freq-b15
Freq-b14
Freq-b13
Freq-b12
Freq-b11
Freq-b10
Freq-b9
Freq-b8
//W4
Freq-b7
Freq-b6
Freq-b5
Freq-b4
Freq-b3
Freq-b2
//
//
函數(shù)名稱:
delay
//
入口參數(shù):
N
//
函數(shù)功能:延時子程序,實現(xiàn)<16*N+24>us的延時
//
系統(tǒng)采用11.0592MHz的時鐘時,延時滿足要求,其它情況需要改動
//
void
delay<unsigned
int
N>
{
int
i;
for<i=0;i<N;i++>;
}
//
//
函數(shù)名稱:
WRITE_AD9850
//
函數(shù)功能:
將控制字寫入AD9850
//
void
WRITE_AD9850<void>
{
unsigned
char
i;
FQ_UD=0;
W_CLK=0;
delay<0>;
CON_word[0]=CON_word[0]&0xFC;
//置工作方式選擇位為00
for<i=0;i<5;i++>
{
data_OUT=CON_word[i];
//送控制字
W_CLK=0;
delay<0>;
W_CLK=1;
//上升延
delay<0>;
}
FQ_UD=1;
//上升延要求AD9850改變輸出
}
//
//
函數(shù)名稱:main
//
用戶主函數(shù)
//
函數(shù)功能:主函數(shù)
//
void
main<>
{
FQ_UD=0;
WRITE_AD9850<>;
}<單片機硬件設(shè)計的經(jīng)驗總結(jié):中國IEEE整理點擊數(shù):更新時間:2008-8-17[字體:小大]〔歡迎光臨中國IEEE,希望本文能對您有所幫助cnieee>
下面是總結(jié)的一些設(shè)計中應(yīng)注意的問題,和單片機硬件設(shè)計原則,希望大家能看完〔1〕在元器件的布局方面,應(yīng)該把相互有關(guān)的元件盡量放得靠近一些,例如,時鐘發(fā)生器、晶振、CPU的時鐘輸入端都易產(chǎn)生噪聲,在放置的時候應(yīng)把它們靠近些。對于那些易產(chǎn)生噪聲的器件、小電流電路、大電流電路開關(guān)電路等,應(yīng)盡量使其遠離單片機的邏輯控制電路和存儲電路〔ROM、RAM〕,如果可能的話,可以將這些電路另外制成電路板,這樣有利于抗干擾,提高電路工作的可靠性。
〔2〕盡量在關(guān)鍵元件,如ROM、RAM等芯片旁邊安裝去耦電容。實際上,印制電路板走線、引腳連線和接線等都可能含有較大的電感效應(yīng)。大的電感可能會在Vcc走線上引起嚴重的開關(guān)噪聲尖峰。防止Vcc走線上開關(guān)噪聲尖峰的唯一方法,是在VCC與電源地之間安放一個0.1uF的電子去耦電容。如果電路板上使用的是表面貼裝元件,可以用片狀電容直接緊靠著元件,在Vcc引腳上固定。最好是使用瓷片電容,這是因為這種電容具有較低的靜電損耗〔ESL〕和高頻阻抗,另外這種電容溫度和時間上的介質(zhì)穩(wěn)定性也很不錯。盡量不要使用鉭電容,因為在高頻下它的阻抗較高。
在安放去耦電容時需要注意以下幾點:
·在印制電路板的電源輸入端跨接100uF左右的電解電容,如果體積允許的話,電容量大一些則更好。
·原則上每個集成電路芯片的旁邊都需要放置一個0.01uF的瓷片電容,如果電路板的空隙太小而放置不下時,可以每10個芯片左右放置一個1~10的鉭電容。
·對于抗干擾能力弱、關(guān)斷時電流變化大的元件和RAM、ROM等存儲元件,應(yīng)該在電源線〔Vcc〕和地線之間接入去耦電容。
·電容的引線不要太長,特別是高頻旁路電容不能帶引線。
〔3〕在單片機控制系統(tǒng)中,地線的種類有很多,有系統(tǒng)地、屏蔽地、邏輯地、模擬地等,地線是否布局合理,將決定電路板的抗干擾能力。在設(shè)計地線和接地點的時候,應(yīng)該考慮以下問題:
·邏輯地和模擬地要分開布線,不能合用,將它們各自的地線分別與相應(yīng)的電源地線相連。在設(shè)計時,模擬地線應(yīng)盡量加粗,而且盡量加大引出端的接地面積。一般來講,對于輸入輸出的模擬信號,與單片機電路之間最好通過光耦進行隔離。
·在設(shè)計邏輯電路的印制電路版時,其地線應(yīng)構(gòu)成閉環(huán)形式,提高電路的抗干擾能力。
·地線應(yīng)盡量的粗。如果地線很細的話,則地線電阻將會較大,造成接地電位隨電流的變化而變化,致使信號電平不穩(wěn),導(dǎo)致電路的抗干擾能力下降。在布線空間允許的情況下,要保證主要地線的寬度至少在2~3mm以上,元件引腳上的接地線應(yīng)該在1.5mm左右。
·要注意接地點的選擇。當電路板上信號頻率低于1MHz時,由于布線和元件之間的電磁感應(yīng)影響很小,而接地電路形成的環(huán)流對干擾的影響較大,所以要采用一點接地,使其不形成回路。當電路板上信號頻率高于10MHz時,由于布線的電感效應(yīng)明顯,地線阻抗變得很大,此時接地電路形成的環(huán)流就不再是主要的問題了。所以應(yīng)采用多點接地,盡量降低地線阻抗。
·電源線的布置除了要根據(jù)電流的大小盡量加粗走線寬度外,在布線時還應(yīng)使電源線、地線的走線方向與數(shù)據(jù)線的走線方身一致在布線工作的最后,用地線將電路板的底層沒有走線的地方鋪滿,這些方法都有助于增強電路的抗干擾能力。
·數(shù)據(jù)線的寬度應(yīng)盡可能地寬,以減小阻抗。數(shù)據(jù)線的寬度至少不小于0.3mm<12mil>,如果采用0.46~0.5mm<18mil~20mil>則更為理想。
·由于電路板的一個過孔會帶來大約10pF的電容效應(yīng),這對于高頻電路,將會引入太多的干擾,所以在布線的時候,應(yīng)盡可能地減少過孔的數(shù)量。再有,過多的過孔也會造成電路板的機械強度降低。一個單片機應(yīng)用系統(tǒng)的硬件電路設(shè)計包含兩部分內(nèi)容:一是系統(tǒng)擴展,即單片機內(nèi)部的功能單元,如ROM、RAM、I/O、定時器/計數(shù)器、中斷系統(tǒng)等不能滿足應(yīng)用系統(tǒng)的要求時,必須在片外進行擴展,選擇適當?shù)男酒?設(shè)計相應(yīng)的電路。二是系統(tǒng)的配置,即按照系統(tǒng)功能要求配置外圍設(shè)備,如鍵盤、顯示器、打印機、A/D、D/A轉(zhuǎn)換器等,要設(shè)計合適的接口電路。
系統(tǒng)的擴展和配置應(yīng)遵循以下原則:
1、盡可能選擇典型電路,并符合單片機常規(guī)用法。為硬件系統(tǒng)的標準化、模塊化打下良好的基礎(chǔ)。
2、系統(tǒng)擴展與外圍設(shè)備的配置水平應(yīng)充分滿足應(yīng)用系統(tǒng)的功能要求,并留有適當余地,以便進行二次開發(fā)。
3、硬件結(jié)構(gòu)應(yīng)結(jié)合應(yīng)用軟件方案一并考慮。硬件結(jié)構(gòu)與軟件方案會產(chǎn)生相互影響,考慮的原則是:軟件能實現(xiàn)的功能盡可能由軟件實殃,以簡化硬件結(jié)構(gòu)。但必須注意,由軟件實現(xiàn)的硬件功能,一般響應(yīng)時間比硬件實現(xiàn)長,且占用CPU時間。
4、系統(tǒng)中的相關(guān)器件要盡可能做到性能匹配。如選用CMOS芯片單片機構(gòu)成低功耗系統(tǒng)時,系統(tǒng)中所有芯片都應(yīng)盡可能選擇低功耗產(chǎn)品。
5、可靠性與抗干擾設(shè)計是硬件設(shè)計必不可少的一部分,它包括芯片、器件選擇、去耦濾波、印刷電路板布線、通道隔離等。
6、單片機外圍電路較多時,必須考慮其驅(qū)動能力。驅(qū)動能力不足時,系統(tǒng)工作不可靠,可通過增設(shè)線驅(qū)動器增強驅(qū)動能力或減少芯片功耗來降低總線負載。
7、盡量朝"單片"方向設(shè)計硬件系統(tǒng)。系統(tǒng)器件越多,器件之間相互干擾也越強,功耗也增大,也不可避免地降低了系統(tǒng)的穩(wěn)定性。隨著單片機片內(nèi)集成的功能越來越強,真正的片上系統(tǒng)SoC已經(jīng)可以實現(xiàn),如ST公司新近推出的μPSD32××系列產(chǎn)品在一塊芯片上集成了80C32核、大容量FLASH存儲器、SRAM、A/D、I/O、兩個串口、看門狗、上電復(fù)位電路等等。
單片機系統(tǒng)硬件抗干擾常用方法實踐
影響單片機系統(tǒng)可靠安全運行的主要因素主要來自系統(tǒng)內(nèi)部和外部的各種電氣干擾,并受系統(tǒng)結(jié)構(gòu)設(shè)計、元器件選擇、安裝、制造工藝影響。這些都構(gòu)成單片機系統(tǒng)的干擾因素,常會導(dǎo)致單片機系統(tǒng)運行失常,輕則影響產(chǎn)品質(zhì)量和產(chǎn)量,重則會導(dǎo)致事故,造成重大經(jīng)濟損失。
形成干擾的基本要素有三個:〔1〕干擾源。指產(chǎn)生干擾的元件、設(shè)備或信號,用數(shù)學(xué)語言描述如下:du/dt,di/dt大的地方就是干擾源。如:雷電、繼電器、可控硅、電機、高頻時鐘等都可能成為干擾源?!?〕傳播路徑。指干擾從干擾源傳播到敏感器件的通路或媒介。典型的干擾傳播路徑是通過導(dǎo)線的傳導(dǎo)和空間的輻射?!?〕敏感器件。指容易被干擾的對象。如:A/D、D/A變換器,單片機,數(shù)字IC,弱信號放大器等。干擾的分類1干擾的分類干擾的分類有好多種,通??梢园凑赵肼暜a(chǎn)生的原因、傳導(dǎo)方式、波形特性等等進行不同的分類。按產(chǎn)生的原因分:可分為放電噪聲音、高頻振蕩噪聲、浪涌噪聲。按傳導(dǎo)方式分:可分為共模噪聲和串模噪聲。按波形分:可分為持續(xù)正弦波、脈沖電壓、脈沖序列等等。2干擾的耦合方式干擾源產(chǎn)生的干擾信號是通過一定的耦合通道才對測控系統(tǒng)產(chǎn)生作用的。因此,我有有必要看看干擾源和被干擾對象之間的傳遞方式。干擾的耦合方式,無非是通過導(dǎo)線、空間、公共線等等,細分下來,主要有以下幾種:〔1〕直接耦合:這是最直接的方式,也是系統(tǒng)中存在最普遍的一種方式。比如干擾信號通過電源線侵入系統(tǒng)?!?〕公共阻抗耦合:這也是常見的耦合方式,這種形式常常發(fā)生在兩個電路電流有共同通路的情況。為了防止這種耦合,通常在電路設(shè)計上就要考慮。使干擾源和被干擾對象間沒有公共阻抗?!?〕電容耦合:又稱電場耦合或靜電耦合。是由于分布電容的存在而產(chǎn)生的耦合?!?〕電磁感應(yīng)耦合:又稱磁場耦合。是由于分布電磁感應(yīng)而產(chǎn)生的耦合?!?〕漏電耦合:這種耦合是純電阻性的,在絕緣不好時就會發(fā)生。
常用硬件抗干擾技術(shù)針對形成干擾的三要素,采取的抗干擾主要有以下手段。1抑制干擾源抑制干擾源就是盡可能的減小干擾源的du/dt,di/dt。這是抗干擾設(shè)計中最優(yōu)先考慮和最重要的原則,常常會起到事半功倍的效果。減小干擾源的du/dt主要是通過在干擾源兩端并聯(lián)電容來實現(xiàn)。減小干擾源的di/dt則是在干擾源回路串聯(lián)電感或電阻以與增加續(xù)流二極管來實現(xiàn)。抑制干擾源的常用措施如下:〔1〕繼電器線圈增加續(xù)流二極管,消除斷開線圈時產(chǎn)生的反電動勢干擾。僅加續(xù)流二極管會使繼電器的斷開時間滯后,增加穩(wěn)壓二極管后繼電器在單位時間內(nèi)可動作更多的次數(shù)?!?〕在繼電器接點兩端并接火花抑制電路〔一般是RC串聯(lián)電路,電阻一般選幾K到幾十K,電容選0.01uF〕,減小電火花影響。〔3〕給電機加濾波電路,注意電容、電感引線要盡量短?!?〕電路板上每個IC要并接一個0.01μF~0.1μF高頻電容,以減小IC對電源的影響。注意高頻電容的布線,連線應(yīng)靠近電源端并盡量粗短,否則,等于增大了電容的等效串聯(lián)電阻,會影響濾波效果。〔5〕布線時避免90度折線,減少高頻噪聲發(fā)射。〔6〕可控硅兩端并接RC抑制電路,減小可控硅產(chǎn)生的噪聲〔這個噪聲嚴重時可能會把可控硅擊穿的〕。2切斷干擾傳播路徑按干擾的傳播路徑可分為傳導(dǎo)干擾和輻射干擾兩類。所謂傳導(dǎo)干擾是指通過導(dǎo)線傳播到敏感器件的干擾。高頻干擾噪聲和有用信號的頻帶不同,可以通過在導(dǎo)線上增加濾波器的方法切斷高頻干擾噪聲的傳播,有時也可加隔離光耦來解決。電源噪聲的危害最大,要特別注意處理。所謂輻射干擾是指通過空間輻射傳播到敏感器件的干擾。一般的解決方法是增加干擾源與敏感器件的距離,用地線把它們隔離和在敏感器件上加蔽罩。切斷干擾傳播路徑的常用措施如下:〔1〕充分考慮電源對單片機的影響。電源做得好,整個電路的抗干擾就解決了一大半。許多單片機對電源噪聲很敏感,要給單片機電源加濾波電路或穩(wěn)壓器,以減小電源噪聲對單片機的干擾。比如,可以利用磁珠和電容組成π形濾波電路,當然條件要求不高時也可用100Ω電阻代替磁珠?!?〕如果單片機的I/O口用來控制電機等噪聲器件,在I/O口與噪聲源之間應(yīng)加隔離〔增加π形濾波電路〕?!?〕注意晶振布線。晶振與單片機引腳盡量靠近,用地線把時鐘區(qū)隔離起來,晶振外殼接地并固定?!?〕電路板合理分區(qū),如強、弱信號,數(shù)字、模擬信號。盡可能把干擾源〔如電機、繼電器〕與敏感元件〔如單片機〕遠離?!?〕用地線把數(shù)字區(qū)與模擬區(qū)隔離。數(shù)字地與模擬地要分離,最后在一點接于電源地。A/D、D/A芯片布線也以此為原則?!?〕單片機和大功率器件的地線要單獨接地,以減小相互干擾。大功率器件盡可能放在電路板邊緣?!?〕在單片機I/O口、電源線、電路板連接線等關(guān)鍵地方使用抗干擾元件如磁珠、磁環(huán)、電源濾波器、屏蔽罩,可顯著提高電路的抗干擾性能。3提高敏感器件的抗干擾性能提高敏感器件的抗干擾性能是指從敏感器件這邊考慮盡量減少對干擾噪聲的拾取,以與從不正常狀態(tài)盡快恢復(fù)的方法。提高敏感器件抗干擾性能的常用措施如下:〔1〕布線時盡量減少回路環(huán)的面積,以降低感應(yīng)噪聲?!?〕布線時,電源線和地線要盡量粗。除減小壓降外,更重要的是降低耦合噪聲?!?〕對于單片機閑置的I/O口,不要懸空,要接地或接電源。其它IC的閑置端在不改變系統(tǒng)邏輯的情況下接地或接電源?!?〕對單片機使用電源監(jiān)控與看門狗電路,如:IMP809,IMP706,IMP813,X5043,X5045等,可大幅度提高整個電路的抗干擾性能?!?〕在速度能滿足要求的前提下,盡量降低單片機的晶振和選用低速數(shù)字電路?!?〕IC器件盡量直接焊在電路板上,少用IC座。4其它常用抗干擾措施交流端用電感電容濾波:去掉高頻低頻干擾脈沖。變壓器雙隔離措施:變壓器初級輸入端串接電容,初、次級線圈間屏蔽層與初級間電容中心接點接大地,次級外屏蔽層接印制板地,這是硬件抗干擾的關(guān)鍵手段。次級加低通濾波器:吸收變壓器產(chǎn)生的浪涌電壓。采用集成式直流穩(wěn)壓電源:因為有過流、過壓、過熱等保護。I/O口采用光電、磁電、繼電器隔離,同時去掉公共地。通訊線用雙絞線:排除平行互感。防雷電用光纖隔離最為有效。A/D轉(zhuǎn)換用隔離放大器或采用現(xiàn)場轉(zhuǎn)換:減少誤差。外殼接大地:解決人身安全與防外界電磁場干擾。加復(fù)位電壓檢測電路。防止復(fù)位不充份,CPU就工作,尤其有EEPROM的器件,復(fù)位不充份會改變EEPROM的內(nèi)容。印制板工藝抗干擾:①電源線加粗,合理走線、接地,三總線分開以減少互感振蕩。②CPU、RAM、ROM等主芯片,VCC和GND之間接電解電容與瓷片電容,去掉高、低頻干擾信號。③獨立系統(tǒng)結(jié)構(gòu),減少接插件與連線,提高可靠性,減少故障率。④集成塊與插座接觸可靠,用雙簧插座,最好集成塊直接焊在印制板上,防止器件接觸不良故障。⑤有條件采用四層以上印制板,中間兩層為電源與地。計算機與單片機串口通信源程序:中國IEEE整理點擊數(shù):更新時間:2008-8-17[字體:小大]〔歡迎光臨中國IEEE,希望本文能對您有所幫助cnieee>
一個單片機與PC機通信的程序,pc機程序用c語言來編寫,單片機程序用匯編語言來編寫1.PC機編程
PC采用ToubrC進行編寫。程序如下:
#include<stdio.h>
#define
port
0x3f8
/*利用串口1進行通信*/
intch[15];
main<>
{
inta;
inti,j;
intb[6]={88,15,38,26,20,0};
charc;
clrscr<>;
outportb<port+3,0x80>;
/*準備設(shè)置波特率*/
outportb<port,0x0C>;
/*波特率設(shè)置為9600bps*/
outportb<port+1,0x00>;
outportb<port+3,0x03>;
/*8位數(shù)據(jù)位,奇偶檢驗,1位停止位*/
outportb<port+1,0x00>;
/*關(guān)中斷*/
inportb<port+5>;
/*讀一次線路狀態(tài)寄存器,使其復(fù)位*/
{
printf<"\t\tsenddataorreceivedata:<sorr?>\n\n\n">;
c=getchar<>;
switch<c>
{
case’s’:
case’S’:
{
while<!<inportb<port+5>&0x20>>;
/*發(fā)送保持器滿則等待*/
outportb<port,0x01>;
/*否則發(fā)送數(shù)據(jù)01通知單片機準備接收*/
for<i=0;i<6;i++>
/*共發(fā)送6個數(shù)據(jù)*/
{
a=b[i];
while<!<inportb<port+5>&0x20>>
delay<100>;
/*發(fā)送保持器滿,等待*/
outportb<port,a>;
/*發(fā)送a*/
printf<"%d\n",a>;
/*顯示a*/
while<!<inport<port+5>&1>>;
/*接收單片機送回的數(shù)據(jù)*/
ch[i]=inport<port>;
/*保存*/
}
delay<10>;
for<j=0;j<8;j++>
/*顯示接收的回送數(shù)據(jù)*/
printf<"\n%d\n",ch[j]>;
getch<>;
break;
}
case’r’:
/*接收數(shù)據(jù)*/
case’R’:
{
while<!<inportb<port+5>&0x20>>;
outportb<port,0x02>;
/*發(fā)送數(shù)據(jù)02通知單片機發(fā)送數(shù)據(jù)*/
for<j=0;j<9;j++>
/*共接收9個數(shù)據(jù)*/
{
while<!<inportb<port+5>&1>>;
ch[j]=inportb<port>;
}
for<j=0;j<9;j++>
printf<"\n%d\n",ch[j]>;
getch<>;
break;
}
}
}
}
2.單片機與PC機通信之單片機程序
LIST
P=16F876
#INCLUDE
P16F876.INC
CBLOCK0X24
COUNT
TEMP
ENDC
ORG
0X0000
NOP
START
GOTO
MAIN
ORG
0X020
MAIN
MOVLW
0X30
;將RAM單元初始化
MOVWF
FSR
BCF
STATUS,RP0
MOVLW
0X22
MOVWF
COUNT
INTRAM
MOVF
COUNT,0
MOVWF
INDF
INCF
COUNT,1
INCF
FSR,1
BTFSS
FSR,7
GOTO
INTRAM
BANKSEL
TXSTA
;波特率設(shè)置為9600bps
MOVLW
0X19
MOVWF
SPBRG
;異步高速方式
MOVLW
0X04
MOVWF
TXSTA
BCF
STATUS,RP0
MOVLW
0X80
;串行口使能
MOVWF
RCSTA
MOVLW
0X30
MOVWF
FSR
BSF
RCSTA,CREN
;接收允許
BSF
STATUS,RP0
BSF
TXSTA,TXEN
;發(fā)送允許
BCF
STATUS,RP0
WAIT
BTFSS
PIR1,RCIF
;接收PC機命令
GOTO
WAIT
MOVF
RCREG,0
MOVWF
TEMP
MOVWF
INDF
INCF
FSR
DECFSZ
TEMP
;接收到的數(shù)據(jù)為1,則接收
GOTO
TXW
;否則發(fā)送數(shù)據(jù)
MOVLW
0X06
MOVWF
TEMP
WAIT1
BTFSS
PIR1,RCIF
;接收一個數(shù)據(jù)
GOTO
WAIT1
MOVF
RCREG,0
MOVWF
COUNT
MOVWF
TXREG
LOOPTX
BTFSS
PIR1,TXIF
;將接收到的數(shù)據(jù)送回PC機
GOTO
LOOPTX
MOVF
COUNT,0
MOVWF
INDF
INCF
FSR
DECFSZ
TEMP
GOTO
WAIT1
GOTO
OVER
;處理完畢
TXW
MOVLW
0X09
;向PC機發(fā)送9個數(shù)據(jù)
MOVWF
TEMP
MOVLW
0X30
MOVWF
FSR
TXW0
MOVF
INDF,0
MOVWF
TXREG
INCF
FSR
TXW1
BTFSS
PIR1,TXIF
GOTO
TXW1
DECFSZ
TEMP
GOTO
TXW0
OVER
BCF
RCSTA,CREN
;通信任務(wù)完成,關(guān)接受和發(fā)送允許
BSF
STATUS,RP0
BCF
TXSTA,TXEN
BCF
STATUS,RP0
CALL
LED
;調(diào)用顯示子程序,將發(fā)送〔或接收〕的數(shù)據(jù)顯示出來
END
;程序完單片機液晶秒表計算器<已通過編譯〕:本站整理點擊數(shù):更新時間:2008-6-16[字體:小大]〔歡迎光臨中國IEEE,希望本文能對您有所幫助cnieee>
本文是本站從網(wǎng)路上整理而來,文章作者不清,如果你是本文作者可以與本站聯(lián)系!已通過測試,可以實現(xiàn)兩種功能的切換,其他功能自行對照代碼研究。4*4矩陣鍵盤,第一排前三列是實現(xiàn)小時\分鐘\秒的加.第二排前三列是實現(xiàn)小時\分鐘\秒的減.當然還可以通過設(shè)置矩陣鍵盤的鍵值,來實現(xiàn)加\減\乘\除四則運算,由數(shù)碼管顯示參與運算的數(shù)字以與最終的運算結(jié)果#include<reg51.h>#include<stdio.h>#include<stdlib.h>#include<intrins.h>#include<absacc.h>#defineucharunsignedchar#defineuintunsignedint#definewc0x8fff#definewd0xdfff#definerc0xbfff
voiddisplayListChar<unsignedcharX,unsignedcharY,ucharDData>;uchardispbuf[]={'0','1','2','3','4','5','6','7','8','9',':'};ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00};
ucharsecond;uchartemp1;ucharminute;ucharhour;uinttcnt,g;ucharsuanfa;bitflag2;bitflag1=1;//////控制計算器還是液晶調(diào)整的狀態(tài)燈
uinti=0,f,m,g,s,t;//for里的計數(shù)值,用于循環(huán)//用來標記按了什么,如+,-.*,或是/sbitP2_0=P2^0;//定義P2.0口用來,當計算值超過15時,P2.0所對應(yīng)的燈閃幾下sbitP2_1=P2^1;//定義P2.1口用來,當除數(shù)為0時,P2.1所對應(yīng)的燈閃幾下sbitP2_2=P2^2;sbitP2_3=P2^3;uintnum[4]={0};//用于記錄外面輸入的數(shù)字uintTablenum;sbitP3_4=P3^4;sbitP3_5=P3^5;
voidjieguo<void>;voidSettime<ucharverify>;ucharkbscan<void>;///鍵盤掃描voidShow_Time<void>;////顯示時間voidSettime<ucharverify>;//verify在這里為調(diào)整的意思uinttransfor<ucharkey1>;
voiddelay400ms<void>;voiddelay200ms<void>;voiddelay5ms<void>;voiddelay_1s<void>;voiddlms<void>;
voiddlms1<void>{uintg=20000;while<--g>;//延時100mS鐘}
voidclr<void>{i=0;suanfa=0;Tablenum=0;for<f=0;f<4;f++>{num[f]=0;}P2_0=1; P2_1=1; P2_2=1;P2_3=0;P3_4=0;P3_5=1;P0=0xc0;P3_5=0;}
//***************************************************************************************************//***************************************以下液晶驅(qū)動****************************************************
voidwaitLcd<>//justwaituntil液晶不忙為止{chartemp;bitflag=1;while<flag==1>{temp=XBYTE[rc];if<temp>>7==0>flag=0;P1=temp;}P1=0xff;}//justwaituntil液晶不忙為止voidWriteCommand_Lcd<bitisCheck,charc>{if<isCheck==1>waitLcd<>;XBYTE[wc]=c;}
voidwritedata<charc>{waitLcd<>;XBYTE[wd]=c;}
voidLcdInit<>{delay5ms<>;delay5ms<>;delay5ms<>;WriteCommand_Lcd<0,0x38>;//三次顯示模式設(shè)置,不檢測忙信號delay5ms<>;WriteCommand_Lcd<0,0x38>;delay5ms<>;WriteCommand_Lcd<0,0x38>;delay5ms<>;WriteCommand_Lcd<1,0x38>;//顯示模式設(shè)置,開始要求每次檢測忙信號,8位2行5*7WriteCommand_Lcd<1,0x08>;//關(guān)閉顯示W(wǎng)riteCommand_Lcd<1,0x01>;//清顯示W(wǎng)riteCommand_Lcd<1,0x06>;//文字不動,光標右移WriteCommand_Lcd<1,0x0C>;//顯示開與光標設(shè)置}
voiddisplayListChar<unsignedcharX,unsignedcharY,ucharDData>{Y&=0x1;X&=0xF;if<X<=0xF>{Y&=0x1;X&=0xF;if<Y>X|=0x40;X|=0x80;WriteCommand_Lcd<0,X>;writedata<dispbuf[DData]>;}}//****************************************以上液晶驅(qū)動*****************************************************//*****************************************************************************************************
//**********************************以下顯示時間*****************************************************voidShow_Time<void>{displayListChar<0,0,hour/10>;displayListChar<1,0,hour%10>;displayListChar<2,0,10>;displayListChar<3,0,minute/10>;displayListChar<4,0,minute%10>;displayListChar<5,0,10>;displayListChar<6,0,second/10>;displayListChar<7,0,second%10>;}//**********************************以上顯示時間*****************************************************
voidmain<void>
{
TMOD=0x02;//置自動重裝載模式
TH0=0x06;//設(shè)初值
TL0=0x06;//設(shè)初值
TR0=1;//開始計數(shù)
ET0=1;//開定時器/計數(shù)器
EA=1;//中斷開
delay400ms<>;//啟動等待,等LCM講入工作狀態(tài)
LcdInit<>;//LCM初始化
P3_4=0;
P2_0=1;
P2_1=1;
P2_2=0;
P2_3=1;
P3_5=1;
P0=0xc0;
P3_5=0;
while<1>
{
ucharkey;
key=kbscan<>;
dlms<>;
//0<111001110xe7>
///*****************************以下是兩種狀態(tài)的切換********************
//**********************************************************************************************
if<key==0xe7>
{
dlms<>;
flag1=~flag1;
key=0x00;
if<flag1==1>
{
P2_0=1;
P2_1=1;
P2_2=0;///液晶狀態(tài)燈
P2_3=1;
}
if<flag1==0>
{
P2_0=1;
P2_1=1;
P2_2=1;
P2_3=0;///計算器狀態(tài)燈
}
dlms1<>;
}
///*****************************以上是兩種狀態(tài)的切換********************
//**********************************************************************************************///**************************************************************************************
///*******************************用于調(diào)整時間********************************************
if<flag1==1>
{LcdInit<>;//LCM初始化
Show_Time<>;
if<key!=0>
{
if<key==0x7e>
{
dlms<>;
if<key==0x7e>
{
EA=0;
flag2=1;
}
key=0x00;
}
if<key==0x7d>
{
dlms<>;
if<key==0x7d>
{
EA=1;
flag2=0;
}
key=0x00;
}
Settime<key>;
delay200ms<>;
}
}//**************************************下面是計算器*************************
if<flag1==0>
{
WriteCommand_Lcd<1,0x01>;//清顯示
if<<key!=0x7e>&&<key!=0x7d>&&<key!=0x7b>&&<key!=0x77>&&<key!=0xd7>&&<key!=0xb7>&&<key!=0x00>>
{//0x7e為"+",0x7d為"-",0x7b為"*",0x77為"/".0xd7為"CLR",0xb7為"="
Tablenum=transfor<key>;
if<Tablenum!=0>
{
num[i]=Tablenum;
P3_5=1;
P0=<table[Tablenum]>;//這里的key只能進來0至9
P3_5=0;
}
}
if<<key==0x77>||<key==0x7d>||<key==0x7b>||<key==0x7e>>
{
i++;
if<i>1>{i=1;}
if<key==0x7e>{suanfa=1;}
if<key==0x7d>{suanfa=2;}
if<key==0x7b>{suanfa=3;}
if<key==0x77>{suanfa=4;}
}
if<key==0xb7>//按等號<0xb7>給P2賦值
{
jieguo<>;
}//按等號給P2賦值
if<key==0xd7>//如果按清零,則清零
{
clr<>;
}
//如果按清零,則清零
}
//**************************************上面是計算器************************************************
//**********************************************************************************************
}//此括號為while的括號
}
voiddelay5ms<void>
{
unsignedintTempCya=277;
while<--TempCya>;
}
//延時400ms
voiddelay400ms<void>
{
unsignedintTempCya=22160;
while<--TempCya>;
}
//延時400ms
voiddelay200ms<void>
{
unsignedintTempCyaaa=11080;
while<--TempCyaaa>;
}//*****************************定時器********************************************
//*****************************定時器********************************************
voidtimer0<void>interrupt1using1
{
tcnt++;
if<tcnt==2000>
{
tcnt=0;
second++;
if<second==60>
{
second=0;
minute++;
if<minute==60>
{
minute=0;
hour++;
if<hour==24>
{
hour=0;
}
}
}
}
}//*****************************顯示結(jié)果*********************************************
//*****************************顯示結(jié)果*********************************************
voidjieguo<void>
{
i=0;
if<suanfa==1>
{
num[2]=<num[1]+num[0]>;
if<<num[2]<=15>&&<num[2]>=0>>
{
P3_5=1;
P0=table[num[2]];
P3_5=0;
}
else
{clr<>;
for<m=0;m<8;m++>
{
P2_0=~P2_0;
delay_1s<>;
}
}
}
if<suanfa==2>//減法顯示
{
num[2]=<num[0]-num[1]>;
if<<num[2]<=15>&&<num[2]>=0>>
{
P3_5=1;
P0=table[num[2]];
P3_5=0;
}
else
{clr<>;
for<m=0;m<8;m++>
{
P2_0=~P2_0;
delay_1s<>;
}
}
}//減法顯示if<suanfa==3>//乘法顯示
{
num[2]=<num[0]*num[1]>;
if<<num[2]<=15>&&<num[2]>=0>>
{
P3_5=1;
P0=table[num[2]];
P3_5=0;
}
else
{clr<>;
for<m=0;m<8;m++>
{
P2_0=~P2_0;
delay_1s<>;
}
}
}//乘法顯示
if<suanfa==4>//除法顯示
{
if<num[1]!=0>
{
num[2]=<num[0]/num[1]>;
if<<num[2]<=15>&&<num[2]>=0>>
{
P3_5=1;
P0=table[num[2]];
P3_5=0;
}else
{clr<>;
for<m=0;m<8;m++>
{
P2_0=~P2_0;
delay_1s<>;
}
}
}
else
{
for<m=0;m<8;m++>
{
P2_1=~P2_1;
delay_1s<>;
}
clr<>;
}
}//除法顯示
suanfa=0;
}//*****************************顯示結(jié)果*********************************************
uinttransfor<ucharkey1>
{
uinttemp;
switch<key1>
{
case0xee:temp=1;break;
case0xde:temp=2;break;
case0xbe:temp=3;break;
case0xed:temp=4;break;
case0xdd:temp=5;break;
case0xbd:temp=6;break;
case0xeb:temp=7;break;
case0xdb:temp=8;break;
case0xbb:temp=9;break;
default:temp=0;break;
}
returntemp;
}
//*******************************以下時間調(diào)節(jié)******************************************************
//*******************************以下時間調(diào)節(jié)******************************************************voidSettime<ucharverify>
{
//鍵盤設(shè)置
//1/hour+<0xee>2/minute+0xde3/second+0xbe+
//4/hour-0xed5/minute-0xdd6/second-0xbd-
//789*
//0CLR=/
////hour+的代碼
if<flag2>
{
if<verify==0xee>
{
dlms<>;
if<verify==0xee>
{
hour++;
if<hour==24>
{
hour=0;
}
//while<verify==0xee>;
verify=0x00;
}
//1/hour+<0xee>2/minute+0xde3/second+0xbe
}
///minute+的代碼
elseif<verify==0xde>
{
dlms<>;
if<verify==0xde>
{
minute++;
if<minute==60>
{
minute=0;
}
//while<verify==0xde>;
verify=0x00;
}
//1/hour+<0xee>2/minute+0xde3/second+0xbe
}//////second++的代碼
elseif<verify==0xbe>
{
dlms<>;
if<verify==0xbe>
{
second++;
if<second==60>
{
second=0;
}
//while<verify==0xbe>;
verify=0x00;
}
//1/hour+<0xee>2/minute+0xde3/second+0xbe
}//////hour-<0xed>的代碼
elseif<verify==0xed>
{
dlms<>;
if<verify==0xed>
{
if<hour==0>
{hour=24;
}
hour--;
//if<hour==0>
//{
//hour=23;
//}
//while<verify==0xed>;
verify=0x00;
}
}
//4/hour-0xed5/minute-0xdd6/second-0xbd
///下面為minute-的代碼
elseif<verify==0xdd>
{
dlms<>;
if<verify==0xdd>
{if<minute==0>
{minute=60;}
minute--;
//if<minute==0>
//{
//minute=59;
//}
//while<verify==0xdd>;
verify=0x00;
}
}//4/hour-0xed5/minute-0xdd6/second-0xbd
///下面為second-的代碼
elseif<verify==0xbd>
{
dlms<>;
if<verify==0xbd>
{if<second==0>
{second=60;}
second--;
//if<second==0>
//{
//second=59;
//}
//while<verify==0xbd>;
verify=0x00;
}
//4/hour-0xed5/minute-0xdd6/second-0xbd
}
}
}//*******************************以上時間調(diào)節(jié)******************************************************
//*******************************以上時間調(diào)節(jié)******************************************************
//******************************鍵盤掃描**********************************************
//******************************鍵盤掃描**********************************************
ucharkbscan<void>
{
ucharsccode;
P1=0xf0;
if<<P1&0xf0>!=0xf0>
{
dlms<>;
if<<P1&0xf0>!=0xf0>
{
sccode=0xfe;
while<<sccode&0x10>!=0>
{
P1=sccode;
if<<P1&0xf0>!=0xf0>
{
temp1=P1;
returntemp1;
}
else
{
sccode=<sccode<<1>|0x01;
}
}
}
}
return<0>;
}//******************************鍵盤掃描**********************************************
//******************************鍵盤掃描**********************************************
voiddlms<void>
{
g=554;
while<g-->;//延時10mS鐘
}
voiddelay_1s<void>
{
s=27750;
while<s-->;//延時1S鐘
}單片機職業(yè)發(fā)展規(guī)劃:本站推薦點擊數(shù):更新時間:2008-10-16[字體:小大]〔歡迎光臨中國IEEE,希望本文能對您有所幫助cnieee>
從一名普通的工程師一路打拼至盛揚半導(dǎo)體XX技術(shù)副總,并以"技術(shù)幕僚"作為終極職業(yè)目標,本文主人公王勝和對技術(shù)性職業(yè)道路的堅持折射出怎樣的一種人生智慧?憑借十四年單片機規(guī)劃、應(yīng)用與研發(fā)經(jīng)驗,助力盛揚在單片機市場脫穎而出,其中蘊含著什么競爭之道?在緊X工作之余從容鍛煉身體,年過五十依然顯得年輕瀟灑,究竟有什么平衡訣竅?本期精英訪談,我們將走近王勝和,聽他娓娓講述深耕技術(shù),同樣可以走出一條"魚與熊掌"兼得的職業(yè)發(fā)展之路。您如何看待本土單片機廠商的發(fā)展趨勢?XX單片機廠商在中國大陸的生存現(xiàn)狀如何?中國大陸和XX單片機廠商的發(fā)展過程十分相似,都要經(jīng)歷一個從為先進國家做代工到自主研發(fā)的過程,但發(fā)展的快慢程度有差異。以XXIC廠商為例,最早曾為美國、日本等做代工,并在此過程中逐步掌握了一些關(guān)鍵技術(shù),從而形成自主研發(fā)能力,這一過程經(jīng)歷了相當長的時間。中國大陸單片機廠商的發(fā)展也遵循這一模式。不過,隨著國際之間技術(shù)交流日益頻繁,加上中國強大的內(nèi)需市場、豐富的人才資源和充足的資金,使得大陸廠商從做代工到走向自主研發(fā)的過程更快、更容易。但另一方面,全球日趨激烈的競爭已成為大陸廠商面臨的主要困難。由于中國大陸廠商基礎(chǔ)比較薄弱,要與國外廠商競爭,只靠企業(yè)自己的力量是不夠的,因此中國大陸應(yīng)向韓國學(xué)習,加大對本土IC廠商的支持力度。由于一些政治因素以與為保護XX廠商的競爭力,XX當局會限制到大陸投資的IC廠商,特別
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023八年級數(shù)學(xué)上冊 第13章 全等三角形13.2三角形全等的判定 4角邊角說課稿 (新版)華東師大版
- 2024年四年級品社下冊《怎樣到達目的地》說課稿2 蘇教版
- 2025鋼質(zhì)門小型鋼結(jié)構(gòu)制作及安裝合同
- 2025個人電路出租合同書
- 2025公司經(jīng)理勞動合同
- 道路邊坡加固維修施工方案
- 交通圍欄銷售合同范本
- 農(nóng)業(yè)營銷合作合同范本
- 保溫鋼結(jié)構(gòu)合同范本
- Sara's Medicine(說課稿)-2023-2024學(xué)年麗聲北極星分級繪本四年級上(江蘇版)
- 2025年中國陪診服務(wù)行業(yè)現(xiàn)狀、發(fā)展環(huán)境及投資前景分析報告
- 第七講推動構(gòu)建新時代的大國關(guān)系格局-2024年形勢與政策(課件)
- 2025年高考作文備考:議論文寫作的論證手法
- 2024年可行性研究報告投資估算及財務(wù)分析全套計算表格(含附表-帶只更改標紅部分-操作簡單)
- 數(shù)獨6宮格300試題
- 24年注安-管理的題
- 2024至2030年中國心理咨詢行業(yè)市場預(yù)測與投資規(guī)劃分析報告
- 國際貿(mào)易地理 全套課件
- 廣西2024年高考物理模擬試卷及答案1
- GB/T 20878-2024不銹鋼牌號及化學(xué)成分
- 某房屋建筑工程監(jiān)理大綱
評論
0/150
提交評論