13個(gè)簡(jiǎn)單的單片機(jī)程序_第1頁
13個(gè)簡(jiǎn)單的單片機(jī)程序_第2頁
13個(gè)簡(jiǎn)單的單片機(jī)程序_第3頁
13個(gè)簡(jiǎn)單的單片機(jī)程序_第4頁
13個(gè)簡(jiǎn)單的單片機(jī)程序_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精品文檔/* *LED 閃爍的簡(jiǎn)單試驗(yàn)* 連接方法:JP11 ( P2)和JP1 用 8PIN 排線連接起來*/#include <reg51.h>/ 此文件中定義了51 的一些特殊功能寄存器void delay(unsigned int i); /聲明延時(shí)函數(shù)main()P2 = 0x00; / 置 P0口為低電平delay(600); /延時(shí)P2 = 0xff; / 置 P0口為高電平delay(600); /延時(shí)29歡迎下載 。/* 延時(shí)函數(shù)*/void delay(unsigned int i)unsigned char j;for(i; i > 0; i-)for(

2、j = 255; j > 0; j-);/* * LED 閃爍的簡(jiǎn)單試驗(yàn)* 延時(shí)實(shí)現(xiàn)p2 口LED流水燈效果(用循環(huán)移位指令)* 連接方法:JP11 ( P2)和JP1(LED燈 ) 用 8PIN 排線連接起來*/ 此文件中定義了51 的一些特殊功能寄存器*/ #include <reg51.h>#include <intrins.h> void delayms(unsigned char ms)/ 延時(shí)子程序unsigned char i;while(ms-)for(i = 0; i < 120; i+); main()unsigned char LED;

3、LED = 0xfe; /0xfe = 1111 1110while(1) P2 = LED;delayms(250);LED = LED << 1; / 循環(huán)右移1 位,點(diǎn)亮下一個(gè)LED "<<" 為左移位if(LED = 0x00 ) LED = 0xfe; / 0xfe = 1111 1110/* LED點(diǎn)陣實(shí)驗(yàn)(流動(dòng)顯示1 2 3 4 5 6 7 8 9)* 說明 通過 P0 和 P2 作為點(diǎn)陣接口* 要求學(xué)員掌握LED 點(diǎn)陣的工作原理和各點(diǎn)陣腳的定義及接法,具體接線請(qǐng)參考接線說明* 我們采用的LED點(diǎn)陣式是低功耗,在做實(shí)驗(yàn)時(shí)可以用單片機(jī)腳直

4、接驅(qū)動(dòng)*/#include<reg51.h>unsigned char code tab=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;unsigned char code digittab188=0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00, /00x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00, /10x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00, /20x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00, /30x00,0

5、x00,0x0c,0x14,0x24,0x7f,0x04,0x00, /40x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00, /50x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00, /60x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00, /70x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00, /80x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00, /90x00,0x00,0x7F,0x48,0x48,0x30,0x00,0x00, /P0x00,

6、0x00,0x7F,0x48,0x4C,0x73,0x00,0x00, /R0x00,0x00,0x7F,0x49,0x49,0x49,0x00,0x00, /E0x00,0x00,0x3E,0x41,0x41,0x62,0x00,0x00, /C0x00,0x00,0x7F,0x08,0x08,0x7F,0x00,0x00, /H0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00, /I0x00,0x7F,0x10,0x08,0x04,0x7F,0x00,0x00, /N0x7C,0x48,0x48,0xFF,0x48,0x48,0x7C,0x00 / 中;uns

7、igned int timecount;unsigned char cnta;unsigned char cntb;void main(void)TMOD=0x01;TH0=(65536-3000)/256;TL0=(65536-3000)%256;TR0=1;/ 開啟定時(shí)0ET0=1;EA=1;/ 開啟中斷cntb=0;while(1) ;/*定時(shí)中斷*/ void t0(void) interrupt 1 using 0 TH0=(65536-3000)/256; / 定時(shí)器高位裝載數(shù)據(jù)TL0=(65536-3000)%256; / 定時(shí)器低位裝載數(shù)據(jù)if(cntb<18) / 紅色

8、P1=0xFF;P2=tabcnta;P0=digittabcntbcnta;else / 綠色P2=0xFF;P1=tabcnta;P0=digittabcntb-18cnta;if(+cnta>=8) cnta=0; if(+timecount>=333) timecount=0;if(+cntb>=36)cntb=0;/*/*按鍵狀態(tài)顯示試驗(yàn)/*/* 連接方法:連接JP10( P0)與 JP5(按鈕接口)/*JP11 (P2) 與 JP1(LED 接口 )/* 按鍵則點(diǎn)亮LED燈,8 路指示燈接p0口*/* #include <reg51.h>#includ

