自己整理的單片機(jī)51C程序_第1頁(yè)
自己整理的單片機(jī)51C程序_第2頁(yè)
自己整理的單片機(jī)51C程序_第3頁(yè)
自己整理的單片機(jī)51C程序_第4頁(yè)
自己整理的單片機(jī)51C程序_第5頁(yè)
已閱讀5頁(yè),還剩174頁(yè)未讀, 繼續(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)/* 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); /調(diào)用延時(shí)程序 P2 = 0xff; /置P0口為高電平 delay(600); / 調(diào)用延時(shí)程序/*延時(shí)函數(shù)*/void delay(unsigned int i) unsigned char j; for(i; i > 0

2、; i-) /循環(huán) 600*255 次 for(j = 255; j > 0; j-);第二章 二進(jìn)制加法試驗(yàn)/*; 二進(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排線連接起來 */#include <reg52.h>void delay(unsigned int i); /聲明延時(shí)函數(shù)main() unsigned char Num = 0xff; while (1) P2 = Num;

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

4、elayms(unsigned char ms)/ 延時(shí)子程序unsigned char i;while(ms-)for(i = 0; i < 120; i+);main()unsigned char LED;LED = 0xfe; /0xfe = 1111 1110 while(1) P2 = LED; delayms(250); LED = LED << 1; /循環(huán)右移1位,點(diǎn)亮下一個(gè)LED "<<"為左移位 if(P2 = 0x00 ) LED = 0xfe; / 0xfe = 1111 1110 第四章 跑馬燈程序/* 描述: 跑馬燈

5、程序 * 連接方法: 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()unsigned char LED;LED = 0xfe;P2 = LED;while(1)delayms(250);LED = _crol_(LED,1);/循環(huán)右移1位,點(diǎn)亮下一

6、個(gè)LED 此函數(shù)位庫(kù)函數(shù)P2 = LED;第五章 跑馬燈實(shí)驗(yàn)/*;* 跑馬燈實(shí)驗(yàn) *;*; 延時(shí)實(shí)現(xiàn)LED流水燈效果 p2口八個(gè)燈作跑馬燈。采用了寄存器存中間數(shù) *; 連接方法: JP11(P2)和JP1(LED燈) 用8PIN排線連接起來 *;*/#include <reg52.h>void delay(unsigned int i); /聲明延時(shí)函數(shù)char LED;main() unsigned char i; while (1) LED = 0xfe; for (i = 0 ;i < 8 ; i+) P2 = LED; delay(500); LED = LED &l

7、t;< 1; / 左移 LED = LED | 0x01; / 移位后,后面的位為高電平 if (LED = 0x7f) break; /提前退出 FOR 循環(huán) for (i = 0 ;i < 8 ; i+) P2 = LED; delay(500); LED = LED >> 1; / 右移 LED = LED | 0x80; / 移位后,后面的位為高電平 /*延時(shí)函數(shù)*/void delay(unsigned int i) unsigned char j; for(i; i > 0; i-) for(j = 255; j > 0; j-);第六章 按鍵控

8、制程序/* 按鍵控制程序 * 連接方法:JP10(P2) 與 JP1 (LED燈)連接, * JP11(P0) 與 JP5(按鍵接口)連接 * 開始點(diǎn)亮P1LED * 按P01 LED向右移一位 * 按P00 LED向左移一位 * 連續(xù)按動(dòng)按鈕LED會(huì)不停的左移或右移 */#include <reg51.h>#include <intrins.h>unsigned char scan_key();void proc_key(unsigned char key_v);void delayms(unsigned char ms);sbitK1 = P00;/對(duì)應(yīng)按鈕K1sb

9、itK2 = 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 = 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;retu

10、rn 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);void delayms(unsigned char ms)/ 延時(shí)子程序unsigned char i;while(ms-)for(i = 0; i < 120; i+);第七章 按鍵狀態(tài)顯示試驗(yàn)/*/* 按鍵狀態(tài)顯示試驗(yàn) */* */* 連接方法:連接JP10(P0)與JP5(按鈕接口) */* JP11 (P2)與J

11、P1(LED接口) * */*按鍵則點(diǎn)亮LED燈,8路指示燈接p0口 */*/#include <reg51.h>#include <intrins.h>sbit BEEP = P15; /將蜂鳴器定義在 P1.5 端口上sbit RELAY = P14; /將繼電器定義在 P1.4 端口上sbit K1 = P00; sbit K2 = 0x801; /P0和0X80表示的是同一個(gè)地址sbit K3 = P02; sbit K4 = 0x803;sbit K5 = P04; sbit K6 = 0x805;void beep();/*/main() while(1)

