單片機c語言歡迎進(jìn)入51單片機學(xué)習(xí)網(wǎng)論壇討論_第1頁
單片機c語言歡迎進(jìn)入51單片機學(xué)習(xí)網(wǎng)論壇討論_第2頁
單片機c語言歡迎進(jìn)入51單片機學(xué)習(xí)網(wǎng)論壇討論_第3頁
單片機c語言歡迎進(jìn)入51單片機學(xué)習(xí)網(wǎng)論壇討論_第4頁
單片機c語言歡迎進(jìn)入51單片機學(xué)習(xí)網(wǎng)論壇討論_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、單片機c語言歡迎進(jìn)入51單片機學(xué)習(xí)網(wǎng)論壇討論本站新域名開通WWW.51C51.COM 中國單片機編程技術(shù)普及推廣第一站!31 6位數(shù)顯頻率計數(shù)器1 實驗任務(wù) 利用AT89S51單片機的T0、T1的定時計數(shù)器功能,來完成對輸入的信號進(jìn)行頻率計數(shù),計數(shù)的頻率結(jié)果通過8位動態(tài)數(shù)碼管顯示出來。要求能夠?qū)?250KHZ的信號頻率進(jìn)行準(zhǔn)確計數(shù),計數(shù)誤差不超過±1HZ。2 電路原理圖 圖 3 系統(tǒng)板上硬件連線 (1) 把“單片機系統(tǒng)”區(qū)域中的與“動態(tài)數(shù)碼顯示”區(qū)域中的ABCDEFGH端口用8芯排線連接。(2) 把“單片機系統(tǒng)”區(qū)域中的與“動態(tài)數(shù)碼顯示”區(qū)域中的S1S2S3S4S5S6S7S8端口用

2、8芯排線連接。(3) 把“單片機系統(tǒng)”區(qū)域中的(T0)端子用導(dǎo)線連接到“頻率產(chǎn)生器”區(qū)域中的WAVE端子上。4 程序設(shè)計內(nèi)容 (1) 定時/計數(shù)器T0和T1的工作方式設(shè)置,由圖可知,T0是工作在計數(shù)狀態(tài)下,對輸入的頻率信號進(jìn)行計數(shù),但對工作在計數(shù)狀態(tài)下的T0,最大計數(shù)值為fOSC/24,由于fOSC12MHz,因此:T0的最大計數(shù)頻率為250KHz。對于頻率的概念就是在一秒只數(shù)脈沖的個數(shù),即為頻率值。所以T1工作在定時狀態(tài)下,每定時1秒中到,就停止T0的計數(shù),而從T0的計數(shù)單元中讀取計數(shù)的數(shù)值,然后進(jìn)行數(shù)據(jù)處理。送到數(shù)碼管顯示出來。(2) T1工作在定時狀態(tài)下,最大定時時間為65ms,達(dá)不到1

3、秒的定時,所以采用定時50ms,共定時20次,即可完成1秒的定時功能。5 C語言源程序#include <AT89X52.H>unsigned char code dispbit=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40;unsigned char dispbuf8=0,0,0,0,0,0,10,10;unsigned char temp8;unsigned char

4、dispcount;unsigned char T0count;unsigned char timecount;bit flag;unsigned long x;void main(void) unsigned char i; TMOD=0x15; TH0=0; TL0=0; TH1=(65536-4000)/256; TL1=(65536-4000)%256; TR1=1; TR0=1; ET0=1; ET1=1; EA=1; while(1) if(flag=1) flag=0; x=T0count*65536+TH0*256+TL0; for(i=0;i<8;i+) tempi=0

5、; i=0; while(x/10) tempi=x%10; x=x/10; i+; tempi=x; for(i=0;i<6;i+) dispbufi=tempi; timecount=0; T0count=0; TH0=0; TL0=0; TR0=1; void t0(void) interrupt 1 using 0 T0count+;void t1(void) interrupt 3 using 0 TH1=(65536-4000)/256; TL1=(65536-4000)%256; timecount+; if(timecount=250) TR0=0; timecount=