9、e <intrins.h> sbit BEEP = P15;sbit RELAY = P14;sbit K1 = P00; sbit K2 = P01;sbit K3 = P02; sbit K4 = P03;sbit K5 = P04; sbit K6 = P05;void beep();/* main()while(1)P2 = 0xff;if(K1=0)P2 = 0xfe;if(K2 = 0)P2 = 0xfd;if(!K3)P2 = 0xfb;if(!K4)P2 = 0xf7;喇叭發(fā)聲if (!K5 ) beep(); /RELAY = 1;if (!K6 )RELAY =

10、 0; / 通過了反相器void beep()unsigned char i , j;BEEP=!BEEP;/BEEP取反 需要產(chǎn)生方波for (i=0;i<100;i+)for (j = 0 ; j<250 ; j+) / _nop_();BEEP=1;/關(guān)閉蜂鳴器/*按鍵控制程序*連接方法:JP10( P2)與 JP1 ( LED燈)連接,JP11 ( P0) 與 JP5(按鍵接口)連接開始點(diǎn)亮P1LED按 P01按 P00 LED 向左移一位連續(xù)按動(dòng)按鈕LED會(huì)不停的左移或右移LED移一位/#include <reg51.h>#include <intrin

11、s.h>unsigned char scan_key();void proc_key(unsigned char key_v);void delayms(unsigned char ms);sbitK1 = P00;/ 對(duì)應(yīng)按鈕K1sbitK2 = P01;/ 對(duì)應(yīng)按鈕K2main()unsigned char key_s,key_v;key_v = 0x03;P2 = 0xfe;while(1) key_s = scan_key(); if(key_s != key_v) delayms(10);key_s = scan_key(); if(key_s != key_v) key_v

12、= key_s; proc_key(key_v);unsigned char scan_key()unsigned char key_s;key_s = 0x00;key_s |= K2;key_s <<= 1;key_s |= K1;return key_s;void proc_key(unsigned char key_v)if(key_v & 0x01) = 0)P2 = _cror_(P2,1);else if(key_v & 0x02) = 0)P2 = _crol_(P2, 1);/ 延時(shí)子程序void delayms(unsigned char ms)

13、unsigned char i;while(ms-)for(i = 0; i < 120; i+);/*二進(jìn)制加法試驗(yàn)*p2 口 八 個(gè) 燈 作 二 進(jìn) 制 加 法 。 理 解 二 進(jìn) 值 的 計(jì) 算*硬件連接:p2 口 8 路指示燈*;*描述:*;p2 口 八 個(gè) 燈 作 二 進(jìn) 制 加 法 。 理 解 二 進(jìn) 值 的 計(jì) 算*;* 連接方法:JP11( P2) 和 JP1(LED燈 ) 用 8PIN排線連接起來* */聲明延時(shí)函數(shù)#include <reg52.h>void delay(unsigned int i); / main()unsigned char Num

14、= 0xff;while (1)P2 = Num;delay(1000); / 延時(shí)函數(shù)Num-; void delay(unsigned int i)/*延時(shí)函數(shù)*/unsigned char j;for(i; i > 0; i-)for(j = 255; j > 0; j-);/* 文件名 C51 音樂程序( 八月桂花) 功能 通過單片機(jī)演奏音樂/*/ #include <REG52.H> #include <INTRINS.H>/ 本例采用89C52, 晶振為 11.0592MHZ/ 關(guān)于如何編制音樂代碼, 其實(shí)十分簡(jiǎn)單, 各位可以看以下代碼./ 頻率

15、常數(shù)即音樂術(shù)語中的音調(diào), 而節(jié)拍常數(shù)即音樂術(shù)語中的多少拍/ 所以拿出譜子, 試探編吧!sbit Beep = P15 ;unsigned char n=0; /n 為節(jié)拍常數(shù)變量unsigned char code music_tab =0x18, 0x30, 0x1C , 0x10, / 格式為 : 頻率常數(shù), 節(jié)拍常數(shù), 頻率常數(shù), 節(jié)拍常數(shù),0x20, 0x40, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x10,0x1C, 0x10, 0x18 , 0x40,0x1C, 0x20, 0x20 , 0x20,0x1C, 0x20, 0x18 , 0x20,0x20,

16、 0x80, 0xFF , 0x20,0x30, 0x1C, 0x10 , 0x18,0x20, 0x15, 0x20 , 0x1C,0x20, 0x20, 0x20 , 0x26,0x40, 0x20, 0x20 , 0x2B,0x20, 0x26, 0x20 , 0x20,0x20, 0x30, 0x80 , 0xFF,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x20, 0x1C , 0x10,0x18, 0x10, 0x20