12、P2 = 0xff; if(K1 = 0)P2 = 0xfe; if(K2 != 1) P2 = 0xfd; if(!K3) P2 = 0xfb; if(K4) P2 = 0xf7; if(!K1&&!K2) P2 = 0x00;/2個(gè)按鈕同時(shí)按下 P2口8個(gè)燈全部點(diǎn)亮 if(!K5 ) beep();/喇叭發(fā)聲 if (!K6 ) RELAY = 0; /通過了反相器(HC6800試用) else RELAY = 1; /*/void beep() unsigned char i , j; for (i=0;i<100;i+) BEEP=!BEEP; /BEEP取反 f

13、or (j = 0 ; j<250 ; j+) /需要產(chǎn)生方波 _nop_(); BEEP=1; /關(guān)閉蜂鳴器第八章 蜂鳴器C51音樂程序(八月桂花) /* 文件名 C51音樂程序(八月桂花) 功能 通過單片機(jī)演奏音樂 /*/ #include <REG52.H> #include <INTRINS.H> /本例采用89C52, 晶振為11.0592MHZ /關(guān)于如何編制音樂代碼, 其實(shí)十分簡(jiǎn)單,各位可以看以下代碼. /頻率常數(shù)即音樂術(shù)語(yǔ)中的音調(diào),而節(jié)拍常數(shù)即音樂術(shù)語(yǔ)中的多少拍; /所以拿出譜子, 試探編吧! sbit Beep = P15 ; unsigned

14、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, 0x80, 0xFF , 0x20, 0x30, 0x1C, 0x10 , 0x18, 0x20, 0x15, 0x20 ,

15、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 , 0x20, 0x26, 0x20, 0x2B , 0x20, 0x30, 0x20, 0x2B ,

16、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, 0x40, 0x20 , 0x15, 0x1F, 0x05, 0x20 ,

17、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 , 0x20, 0x20, 0x20, 0x26 ,

18、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-); 各位可編譯一下看看匯編結(jié)果就知道了! void

19、 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; /如果碰到結(jié)束符,延時(shí)1秒,回到開始再來一遍 else if(p=0xff) i=i+1;delayms(100),TR0=0; goto a; /若碰到休止符,延時(shí)100ms,繼續(xù)取下一音符 else m=music_tabi

20、+, n=music_tabi+; /取頻率常數(shù) 和 節(jié)拍常數(shù) TR0=1; /開定時(shí)器1 while(n!=0) Beep=Beep,delay(m); /等待節(jié)拍完成, 通過P1口輸出音頻(可多聲道哦!) TR0=0; /關(guān)定時(shí)器1 第九章 繼電器實(shí)驗(yàn)/*/* 繼電器實(shí)驗(yàn) */* */* 連接方法:連接JP11(P2)與JP5(按鈕接口) */*按下P2.7 繼電器P1.4動(dòng)作 */*/#include <reg51.h> /51的端口和各特殊寄存器定義在此文件中sbit RELAY = P14; /定義繼電器對(duì)應(yīng)單片機(jī)管腳sbit K1 = P27; /定義按鈕對(duì)應(yīng)單片機(jī)管腳

21、/*主函數(shù) */main() if (!K1) RELAY = 0; /按鈕按下 開啟繼電器 else RELAY = 1; /按鈕松開 關(guān)閉繼電器 第十章 138譯碼器實(shí)驗(yàn)/* 138譯碼器實(shí)驗(yàn) * * * 實(shí)驗(yàn)?zāi)康模?1. 了解138譯碼器工作原理 * 2. 學(xué)會(huì)用C語(yǔ)言對(duì)138譯碼器編程控制 * * 實(shí)驗(yàn)現(xiàn)象: LED燈每隔一段時(shí)間循環(huán)點(diǎn)亮 * 接線方法: J15連JP1(參考圖片連接) */#include <reg51.h>sbit HC138A = P22; /定義譯碼器輸入端A 在 P2.2 管腳上sbit HC138B = P23; /定義譯碼器輸入端B 在 P2.

