




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、標準文案學習單片機/實例1:用單片機控制第一個燈亮#include 包含51單片機寄存器定義的頭文件 void main(void) P1=0 xfe;/P1=1111 1110B 即 P1.0輸出低電平/實例2:用單片機控制一個燈閃爍:認識單片機的工作頻率#include/包含單片機寄存器的頭文件/函數功能:延時一段時間/void delay(void) 兩個void意思分別為無需返回值,沒有參數傳遞 unsigned int i;/定義無符號整數,最大取值范圍 65535for(i=0;i20000;i+) / 做 20000 次空循環;/什么也不做,等待一個機器周期 /函數功能:主函數
2、(C語言規定必須有也只能有1個主函數) /void main(void) while(1) 無限循環P1=0 xfe; /P1=1111 1110B, P1.0 輸出低電平delay();延時一段時間P1=0 xff; /P1=1111 1111B, P1.0 輸出高電平delay(); 延時一段時間 /實例3:將P1 口狀態分別送入 P0、P2、P3 口:認識I/O 口的引腳功能#include /包含單片機寄存器的頭文件/函數功能:主函數(C語言規定必須有也只能有1個主函數)/void main(void)while(1)無限循環P1=0 xff; / P1=1111 1111B熄滅 LE
3、DP0=P1;/將P1 口狀態送入P0 口P2=P1;/將P1 口狀態送入P2 口P3=P1;/將P1 口狀態送入P3 口/實例4:使用P3 口流水點亮8位LED#include /包含單片機寄存器的頭文件/函數功能:延時一段時間/void delay(void)unsigned char i,j;for(i=0;i250;i+)for(j=0;j250;j+);/函數功能:主函數/void main(void)while(1)P3=0 xfe;/第一個燈亮delay();調用延時函數P3=0 xfd;第二個燈亮delay();調用延時函數P3=0 xfb;/第三個燈亮delay();調用延時
4、函數P3=0 xf7; 第四個燈亮 delay(); 調用延時函數P3=0 xef;/第五個燈亮delay();調用延時函數P3=0 xdf;/第六個燈亮delay();調用延時函數P3=0 xbf;/第七個燈亮delay();調用延時函數P3=0 x7f;/第八個燈亮delay();調用延時函數實例7:通過對P3 口地址的操作流水點亮8位LED#include /包含單片機寄存器的頭文件sfr x=0 xb0;/P3 口在存儲器中的地址是 b0H, 通過sfr可定義8051內核單片的所有內部8位特殊功能寄存器,對地址x的操作也就是對P1 口的操作/函數功能:延時一段時間/void delay
5、(void)unsigned char i,j;for(i=0;i250;i+)for(j=0;j250;j+);/利用循環等待若干機器周期,從而延時一段時間/函數功能:主函數/void main(void)while(1)x=0 xfe; /第一個燈亮delay(); 調用延時函數x=0 xfd; 第二個燈亮delay(); 調用延時函數x=0 xfb; /第三個燈亮delay(); 調用延時函數x=0 x億第四個燈亮delay(); 調用延時函數x=0 xef; /第五個燈亮delay(); 調用延時函數x=0 xdf; /第六個燈亮delay(); 調用延時函數x=0 xbf; /第七個
6、燈亮delay(); 調用延時函數x=0 x7f;/第八個燈亮delay(); 調用延時函數 實例8:用不同數據類型控制燈閃爍時間#include /包含單片機寄存器的頭文件 / 函數功能:用整形數據延時一段時間/void int_delay(void) /延時一段較長的時間 unsigned int m; /定義無符號整形變量,雙字節數據,值域為 065535 for(m=0;m36000;m+);/空操作 / 函數功能:用字符型數據延時一段時間/void char_delay(void) /延時一段較短的時間.unsigned char i,j;定義無符號字符型變量,單字節數據,值域 02
7、55for(i=0;i200;i+)for(j=0;j180;j+);/空操作 / 函數功能:主函數/void main(void) unsigned char i; while(1) for(i=0;i3;i+) P1=0 xfe;/P1.0 口的燈點亮int_delay(); 延時一段較長的時間P1=0 xff;熄滅int_delay(); /延時一段較長的時間 一for(i=0;i3;i+)P1=0 xef;/P1.4 口的燈點亮char_delay(); /延時段較長的時間P1=0 xff;熄滅char_delay(); /延時段較長的時間 ./實例9:用P0 口、P1 口分別顯示加法
8、和減法運算結果#includevoid main(void)unsigned char m,n;m=43;即十進制數 2x16+11=43n=60;即十進制數 3x16+12=60P1=m+n; /P1=103=0110 0111B結果 P13 P14 P1.7 口的燈被點亮P0=n-m; /P0=17=0001 0001B結果 P0.0、P0.4的燈被熄滅實例10:用P0、P1 口顯示乘法運算結果#include /包含單片機寄存器的頭文件void main(void)unsigned char m,n;unsigned int s;m=64;n=71;s=m n;/s=64 71=4544
9、,需要16位二進制數表示,高 8位送P1 口,低8位送P0 口/ 由于 4544=17 256+192=H3 16 16 16+H2 16 16+H1 16+H0/兩邊同除以 256,可得 17+192/256=H3 16+H2+(H1 16+H0 /256因此,高8位16進制數H3 16+H2必然等于17,即4544 除以256的商/低8位16進制數H1 16+H0必然等于192,即4544除以256 的余數P1=s/256;/高 8 位送 P1 口,P1=17=11H=0001 0001B, P1.和 P1.4 口滅,其余亮P0=s%256; 低 8 位送 P0 口,P3=192=c0H=
10、1100 0000B,P3.1,P3.6,P37 滅,其余亮 實例11 :用P1、P0 口顯示除法運算結果#include /包含單片機寄存器的頭文件void main(void)P1=36/5;求整數P0=(36%5) 10)/5; /冰小數while(1);無限循環防止程序“跑飛”實例12 :用自增運算控制P0 口 8位LED流水花樣#include/包含單片機寄存器的頭文件/函數功能:延時一段時間/void delay(void) unsigned int i;for(i=0;i20000;i+)J/函數功能:主函數/void main(void)unsigned char i;for(
11、i=0;i255;i+) /注意i的值不能超過255P0=i; 將i的值送P0口delay(); 調用延時函數實例13 :用P0 口顯示邏輯與運算結果#include /包含單片機寄存器的頭文件void main(void)P0=(40)&(90 xab);/W邏輯運算結果送 P0 口while(1);設置無限循環,防止程序“跑飛”實例14 :用P0 口顯示條件運算結果#include /包含單片機寄存器的頭文件 void main(void)P0=(84)?8:4;/t件運算結果送 P0 口, P0=8=0000 1000B while(1);設置無限循環,防止程序“跑飛”實例15 :用P0
12、 口顯示按位異或運算結果#include/包含單片機寄存器的頭文件void main(void)P0=0 xa2A0 x3c;/4等條件運算結果送 P0 口, P0=8=0000 1000B while(1);設置無限循環,防止程序“跑飛”實例16 :用P0顯示左移運算結果#include/包含單片機寄存器的頭文件void main(void)P0=0 x3b2;/W左移運算結果送 P0 口,P0=1110 1100B=0 xec while(1);無限循環,防止程序“跑飛”/實例17:萬能邏輯電路”實驗#include sbit F=PW4;sbit X=P1A5;sbit Y=PW6;sb
13、it Z=P1A7; void main(void) while(1)包含單片機寄存器的頭文件將F位定義為 將X位定義為 將Y位定義為 將Z位定義為P1.4P1.5P1.6P1.7F=(X)&Y)|Z; /陷邏輯運算結果賦給F/實例18 :用右移運算流水點亮P1 口 8位LED#include /包含單片機寄存器的頭文件 /函數功能:延時一段時間/void delay(void) unsigned int n;for(n=0;n30000;n+);/函數功能:主函數/ void main(void) unsigned char i;while(1)P1=0 xff;delay();for(i=
14、0;i1; 每次循環P1的各二進位右移1位,高位補0 delay();調用延時函數 /實例19 :用if語句才制P0 口 8位LED的流水方向#include /包含單片機寄存器的頭文件sbit S1=P1A4;將 S1 位定義為 P1.4sbit S2=PW5;將 S2位定義為 P1.5/函數功能:主函數/void main(void)while(1) if(S1=0) 如果按鍵S1按下P0=0 x0f; /P0 口 高四位 LED點亮if(S2=0) 如果按鍵S2按下P0=0 xf0; /P0 口低四位 LED點亮 /實例20 :用swtich語句的控制 P0 口 8位LED的點亮狀態#i
15、nclude /包含單片機寄存器的頭文件 sbit S1=P1A4;將 S1 位定義為 P1.4/函數功能:延時一段時間/void delay(void) unsigned int n;for(n=0;n10000;n+) ; / 函數功能:主函數/void main(void) unsigned char i;i=0;將i初始化為0while(1) if(S1=0) 如果S1鍵按下 delay(); /延時一段時間if(S1=0) /如果再次檢測到S1鍵按下i+;/i 自增 1if(i=9) 如果i=9,重新將其置為1 i=1;switch(i)/使用多分支選擇語句P0=0 xfe; 第一個
16、 LED亮 break;P0=0 xfd; / 第二個 LED亮 break;case 3:P0=0 xfb; 第三個 LED亮 break;case 4:P0=0 xf7; 第四個 LED亮 break;case 5:P0=0 xef; 第五個 LED亮 break;case 6:P0=0 xdf; 第六個 LED亮 break;case 7:P0=0 xbf; / 第七個 LED亮 break;case 8:P0=0 x7f; 第八個 LED亮 break;default: 缺省佰,關閉所有LED P0=0 xff;/實例21 :用for語句控制蜂鳴器鳴笛次數#include /包含單片機
17、寄存器的頭文件sbit sound=P3A7; 將 sound 位定義為 P3.7 /函數功能:延時形成1600Hz音頻/void delay1600(void) unsigned char n;for(n=0;n100;n+) ; /函數功能:延時形成800Hz音頻/void delay800(void) unsigned char n;for(n=0;n200;n+) ;/函數功能:主函數/void main(void)unsigned int i;while(1)for(i=0;i830;i+)sound=0; /P3.7輸出低電平 delay1600();sound=1; /P3.7輸
18、出高電平 delay1600();for(i=0;i200;i+)sound=0; /P3.7輸出低電平 delay800();sound=1; /P3.7輸出高電平 delay800();/實例22 :用while語句控制LED#include /包含單片機寄存器的頭文件/函數功能:延時約 60ms (3 100 200=600001 s)/void delay60ms(void)unsigned char m,n;for(m=0;m100;m+)for(n=0;n200;n+);/函數功能:主函數/void main(void)unsigned char i;while(1)無限循環i=0
19、;將i初始化為0while(i0 xff)/當i小于0 xff (255)時執行循環體P0=i; 將i送P0 口顯示delay60ms();延時i+;/i 自增 1/實例23 :用do-while語句控制P0 口 8位LED流水點亮#include /包含單片機寄存器的頭文件 /函數功能:延時約 60ms (3 100 200=60000 s) / void delay60ms(void) unsigned char m,n;for(m=0;m100;m+)for(n=0;n200;n+) ;/函數功能:主函數/void main(void)doP0=0 xfe;/ 第一個 LED亮delay
20、60ms();P0=0 xfd;第二個 LED亮delay60ms();P0=0 xfb;第三個LED亮delay60ms();P0=0 x億 第四個LED亮 delay60ms();P0=0 xef;/ 第五個 LED亮delay60ms();P0=0 xdf;第六個LED亮delay60ms();delay60ms();P0=0 xbf;第七個LED亮delay60ms();P0=0 x7f;第八個LED亮delay60ms();while(1); 無限循環,使8位LED循環流水點亮 /實例24 :用字符型數組控制P0 口 8位LED流水點亮#include /包含單片機寄存器的頭文件 /
21、函數功能:延時約 60ms (3 100 200=60000 s)/void delay60ms(void)unsigned char m,n;for(m=0;m100;m+)for(n=0;n200;n+);/函數功能:主函數/void main(void)unsigned char i;unsigned char code Tab =0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f; /定義無符 號字符型數組while(1)for(i=0;i8;i+)P0=Tabi;/依次引用數組元素,并將其送 P0 口顯示delay60ms();/調用延時函
22、數/實例25 :用P0 口顯示字符串常量#include /包含單片機寄存器的頭文件 /函數功能:延時約 150ms (3 200 250=150 000c s=150ms/void delay150ms(void)unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+);/函數功能:主函數/void main(void)unsigned char str=Now,Temperature is :; / 將字符串賦給字符型全部元素 賦值unsigned char i;while(1)i=0; 將i初始化為0,從第一個元素開始顯示while(stri!
23、=0)/只要沒有顯示到結束標志0P0=stri;將第i個字符送到P0 口顯示delay150ms(); /調用 150ms延時函數i+;指向下一個待顯字符/實例26 :用P0 口顯示指針運算結果#includevoid main(void)unsigned char p1, p2; /定義無符號字符型指針變量 p1,p2 unsigned char i,j;/定義無符號字符型數據i=25;/給i賦初值25j=15;p1=&i;使指針變量指向i,對指針初始化p2=&j;使指針變量指向j,對指針初始化P0= p1+p2; / p1+ p2 相當于i+j,所以 P0=25+15=40=0 x28/則
24、P0=0010 1000B結果P03 P0.5引腳LED熄滅,其余點亮 while(1);無限循環,防止程序“跑飛”/實例27 :用指針數組控制P0 口 8位LED流水點亮#include/函數功能:延時約 150ms (3 200 250=150 000n s=150ms/void delay150ms(void)unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+) ;/函數功能:主函數/void main(void)unsigned char code Tab=0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf
25、,0 x7f;unsigned char p =&Tab0,&Tab1,&Tab2,&Tab3,&Tab4,&Tab5, &Tab6,&Tab7;unsigned char i;/定義無符號字符型數據while(1)for(i=0;i8;i+)P0= pi;delay150ms();/實例28 :用數組的指針控制P0 口 8位LED流水點亮#include /函數功能:延時約 150ms (3 200 250=150 000n s=150ms / void delay150ms(void) unsigned char m,n;for(m=0;m200;m+) for(n=0;n250;n+)
26、; / 函數功能:主函數 / void main(void)unsigned char i;unsigned char Tab =0 xFF,0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF, 0 x7F,0 xBF,0 xDF,0 xEF,0 xF7,0 xFB,0 xFD,0 xFE, 0 xFE,0 xFC,0 xFB,0 xF0,0 xE0,0 xC0,0 x80,0 x00, 0 xE7,0 xDB,0 xBD,0 x7E,0 x3C,0 x18,0 x00,0 x81, 0 xC3,0 xE7,0 x7E,0 xBD,0 xDB,0 xE7,0 x
27、BD,0 xDB; 流水燈控制碼unsigned char p;/定義無符號字符型指針p=Tab;將數組首地址存入指針pwhile(1) for(i=0;i32;i+) /共32個流水燈控制碼 P0= (p+i);/(p+i)的值等于 aidelay150ms(); /調用 150ms 延時函數 /實例29:用P0、P1 口顯示整型函數返回值#include/函數功能:計算兩個無符號整數的和/unsigned int sum(int a,int b)unsigned int s;s=a+b;return (s);/函數功能:主函數/void main(void)unsigned z;z=sum
28、(2008,2009);P1=z/256;/取得z的高8位P0=z%256;/取得z的低8位while(1);/實例30 :用有參函數控制 P0 口 8位LED流水速度#include/函數功能:延時一段時間/void delay(unsigned char x)unsigned char m,n;for(m=0;mx;m+)for(n=0;n200;n+);/函數功能:主函數/void main(void)unsigned char i;unsigned char code Tab =0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;流水燈控制碼
29、while(1)快速流水點亮LEDfor(i=0;i8;i+) /共8個流水燈控制碼P0=Tabi;delay(100); / 延時約 60ms, (3 100 200=60 000i s)慢速流水點亮LEDfor(i=0;i8;i+) /共8個流水燈控制碼P0=Tabi;delay(250); / 延時約 150ms, (3 250 200=150 000n s)/實例31 :用數組作函數參數控制流水花樣#include/函數功能:延時約150ms/void delay(void)unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+);/函數功能
30、:流水點亮P0 口 8位LED/void led_flow(unsigned char a8).unsigned char i; for(i=0;i8;i+)P0=ai;delay();/函數功能:主函數/void main(void)unsigned char code Tab =0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;流水燈控制碼led_flow(Tab);/實例32 :用指針作函數參數控制 P0 口 8位LED流水點亮#include/函數功能:延時約150ms/void delay(void)unsigned char m,n;f
31、or(m=0;m200;m+)for(n=0;n250;n+);/函數功能:流水點亮P0 口 8位LED/void led_flow(unsigned char p) 形參為無符號字符型指針 .unsigned char i;while(1)i=0; 將i置為0,指向數組第一個元素while( (p+i)!=0) 只要沒有指向數組的結束標志 P0= (p+i);/取的指針所指變量(數組元素)的值,送 P0 口 delay();調用延時函數i+;指向下一個數組元素/函數功能:主函數/void main(void)unsigned char code Tab =0 xFE,0 xFD,0 xFB,
32、0 xF7,0 xEF,0 xDF,0 xBF,0 x7F, 0 x7F,0 xBF,0 xDF,0 xEF,0 xF7,0 xFB,0 xFD,0 xFE,0 xFF,0 xFE,0 xFC,0 xFB,0 xF0,0 xE0,0 xC0,0 x80,0 x00,0 xE7,0 xDB,0 xBD,0 x7E,0 xFF,0 xFF,0 x3C,0 x18,0 x0,0 x81,0 xC3,0 xE7,0 xFF, 0 xFF,0 x7E;流水燈控制碼unsigned char pointer;pointer=Tab;led_flow(pointer);/實例33 :用函數型指針控制 P1
33、口燈花樣#include 包含51單片機寄存器定義的頭文件unsigned char code Tab=0 xFE,0 xFD,0 xFB,0 xF7,0 xEF,0 xDF,0 xBF,0 x7F;/流水燈控制碼,該數組被定義為全局變量/函數功能:延時約150ms/void delay(void)unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+);/函數功能:流水燈左移/void led_flow(void).unsigned char i;for(i=0;i8;i+) /8 位控制碼P0=Tabi;delay();/函數功能:主函數/voi
34、d main(void)void ( p)(void);/定義函數型指針,所指函數無參數,無返回值p=led_flow; 將函數的入口地址賦給函數型指針pwhile(1)(p)();通過函數的指針p調用函數led_flow ()/實例34 :用指針數組作為函數的參數顯示多個字符串#include 包含51單片機寄存器定義的頭文件unsigned char code str1 =Temperature is tested by DS18B20;CiS言中,字符串 是作為字符數組來處理的unsigned char code str2 =Now temperature is:;/ 所以,字符串的名字
35、就是字符串的首地址unsigned char code str3 =The Systerm is designed by Zhang San;unsigned char code str4 =The date is 2008-9-30;unsigned char p =str1,str2,str3,str4; / 定義 p4為指向 4 個字符串的字符型指針數組/函數功能:延時約150ms/void delay(void)unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+);/函數功能:流水點亮P0 口 8位LED/void led_display
36、(unsigned char x ) / 形參必須為指針數組.unsigned char i,j;for(i=0;i4;i+)/有4個字符串要顯示j=0; 指向待顯字符串的第0號元素while( (xi+j)!=0) /只要第i個字符串的第j號元素不是結束標志 P0= (xi+j); 取得該元素值送至ij P0 口顯示delay(); 調用延時函數j+;指向下一個元素/函數功能:主函數/void main(void)unsigned char i;while(1)for(i=0;i4;i+)led_display(p); /將指針數組名作實際參數傳遞/實例35 :字符函數ctype.h應用舉例
37、#include 包含51單片機寄存器定義的頭文件#includevoid main(void)while(1)P3=isalpha(_)?0 xf0:0 x0f;/條件運算,若_是英文字母,P3=0 xf0/實例36 :內部函數intrins.h 應用舉例#include 包含51單片機寄存器定義的頭文件#include/包含函數isalpha ()聲明的頭文件/函數功能:延時約150ms/void delay(void)unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+) ; / 函數功能:主函數/void main(void) P3=0 x
38、fe; /P3=1111 1110Bwhile(1)P3=_crol_(P3,1);/將P3的二進制位循環左移1位后再賦給P3 delay(); 調用延時函數/實例37 :標準函數stdlib.h應用舉例#include 包含51單片機寄存器定義的頭文件#include包含函數isalpha ()聲明的頭文件/函數功能:延時約150ms /void delay(void)unsigned char m,n;for(m=0;m200;m+)for(n=0;n250;n+) ; / 函數功能:主函數/void main(void)unsigned char i;while(1)for(i=0;i1
39、0;i+)/產生 10 個隨機數P3=rand()/160;/將產生的隨機數縮小160倍后送P3顯示 delay();/實例38:字符串函數string.h應用舉例#include 包含51單片機寄存器定義的頭文件#include /包含函數isalpha ()聲明的頭文件void main(void)unsigned char str1 =Now, The temperature is :;unsigned char str2 =Now, The temperature is 36 Centgrade:;unsigned char i;i=strcmp(str1,str2); /比較兩個字符
40、串,并將結果存入 iif(i=0) /str1=str2P3=0 x00;elseif(i0) /str1str2 P3=0 x0f;while(1);防止程序“跑飛”/實例39 :宏定義應用舉例2#include /包含51單片機寄存器定義的頭文件# define F(a,b) (a)+(a) (b)/256+(b)/ 帶參數的宏定義,a 和 b 為形參void main(void)unsigned char i,j,k;i=40;j=30;k=20;P3=F(i,j+k); /i和j+k分別為實參,宏展開時,實參將替代宏定義中的形 參while(1);/實例40 :宏定義應用舉例2#inc
41、lude #include void main(void) P3_0=0; 將P3.0引腳置低電平,LED點亮P3_1=0; 將P3.0引腳置低電平,LED點亮P3_2=0; 將P3.0引腳置低電平,LED點亮P3_3=0; 將P3.0引腳置低電平,LED點亮P3_4=1; /將P3.4引腳置高電平,LED熄滅P3_5=1; /將P3.5引腳置高電平,LED熄滅P3_6=1; /將P3.7引腳置高電平,LED熄滅標準/文案P3_7=1; /將P3.7引腳置高電平,LED熄滅 while(1) ; /實例41 :宏定義應用舉例3#include 包含51單片機寄存器定義的頭文件#define M
42、AX 100將MAX宏定義為字符串100void main(void)#if MAX80 如果字符串100大于80P3=0 xf0;/P3 口低四位 LED點亮#elseP3=0 x0f;否則,P3 口高四位LED點亮#endif/結束本次編譯/中斷、定時器中斷、定時器中斷、定時器中斷、定時器/實例42 :用定時器T0查詢方式P2 口 8位控制LED閃爍#include / 包含51單片機寄存器定義的頭文件/函數功能:主函數void main(void)標準文案/ EA=1;開總中斷/ ET0=1;/定時器T0中斷允許TMOD=0 x01;/使用定時器T0的模式1TH0=(65536-4608
43、3)/256; /定時器T0的高8位賦初值 TL0=(65536-46083)%256; 定時器T0的高8位賦初值 TR0=1;啟動定時器T0TF0=0; P2=0 xff; while(1)/無限循環等待查詢 while(TF0=0) ; TF0=0; P2=P2;TH0=(65536-46083)/256; /定時器T0的高8位賦初值 TL0=(65536-46083)%256; /定時器T0的高8位賦初值 /實例43 :用定時器T1查詢方式控制單片機發出 1KHz音頻#include / 包含51單片機寄存器定義的頭文件sbit sound=P3A7; 將 sound 位定義為 P3.7
44、 弓I腳 /函數功能:主函數/ void main(void)/ EA=1;開總中斷/ ET0=1;/定時器T0中斷允許TMOD=0 x10;/使用定時器T1的模式1TH1=(65536-921)/256; /定時器T1的高8位賦初值TL1=(65536-921)%256; /定時器T1的高8位賦初值TR1=1;啟動定時器T1TF1=0;while(1)/無限循環等待查詢while(TF1=0) ;TF1=0;sound=sound; 將P3.7引腳輸出電平取反TH1=(65536-921)/256; 定時器T0的高8位賦初值TL1=(65536-921)%256; /定時器T0的高8位賦初值
45、/實例44 :將計數器T0計數的結果送P1 口 8位LED顯示#include / 包含51單片機寄存器定義的頭文件sbit S=P3A4;將S位定義為P3.4弓唧/函數功能:主函數/ void main(void)/ EA=1;開總中斷/ ET0=1;/定時器T0中斷允許TMOD=0 x02;/使用定時器T0的模式2TH0=256-156; 定時器T0的高8位賦初值TL0=256-156; 定時器T0的高8位賦初值TR0=1;啟動定時器T0while(1)/無限循環等待查詢while(TF0=0) /如果未計滿就等待 if(S=0) 按鍵S按下接地,電平為0P1=TL0; /#數器TL0力口
46、 1后送P1 口顯示 TF0=0; 計數器溢出后,將TF0清0 /實例45 :用定時器T0的中斷控制1位LED閃爍#include / 包含51單片機寄存器定義的頭文件 sbit D1=P2A0; 將D1位定義為P2.0弓I腳/函數功能:主函數/void main(void)EA=1;開總中斷ET0=1;/定時器T0中斷允許TMOD=0 x01;使用定時器T0的模式2TH0=(65536-46083)/256; /定時器T0的高8位賦初值TL0=(65536-46083)%256; /定時器T0的高8位賦初值TR0=1;啟動定時器T0while(1)/無限循環等待中斷;/函數功能:定時器T0的
47、中斷服務程序/void TimeO(void) interrupt 1 using 0 / “interrupt ” 聲明函數為中斷服務函數其后的1為定時器T0的中斷編號;0表示使用第0組工作 寄存器D1=D1; 按位取反操作,將P2.0引腳輸出電平取反TH0=(65536-46083)/256; /定時器T0的高8位重新賦初值TL0=(65536-46083)%256; /定時器T0的高8位重新賦初值/實例46:用定時器T0的中斷實現長時間定時#include / 包含51單片機寄存器定義的頭文件sbit D1=P2A0; 將D1位定義為P2.0弓I腳unsigned char Counto
48、r; /設置全局變量,儲存定時器 T0中斷次數/函數功能:主函數/void main(void)EA=1;開總中斷ET0=1;/定時器T0中斷允許TMOD=0 x01;使用定時器T0的模式2TH0=(65536-46083)/256; /定時器T0的高8位賦初值TL0=(65536-46083)%256; /定時器T0的高8位賦初值TR0=1;啟動定時器T0Countor=0;從0開始累計中斷次數while(1)/無限循環等待中斷;/函數功能:定時器T0的中斷服務程序/void TimeO(void) interrupt 1 using 0 / “interrupt ” 聲明函數為中斷服務函數
49、其后的1為定時器T0的中斷編號;0表示使用第0組工作 寄存器Countor+;中斷次數自加1if(Countor=20) 若累計滿20次,即計時滿1sD1=D1;按位取反操作,將P2.0引腳輸出電平取反Countor=0; 將Countor清0,重新從0開始計數TH0=(65536-46083)/256; /定時器T0的高8位重新賦初值TL0=(65536-46083)%256; /定時器T0的高8位重新賦初值/實例47 :用定時器T1中斷控制兩個LED以不同周期閃爍#include / 包含51單片機寄存器定義的頭文件sbit D1=P2A0; 將D1位定義為P2.0弓I腳sbit D2=P
50、2A1; 將D2位定義為P2.1弓I腳unsigned char Countor1;/設置全局變量,儲存定時器 T1中斷次數unsigned char Countor2; /設置全局變量,儲存定時器 T1中斷次數 /函數功能:主函數/void main(void)EA=1;開總中斷ET1=1;定時器T1中斷允許TMOD=0 x10;使用定時器T1的模式1TH1=(65536-46083)/256; /定時器T1的高8位賦初值TL1=(65536-46083)%256; /定時器T1的高8位賦初值TR1=1;啟動定時器T1Countor1=0;從0開始累計中斷次數Countor2=0;從0開始累
51、計中斷次數while(1)/無限循環等待中斷 ; / 函數功能:定時器T1的中斷服務程序 / void Timel(void) interrupt 3 using 0 / “interrupt ” 聲明函數為中斷服務函數其后的3為定時器T1的中斷編號;0表示使用第0組工作 寄存器Countor1+; /Countorl 自力口 1Countor2+; /Countor2 自力口 1if(Countor1=2) 若累計滿2次,即計時滿100ms D1=D1;按位取反操作,將P2.0引腳輸出電平取反Countor1=0; 將Countor1清0,重新從0開始計數 if(Countor2=8) 若累
52、計滿8次,即計時滿400ms D2=D2;按位取反操作,將P2.1引腳輸出電平取反Countor2=0; 將Countor1清0,重新從0開始計數 TH1=(65536-46083)/256; /定時器T1的高8位重新賦初值TL1=(65536-46083)%256; /定時器T1的高8位重新賦初值 /實例48:用計數器T1的中斷控制蜂鳴器發出1KHz音頻#include / 包含51單片機寄存器定義的頭文件sbit sound=P3A7; / 將 sound 位定義為 P3.7 引腳 /函數功能:主函數/void main(void) EA=1;開總中斷ET1=1;定時器T1中斷允許TMOD
53、=0 x10;/TMOD=0001 000B,使用定時器 T1 的模式 1TH1=(65536-921)/256;/定時器T1的高8位賦初值TL1=(65536-921)%256; /定時器T1的高8位賦初值TR1=1;啟動定時器T1while(1)/無限循環等待中斷;/函數功能:定時器T1的中斷服務程序/void Timel(void) interrupt 3 using 0 / “interrupt ” 聲明函數為中斷服務函數 sound=sound;TH1=(65536-921)/256;/定時器T1的高8位重新賦初值TL1=(65536-921)%256; /定時器T1的高8位重新賦初
54、值#include sbit sound=P3A7; unsigned int C;/實例49:用定時器T0的中斷實現渴望主題曲的播放包含51單片機寄存器定義的頭文件將sound位定義為P3.7儲存定時器的定時常數以下是C調低音的音頻宏定義#define l_dao 262#define l_re 286#define l_mi 311#define l_fa 349#define l_sao 392#define l_la 440#define lxi 494將“l_dao”宏定義為低音 將“l_re”宏定義為低音“將“l_mi”宏定義為低音“ 將“l fa”宏定義為低音“將“l sao”宏
55、定義為低將“l_a”宏定義為低- 將“l xi”宏定義為低“ 1”的頻率262Hz2”的頻率286Hz3”的頻率311Hz4”的頻率349Hz5”的頻率392Hz6”的頻率440Hz7”的頻率494Hz以下是C調中音的音頻宏定義#define dao 523#define re 587#define mi 659#define fa 698#define sao 784#define la 880#define xi 987將“dao”宏定義為中音將“re”宏定義為中音 將“mi”宏定義為中音 將“fa”宏定義為中音將 “sa。”“1”的頻率523Hz 2”的頻率587Hz“ 3”的頻率659
56、Hz4”的頻率698Hz宏定義為中音“ 5”的頻率784Hz將“la”宏定義為中音“ 將“xi”宏定義為中音“6”的頻率880Hz7”的頻率523H#define h_dao 1046#define h_re 1174#define h_mi 1318#define h_fa 1396#define h_sao 1567#define h_la 1760以下是C調高音的音頻宏定義將“h_dao”宏定義為高音“ 1”的頻率1046Hz將“h_re”宏定義為高音“ 2”的頻率1174Hz將“h_mi”宏定義為高音“ 3”的頻率1318Hz將“h_fa”宏定義為高音“ 4”的頻率1396Hz將“h_
57、sao”宏定義為高音“ 5”的頻率1567Hz將“h_la”宏定義為高音“ 6”的頻率1760Hz#define h_xi 1975 將 “h_xi” 宏定義為高音 “ 7” 的頻率 1975Hz/函數功能:1個延時單位,延時200ms/void delay()unsigned char i,j;for(i=0;i250;i+)for(j=0;j250;j+);/函數功能:主函數/void main(void)unsigned char i,j;以下是渴望片頭曲的一段簡譜unsigned int code f=re,mi,re,dao,l_la,dao,l_la, / 每行對應一小節音符 l_
58、sao,l_mi,l_sao,l_la,dao,l_la,dao,sao,la,mi,sao, re, mi,re,mi,sao,mi, l_sao,l_mi,l_sao,l_la,dao, l_la,l_la,dao,l_la,l_sao,l_re,l_mi, l_sao, re,re,sao,la,sao, fa,mi,sao,mi, la,sao,mi,re,mi,l_la,dao, re, mi,re,mi,sao,mi, l_sao,l_mi,l_sao,l_la,dao, l_la,dao,re,l_la,dao,re,mi, re, l_la,dao,re,l_la,dao,re
59、,mi, re,0 xff); /以0 xff作為音符的結束標志/以下是簡譜中每個音符的節拍/4對應4個延時單位,2對應2個延時單位,1對應1個延時單位unsigned char code JP =4,1,1,4,1,1,2,2,2,2,2,8,4,2,3,1,2,2,10,4,2,2,4,4, 2,2,2,2,4,2,2,2,2,222,10, 4,4,4,2,2, 4,2,4,4, 4,2,2,2,2,2,2, 10, 4,2,2,4,4, 2,2,2,2,6, 4,2,2,4,1,1,4, 10,4,2,2,4,1,1,4, 10EA=1;ET0=1;TMOD=0 x00; while(
60、1);/開總中斷定時器T0中斷允許/使用定時器T0的模式1 (13位計數器)/無限循環i=0; 從第1個音符f0開始播放while(fi!=0 xff)/只要沒有讀到結束標志就繼續播放C=460830/fi;TH0=(8192-C)/32; 可證明這是13位計數器TH0高8位的賦初值方法TL0=(8192-C)%32; 可證明這是13位計數器TL0ffi 5位的賦初值方法啟動定時器T0/控制節拍數/延時1個節拍單位關閉定時器T0/播放下一個音符TR0=1;for(j=0;卜JPi;j+) delay();TR0=0;i+;函數功能:定時器T0的中斷服務子程序,使P3.7引腳輸出音頻的方波/vo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網絡信息安全技術服務與保障合同
- 出生日期與在職經歷證明(6篇)
- 醫療器械專業修理機器人行業深度調研及發展項目商業計劃書
- 進口化妝品連鎖店企業制定與實施新質生產力項目商業計劃書
- 醫藥包裝廢棄物回收企業制定與實施新質生產力項目商業計劃書
- 人造板品牌大使合作創新創業項目商業計劃書
- 雪地摩托障礙賽行業深度調研及發展項目商業計劃書
- 山西電力職業技術學院《量子力學純英文》2023-2024學年第二學期期末試卷
- 2025至2030中國汽車板簧行業市場深度分析及競爭格局及有效策略與實施路徑評估報告
- 2025至2030中國梨行業發展分析及產業運行態勢及投資規劃深度研究報告
- 國家開放大學2025年《創業基礎》形考任務3答案
- SL631水利水電工程單元工程施工質量驗收標準第1部分:土石方工程
- 附件9:未取得國外國籍的聲明
- 2022年DPI610-615型便攜式壓力校驗儀操作規程
- 數學分析試題及答案(兩份)
- 司爐崗位應急處置卡(燃氣)參考
- 最新四川省教師資格認定體檢表
- 兒童手機設計報告
- 防眩板施工組織設計
- 公路交通工程及安全設施施工指導意見
- 干式變壓器企業標準
評論
0/150
提交評論