17、, 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x80,0x20, 0x30, 0x1C , 0x10,0x20, 0x10, 0x1C , 0x10,0x20, 0x20, 0x26 , 0x20,0x2B, 0x20, 0x30 , 0x20,0x2B,

18、 0x40, 0x20 , 0x15,0x1F, 0x05, 0x20 , 0x10,0x1C, 0x10, 0x20 , 0x20,0x26, 0x20, 0x2B , 0x20,0x30, 0x20, 0x2B , 0x40,0x20, 0x30, 0x1C , 0x10,0x18, 0x20, 0x15 , 0x20,0x1C, 0x20, 0x20 , 0x20,0x26, 0x40, 0x20 , 0x20,0x2B, 0x20, 0x26 , 0x20,0x20, 0x20, 0x30 , 0x30,0x20, 0x30, 0x1C , 0x10,0x18, 0x40, 0x1C

19、, 0x20,0x20, 0x20, 0x26 , 0x40,0x13, 0x60, 0x18 , 0x20,0x15, 0x40, 0x13 , 0x40,0x18, 0x80, 0x00;void int0() interrupt 1 /采用中斷0 控制節(jié)拍 TH0=0xd8;TL0=0xef;n-;void delay (unsigned char m) / 控制頻率延時(shí)unsigned i=3*m;while(-i);void delayms(unsigned char a) / 豪秒延時(shí)子程序各位可編譯while(-a);/采用while(-a)不要采用while(a-);一下看看匯

20、編結(jié)果就知道了!void main() unsigned char p,m; /m 為頻率常數(shù)變量unsigned char i=0;TMOD&=0x0f;TMOD|=0x01;TH0=0xd8;TL0=0xef;IE=0x82;play:while(1)a: p=music_tabi;if(p=0x00) i=0, delayms(1000);goto play; /延時(shí)1 秒 , 回到開始再來一遍else if(p=0xff) i=i+1;delayms(100),TR0=0; goto a; /延時(shí)100ms,繼續(xù)取下一音符else m=music_tabi+, n=music_

21、tabi+; /節(jié)拍常數(shù)TR0=1;/while(n!=0) Beep=Beep,delay(m);/完成 , 通過 P1 口輸出音頻( 可多聲道哦!)TR0=0;/如果碰到結(jié)束符,若碰到休止符,取頻率常數(shù)和開定時(shí)器1等待節(jié)拍關(guān)定時(shí)器1/*(c) Copyright 2004-2006*All Rights Reserved版權(quán)所有:朗頓科技*/ #include <reg52.h> sbit buzz = P35;void T0_irq(void) interrupt 1 using 1 TH0 = -(300/256);TL0 =- (300%256);buzz = buzz;

22、 main()TMOD = 0x01;TH0 = -(1000/256);TL0 =- (1000%256);EA = 1;ET0 = 1;TR0 = 1;for(;)/* 描述:跑馬燈程序* 連接方法:JP11 ( P2)和JP1(LED燈 ) 用 8PIN 排線連接起來*/#include<reg51.h>#include <intrins.h>/* * 延時(shí)子程序*/ void delayms(unsigned char ms) unsigned char i;while(ms-)for(i = 0; i < 120; i+);/*主程序*/ main()u

23、nsigned char LED;LED = 0xfe;P2 = LED;while(1)delayms(250);LED = _crol_(LED,1);/ 循環(huán)右移1 位,點(diǎn)亮下一個(gè)LED 此函數(shù)位庫函數(shù)P2 = LED;/* 標(biāo)題 :試驗(yàn)數(shù)碼管上顯示數(shù)字( 單片機(jī)直接實(shí)現(xiàn)位選共陰極 )* 連接方法:P0與 J12 用 8PIN 排線連接P1 與 JP16 用排線連接* 請(qǐng)學(xué)員認(rèn)真消化本例程,用 573 鎖存器控制和單片機(jī)腳直接位選控制*/#include <reg51.h>#include <intrins.h>void delay(unsigned int i)

24、;/函數(shù)聲名char DelayCNT;/ 定義變量/ 此表為 LED 的字模 , 共陰數(shù)碼管0-9 -unsignedcharcode0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /( 非譯碼器控制) 數(shù)碼Disp_Tab段碼控制/ 此表為 8 個(gè)數(shù)碼管位選控制, 共陰數(shù)碼管1-8 個(gè) -unsigned char code dispbit8=0xfe,0xfd,0xfb,0xf7,0xef,0xdF,0xbF,0x7F; /位選控制查表的方法控制/* 主函數(shù) */main()unsigned int i,LedNumVal=