22、3 管腳上sbit HC138C = P24; /定義譯碼器輸入端C 在 P2.4 管腳上/* 延時(shí)函數(shù)*/void delay(unsigned int i) unsigned char j; for(i; i > 0; i-) /循環(huán)1500*255次 CPU在這里執(zhí)行一段時(shí)間 for(j = 255; j > 0; j-);main()/ 點(diǎn)亮第一個(gè)LED燈HC138C = 0; HC138B = 0; HC138A = 0; /輸入 000delay(1500); /延時(shí)/ 點(diǎn)亮第二個(gè)LED燈HC138C = 0; HC138B = 0; HC138A = 1; /輸入 0

23、01delay(1500); /延時(shí)/ 點(diǎn)亮第三個(gè)LED燈HC138C = 0; HC138B = 1; HC138A = 0; /輸入 010delay(1500);/ 點(diǎn)亮第四個(gè)LED燈HC138C = 0; HC138B = 1; HC138A = 1; /輸入 011delay(2000);/ 點(diǎn)亮第五個(gè)LED燈HC138C = 1; HC138B = 0; HC138A = 0; /輸入 100delay(1500);/ 點(diǎn)亮第六個(gè)LED燈HC138C = 1; HC138B = 0; HC138A = 1; /輸入 101delay(1500);HC138C = 1; HC138B

24、 = 1; HC138A = 0; /輸入 110delay(1500);HC138C = 1; HC138B = 1; HC138A = 1; /輸入 111delay(1500);第十一章 試驗(yàn)數(shù)碼管上如何顯示數(shù)字(共陽(yáng)極)/* 標(biāo)題: 試驗(yàn)數(shù)碼管上如何顯示數(shù)字(共陽(yáng)極) * * 連接方法:P0 與JP3 用8PIN排線連接 * * 請(qǐng)學(xué)員認(rèn)真消化本例程,用單片機(jī)腳直接控制數(shù)碼管 */#include <reg51.h> void delay(unsigned int i); /函數(shù)聲名 / 此表為 LED 的字模 0 1 2 3 4 5 6 7 8 9 a b c d e f

25、unsigned char code LED7Code = 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71; main() unsigned int LedNumVal ; /定義變量 while(1) / 將字模送到P0口顯示 LedNumVal+; P0 = LED7CodeLedNumVal%16&0x7f; /LED7 0x7f為小數(shù)點(diǎn) 共陰和共陽(yáng)此處也是不一樣; delay(6000); /調(diào)用延時(shí)程序 /* * 延時(shí)程序 * */void delay(unsign

26、ed int i) char j; for(i; i > 0; i-) /循環(huán)6000*200次 for(j = 200; j > 0; j-);第十二章 試驗(yàn)數(shù)碼管上顯示數(shù)字 共陰極)/* 標(biāo)題: 試驗(yàn)數(shù)碼管上顯示數(shù)字( 單片機(jī)直接實(shí)現(xiàn)位選 共陰極) * * 連接方法:P0與J12 用8PIN排線連接 P1與JP16 用排線連接 * * 請(qǐng)學(xué)員認(rèn)真消化本例程,用573鎖存器控制和單片機(jī)腳直接位選控制(非譯碼器控制)數(shù)碼管 */#include <reg51.h> void delay(unsigned int i); /函數(shù)聲名char DelayCNT;/定義變量

27、/此表為 LED 的字模, 共陰數(shù)碼管 0-9 - unsigned char code Disp_Tab = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /段碼控制/此表為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=1 ; /變量定義 unsigned int LedOut10;

28、/變量定義 DelayCNT=0; while(1) if(+DelayCNT>=20) /控制數(shù)字變化速度 DelayCNT=0; /20個(gè)掃描周期清零一次 +LedNumVal; /每隔20個(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; /千位 LedOut

29、5=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 語(yǔ)句控制位選 case 0:P1 = 0x7F; break; case 1:P1 = 0xbF; break; case 2:P1 = 0xdF; break; case 3:P1 = 0xeF;

30、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ì)有閃爍感 /*延時(shí)函數(shù)*/void delay(unsigned int i) char j; for(i; i > 0; i-) for(j = 200; j > 0; j-);第十三章 試驗(yàn)數(shù)碼管上顯示數(shù)字(譯碼器位選 共陰極)/* 標(biāo)題: 試驗(yàn)數(shù)碼管上顯示數(shù)字(譯碼器位選 共陰極) * * 連接方法:P0與J12

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

32、,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40; /*主函數(shù)*/ main() unsigned int i,LedNumVal ; 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; LedOut

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論