6、0; flag=1; P0=dispcodedispbufdispcount; P2=dispbitdispcount; dispcount+; if(dispcount=8) dispcount=0; 單片機c語言歡迎進(jìn)入51單片機學(xué)習(xí)網(wǎng)論壇討論本站新域名開通WWW.51C51.COM 中國單片機編程技術(shù)普及推廣第一站!33 4×4鍵盤及8位數(shù)碼管顯示構(gòu)成的電子密碼鎖 1 實驗任務(wù) 用4×4組成09數(shù)字鍵及確認(rèn)鍵。用8位數(shù)碼管組成顯示電路提示信息,當(dāng)輸入密碼時,只顯示“8.”,當(dāng)密碼位數(shù)輸入完畢按下確認(rèn)鍵時,對輸入的密碼與設(shè)定的密碼進(jìn)行比較,若密碼正確,則門開,此處用LE

7、D發(fā)光二極管亮一秒鐘做為提示,同時發(fā)出“叮咚”聲;若密碼不正確,禁止按鍵輸入3秒,同時發(fā)出“嘀、嘀”報警聲;若在3秒之內(nèi)仍有按鍵按下,則禁止按鍵輸入3秒被重新禁止。2 電路原理圖 圖3 系統(tǒng)板上硬件連線 (1) 把“單片機系統(tǒng)”區(qū)域中的用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的ABCDEFGH端子上。(2) 把“單片機系統(tǒng)“區(qū)域中的用8芯排線連接到“動態(tài)數(shù)碼顯示”區(qū)域中的S1S2S3S4S5S6S7S8端子上。(3) 把“單片機系統(tǒng)”區(qū)域中的用8芯排線連接到“4×4行列式鍵盤”區(qū)域中的R1R2R3R4C1C2C3C4端子上。(4) 把“單片機系統(tǒng)”區(qū)域中的用導(dǎo)線連接到“八路發(fā)光二極管模

8、塊”區(qū)域中的L2端子上。(5) 把“單片機系統(tǒng)”區(qū)域中的用導(dǎo)線連接到“音頻放大模塊”區(qū)域中的SPK IN端子上。(6) 把“音頻放大模塊”區(qū)域中的SPK OUT接到喇叭上。4 程序設(shè)計內(nèi)容 (1) 4×4行列式鍵盤識別技術(shù):有關(guān)這方面內(nèi)容前面已經(jīng)討論過,這里不再重復(fù)。(2) 8位數(shù)碼顯示,初始化時,顯示“P”,接著輸入最大6位數(shù)的密碼,當(dāng)密碼輸入完后,按下確認(rèn)鍵,進(jìn)行密碼比較,然后給出相應(yīng)的信息。在輸入密碼過程中,顯示器只顯示“8.”。當(dāng)數(shù)字輸入超過6個時,給出報警信息。在密碼輸入過程中,若輸入錯誤,可以利用“DEL”鍵刪除剛才輸入的錯誤的數(shù)字。(3) 4×4行列式鍵盤的按

9、鍵功能分布圖如圖所示:789 456 123Del0 Enter 圖 5 C語言源程序#include <AT89X52.H>unsigned char ps=1,2,3,4,5;unsigned char code dispbit=0xfe,0xfd,0xfb,0xf7, 0xef,0xdf,0xbf,0x7f;unsigned char code dispcode=0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71, 0x00,0x40,0x73,0xff;unsig

10、ned char dispbuf8=18,16,16,16,16,16,16,16;unsigned char dispcount;unsigned char flashcount;unsigned char temp;unsigned char key;unsigned char keycount;unsigned char pslen=5;unsigned char getps6;bit keyoverflag;bit errorflag;bit rightflag;unsigned int second3;unsigned int aa,bb;unsigned int cc;bit ok

11、flag;bit alarmflag;bit hibitflag;unsigned char oka,okb;void main(void) unsigned char i,j; TMOD=0x01; TH0=(65536-500)/256; TL0=(65536-500)%256; TR0=1; ET0=1; EA=1; while(1) P3=0xff; P3_4=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=10;i>0;i-) for(j=248;j>0;j-); temp=P3; temp=temp &am