25、1 ; /變量定義unsigned int LedOut10;/ 變量定義DelayCNT=0;while(1)if(+DelayCNT>=20) DelayCNT=0;+LedNumVal;/控制數(shù)字變化速度/20 個(gè)掃描周期清零一次/ 每隔 20 個(gè)掃描周期加一次LedOut0=Disp_TabLedNumVal%10000/1000;LedOut1=Disp_TabLedNumVal%1000/100|0x80;LedOut2=Disp_TabLedNumVal%100/10;LedOut3=Disp_TabLedNumVal%10;LedOut4=Disp_TabLedNumVa

26、l%10000/1000;/ 千位LedOut5=Disp_TabLedNumVal%1000/100|0x80; /百位帶小數(shù)點(diǎn)LedOut6=Disp_TabLedNumVal%100/10;/ 十位LedOut7=Disp_TabLedNumVal%10; /個(gè)位for( i=0; i<9; i+)P0 = LedOuti;P1 = dispbiti; /使用查表法進(jìn)行位選/* switch(i)/ 使用 switch 語句控制位選case 0:P1 = 0x7F; break;case 1:P1 = 0xbF; break;case 2:P1 = 0xdF; break;case

27、 3:P1 = 0xeF; break;case 4:P1 = 0xf7; break;case 5:P1 = 0xfb; break;case 6:P1 = 0xfd; break;case 7:P1 = 0xfe; break;*/delay(150);/ 掃描間隔時(shí)間太長(zhǎng)會(huì)數(shù)碼管會(huì)有閃爍感void delay(unsigned int i)char j;for(i; i > 0; i-)for(j = 200; j > 0; j-);/* 標(biāo)題:試 驗(yàn) 數(shù) 碼 管 上 如 何 顯 示 數(shù) 字 (共 陽 極 )* 連接方法:P0 與 JP3 用 8PIN 排線連接* 請(qǐng)學(xué)員認(rèn)真

28、消化本例程,用單片機(jī)腳直接控制數(shù)碼管*/#include <reg51.h>#include <intrins.h>#define NOP() _nop_() /* 定義空指令*/void delay(unsigned int i);/函數(shù)聲名/ 此表為 LED 的字模unsignedcharcodeLED7Code0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39, 0x5E,0x79,0x71;main() unsigned int LedNumVal=1 ,C ; /定義變量while(

29、1) if (+C>= 300) LedNumVal+ ; / 每隔 300 個(gè)掃描周期加一次C =0;/每隔 300個(gè)掃描清零為小數(shù)點(diǎn)共陰和共陽此/ 將字模送到P0 口顯示P0 = LED7CodeLedNumVal%10&0x7f; /LED7 0x7f處也是不一樣;delay(150); / 調(diào)用延時(shí)程序/*延時(shí)程序*/ void delay(unsigned int i)char j;for(i; i > 0; i-)for(j = 200; j > 0; j-);/* 標(biāo)題 :試驗(yàn)數(shù)碼管上顯示數(shù)字(譯碼器位選共陰極)* 連接方法:P0與 J12 用 8PIN

30、 排線連接* 請(qǐng) 學(xué) 員 認(rèn) 真 消 化 本 例 程 , 用 573 鎖 存 器 和 譯 碼 器 控 制 和 數(shù) 碼 管*/#include <reg51.h>#include <intrins.h>sbit LS138A = P22;sbit LS138B = P23;/sbit LS138C = P24;/ 定義 138 譯碼器的輸入A腳由 P2.2 控制定義138 譯碼器的輸入腳B 由 P2.3 控制函數(shù)聲名/ 定義138 譯碼器的輸入腳C由 P2.4 控制void delay(unsigned int i);/ char DelayCNT;/ 此表為 LED 的

31、字模 , 共陰數(shù)碼管0-9 -unsignedcharcodeDisp_Tab0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40;/* 主函數(shù) */ main()unsigned int i,LedNumVal=1 ;unsigned int LedOut10;DelayCNT=0;while(1) / 進(jìn)入循環(huán)狀態(tài)if(+DelayCNT>=50)DelayCNT=0; / 延時(shí)計(jì)數(shù)每掃描一次加一次+LedNumVal; / 每隔 50 個(gè)掃描周期加一次LedOut0=Disp_TabLedNumVal%10000/1000;LedOut1=Disp_TabLedNumVal%1000/100|0x80;LedOut2=Disp_TabLedNumVal%100/10;LedOut3=Disp_TabLedNumVal%10;LedOut4=Disp_TabLedNumVal%10000/1000;/ 千位LedOut5=Disp_TabLedNumVal%1000/100|0x80; /百位帶小數(shù)點(diǎn)LedOut6=Disp_TabLedNumVal%100/10;/ 十位LedOut7=Disp_TabLedNumVal%10; /個(gè)位for( i=0; i<9; i+) /實(shí)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論