12、p; 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=7; break; case 0x0d: key=8; break; case 0x0b: key=9; break; case 0x07: key=10; break; temp=P3; P1_1=P1_1; if(key>=0) && (key<10) if(keycount<6) getpskeycount=key; dispbufkeycount+2=19; keycount+; if(

13、keycount=6) keycount=6; else if(keycount>6) keycount=6; keyoverflag=1;/key overflow else if(key=12)/delete key if(keycount>0) keycount-; getpskeycount=0; dispbufkeycount+2=16; else keyoverflag=1; else if(key=15)/enter key if(keycount!=pslen) errorflag=1; rightflag=0; second3=0; else for(i=0;i&

14、lt;keycount;i+) if(getpsi!=psi) i=keycount; errorflag=1; rightflag=0; second3=0; goto a; errorflag=0; rightflag=1;a: i=keycount; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; keyoverflag=0;/? P3=0xff; P3_5=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=10;i>0;i-)

15、 for(j=248;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=4; break; case 0x0d: key=5; break; case 0x0b: key=6; break; case 0x07: key=11; break; temp=P3; P1_1=P1_1; if(key>=0) && (key<10) if(keycount<6) getpskeyco

16、unt=key; dispbufkeycount+2=19; keycount+; if(keycount=6) keycount=6; else if(keycount>6) keycount=6; keyoverflag=1;/key overflow else if(key=12)/delete key if(keycount>0) keycount-; getpskeycount=0; dispbufkeycount+2=16; else keyoverflag=1; else if(key=15)/enter key if(keycount!=pslen) errorfl

17、ag=1; rightflag=0; second3=0; else for(i=0;i<keycount;i+) if(getpsi!=psi) i=keycount; errorflag=1; rightflag=0; second3=0; goto a4; errorflag=0; rightflag=1;a4: i=keycount; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; keyoverflag=0;/? P3=0xff; P3_6=0; temp=P3; temp=temp

18、& 0x0f; if (temp!=0x0f) for(i=10;i>0;i-) for(j=248;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=1; break; case 0x0d: key=2; break; case 0x0b: key=3; break; case 0x07: key=12; break; temp=P3; P1_1=P1_1; if(key>=0) &

19、;& (key<10) if(keycount<6) getpskeycount=key; dispbufkeycount+2=19; keycount+; if(keycount=6) keycount=6; else if(keycount>6) keycount=6; keyoverflag=1;/key overflow else if(key=12)/delete key if(keycount>0) keycount-; getpskeycount=0; dispbufkeycount+2=16; else keyoverflag=1; else i

20、f(key=15)/enter key if(keycount!=pslen) errorflag=1; rightflag=0; second3=0; else for(i=0;i<keycount;i+) if(getpsi!=psi) i=keycount; errorflag=1; rightflag=0; second3=0; goto a3; errorflag=0; rightflag=1;a3: i=keycount; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; keyove

21、rflag=0;/? P3=0xff; P3_7=0; temp=P3; temp=temp & 0x0f; if (temp!=0x0f) for(i=10;i>0;i-) for(j=248;j>0;j-); temp=P3; temp=temp & 0x0f; if (temp!=0x0f) temp=P3; temp=temp & 0x0f; switch(temp) case 0x0e: key=0; break; case 0x0d: key=13; break; case 0x0b: key=14; break; case 0x07: key=

22、15; break; temp=P3; P1_1=P1_1; if(key>=0) && (key<10) if(keycount<6) getpskeycount=key; dispbufkeycount+2=19; keycount+; if(keycount=6) keycount=6; else if(keycount>6) keycount=6; keyoverflag=1;/key overflow else if(key=12)/delete key if(keycount>0) keycount-; getpskeycount=0;

23、 dispbufkeycount+2=16; else keyoverflag=1; else if(key=15)/enter key if(keycount!=pslen) errorflag=1; rightflag=0; second3=0; else for(i=0;i<keycount;i+) if(getpsi!=psi) i=keycount; errorflag=1; rightflag=0; second3=0; goto a2; errorflag=0; rightflag=1;a2: i=keycount; temp=temp & 0x0f; while(temp!=0x0f) temp=P3; temp=temp & 0x0f; keyoverflag=0;/? void t0(void)

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論