單片機學習程序_第1頁
單片機學習程序_第2頁
單片機學習程序_第3頁
單片機學習程序_第4頁
單片機學習程序_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、/* 普中科技-* 實 驗 名 : LED閃爍的簡單試驗* 實驗說明 : 得到8盞LED交替亮滅的實驗效果* 連接方式 : 見連接圖* 注 意 : */-包含你要使用的頭文件-/#include <reg51.h> /此文件中定義了51的一些特殊功能寄存器/-聲明全局函數-/void Delay10ms(unsigned int c); /延時10ms/* 函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main() while(1)/-數字前面加0x表示該數是十六進制的數,0x00就是十六進制的00-/-P2口一共有8個IO口,即

2、從P2.0到P2.7,而0x00二進制就是0000 0000-/-效果就是P2.0到P2.7都是0,即低電平。而如果你想給P2.1口賦高電平時-/-二進制就是0000 0001,就是十六進制0x01.-/P0 = 0x00; /置P0口為低電平Delay10ms(500); /調用延時程序,修改括號里面的值可以調整延時時間P0 = 0xff; /置P0口為高電平Delay10ms(50); / 調用延時程序/* 函 數 名 : Delay10ms* 函數功能 : 延時函數,延時10ms* 輸 入 : 無* 輸 出 : 無*/void Delay10ms(unsigned int c) /誤差

3、0us unsigned char a, b;/-c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* 普中科技-* 實 驗 名 : LED二進制加法顯示實驗* 實驗說明 : LED燈做二進制加1顯示* 連接方式 : 見接線圖* 注 意 : */#include <reg52.h>/-聲明全局函數-/void Delay10ms(unsigned int c); /延時10ms/* 函 數 名 : main* 函數功能 : 主函數* 輸 入

4、 : 無* 輸 出 : 無*/void main() unsigned char Num = 0x00; while (1) P0 = Num; Delay10ms(50); /延時函數 Num+; /* 函 數 名 : Delay10ms* 函數功能 : 延時函數,延時10ms* 輸 入 : 無* 輸 出 : 無*/void Delay10ms(unsigned int c) /誤差 0us unsigned char a, b;/-c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=

5、130;a>0;a-); /* * 普中科技-* 實 驗 名 : 流水燈實驗* 實驗說明 : 延時實現LED流水燈效果P2口八個燈作跑馬燈。采用了寄存器存中間數* 連接方式 : 見接線圖* 注 意 : */-包含你要使用的頭文件#include <reg52.h> /此文件中定義了51的一些特殊功能寄存器#include <intrins.h>/-聲明全局函數-/void Delay10ms(unsigned int c); /延時10ms /* 函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/main()unsigned

6、char LED;LED = 0xfe; /0xfe = 1111 1110 while (1) P0 = LED; Delay10ms(50); LED = LED << 1; /循環右移1位,點亮下一個LED "<<"為左移位 if (P0 = 0x00)/當它全滅的時候,重新賦值 LED = 0xfe; / 0xfe = 1111 1110 /* 函 數 名 : Delay10ms* 函數功能 : 延時函數,延時10ms* 輸 入 : 無* 輸 出 : 無*/void Delay10ms(unsigned int c) /誤差 0us unsi

7、gned char a, b;/-c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 實 驗 名 : LED二進制加法顯示實驗* 實驗說明 : LED燈做右移跑馬燈* 連接方式 : 見接線圖* 注 意 : */-包含你要使用的頭文件#include <reg51.h>#include <intrins.h>/-聲明全局函數-/void Delay10ms(unsigned int c); /延時10ms/*

8、函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char LED;LED = 0xFE;while(1)P0 = LED;Delay10ms(50);LED = _crol_(LED,1); /循環右移1位,點亮下一個LED 此函數于庫函數/* 函 數 名 : Delay10ms* 函數功能 : 延時函數,延時10ms* 輸 入 : 無* 輸 出 : 無*/void Delay10ms(unsigned int c) /誤差 0us unsigned char a, b;/-c已經在傳遞過來的時候已經賦值了

9、,所以在for語句第一句就不用賦值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 實 驗 名 : 跑馬燈實驗* 實驗說明 : LED燈做跑馬燈左右移動* 連接方式 : 見接線圖* 注 意 : */-包含你要使用的頭文件#include <reg52.h>/-聲明全局函數-/void Delay10ms(unsigned int c); /延時10ms/-聲明一個全局變量-/unsigned char LED;/* 函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無*

10、 輸 出 : 無*/void main() unsigned char i; /-首先賦值LED-/LED = 0xFE;while (1) /-LED往左閃爍-/ for (i = 0 ;i < 7 ; i+) /-將LED 的值賦給P2口-/P0 = LED;Delay10ms(50); /延時一下,為了讓燈有持續點亮的時間LED = LED << 1; / 將LED里面的值左移一位,然后重新賦給LEDLED = LED | 0x01; / 移位后,前面的位為高電平/-LED向右顯示-/for (i = 0 ;i < 7 ; i+)P0 = LED;Delay10m

11、s(50);LED = LED >> 1; / 右移LED = LED | 0x80; / 移位后,后面的位為高電平 /* 函 數 名 : Delay10ms* 函數功能 : 延時函數,延時10ms* 輸 入 : 無* 輸 出 : 無*/void Delay10ms(unsigned int c) /誤差 0us unsigned char a, b;/-c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 實 驗 名 :

12、 獨立按鍵控制LED實驗* 實驗說明 : 每個按鍵控制一個LED* 連接方式 : 見接線圖* 注 意 : */-包含你要使用的頭文件-/#include <reg51.h> /此文件中定義了51的一些特殊功能寄存器#include <intrins.h>/-定義要使用的IO口-/#define GPIO_KEY P1 /獨立鍵盤用P1口#define GPIO_LED P0 /led使用P0口/-聲明全局函數-/void Delay10ms(unsigned int c); /延時10msunsigned char Key_Scan();/* 函 數 名 : main*

13、 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char ledValue, keyNum;ledValue = 0x01;while (1)keyNum = Key_Scan(); /掃描鍵盤switch (keyNum)case(0xFE) : /返回按鍵K1的數據ledValue = 0x01;break;case(0xFD) : /返回按鍵K2的數據ledValue = 0x02;break;case(0xFB) : /返回按鍵K3的數據ledValue = 0x04;break;case(0xF7) : /返回按鍵K4的數

14、據ledValue = 0x08;break;case(0xEF) : /返回按鍵K5的數據ledValue = 0x10;break;case(0xDF) : /返回按鍵K6的數據ledValue = 0x20;break;case(0xBF) : /返回按鍵K7的數據ledValue = 0x40;break;case(0x7F) : /返回按鍵K8的數據ledValue = 0x80;break;default:break;GPIO_LED = ledValue;/點亮LED燈/* 函 數 名 : Key_Scan()* 函數功能 : 掃描鍵盤* 輸 入 : 無* 輸 出 : 讀取到的鍵

15、值*/unsigned char Key_Scan()unsigned char keyValue = 0 , i; /保存鍵值/-檢測按鍵1-/if (GPIO_KEY != 0xFF)/檢測按鍵K1是否按下Delay10ms(1);/消除抖動if (GPIO_KEY != 0xFF)/再次檢測按鍵是否按下keyValue = GPIO_KEY;i = 0;while (i<50) && (GPIO_KEY != 0xFF) /檢測按鍵是否松開Delay10ms(1);i+;return keyValue; /將讀取到鍵值的值返回/* 函 數 名 : Delay10ms

16、* 函數功能 : 延時函數,延時10ms* 輸 入 : 無* 輸 出 : 無*/void Delay10ms(unsigned int c) /誤差 0us unsigned char a, b;/-c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 實 驗 名 : LED顯示鍵值實驗* 實驗說明 : 8個LED顯示讀取的8個按鍵的值* 連接方式 : 見接線圖* 注 意 : */-包含你要使用的頭文件-/#include <r

17、eg51.h> /此文件中定義了51的一些特殊功能寄存器#include <intrins.h>/-定義要使用的IO口-/#define GPIO_KEY P1 /獨立鍵盤用P1口#define GPIO_LED P0 /led使用P0口/-定義全局函數-/void Delay10ms(unsigned int c); /延時10msunsigned char Key_Scan();/* 函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char ledValue, keyNum;ledVa

18、lue = 0x00;while (1)keyNum = Key_Scan(); /掃描鍵盤if (keyNum != 0) /有按鍵按下ledValue = keyNum;GPIO_LED = ledValue;/點亮LED燈/* 函 數 名 : Key_Scan()* 函數功能 : 掃描鍵盤* 輸 入 : 無* 輸 出 : 讀取到的鍵值*/unsigned char Key_Scan()unsigned char keyValue = 0 , i; /保存鍵值/-檢測按鍵1-/if (GPIO_KEY != 0xFF)/檢測按鍵K1是否按下Delay10ms(1);/消除抖動if (GPI

19、O_KEY != 0xFF)/再次檢測按鍵是否按下keyValue = GPIO_KEY;i = 0;while (i<50) && (GPIO_KEY != 0xFF) /檢測按鍵是否松開Delay10ms(1);i+;return keyValue; /將讀取到鍵值的值返回/* 函 數 名 : Delay10ms* 函數功能 : 延時函數,延時10ms* 輸 入 : 無* 輸 出 : 無*/void Delay10ms(unsigned int c) /誤差 0us unsigned char a, b;/-c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不

20、用賦值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* * 普中科技-* 實 驗 名 : 按鍵選擇LED花樣顯示實驗* 實驗說明 : 每個按鍵控制選擇一種LED顯示效果* 連接方式 : 見接線圖* 注 意 : */-包含你要使用的頭文件-/#include <reg51.h> /此文件中定義了51的一些特殊功能寄存器#include <intrins.h>/-定義要使用的IO口-/#define GPIO_KEY P1 /獨立鍵盤用P1口#define GPIO_LED P0 /led使用

21、P0口/-定義全局函數-/void Delay10ms(unsigned int c); /延時10msunsigned char Key_Scan();void LED1();void LED2();void LED3();void LED4();void LED5();void LED6();void LED7();void LED8();/* 函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char keyNum;while (1)keyNum = Key_Scan(); /掃描鍵盤switch (k

22、eyNum)case(0xFE) : /返回按鍵K1的數據LED1();break;case(0xFD) : /返回按鍵K2的數據LED2();break;case(0xFB) : /返回按鍵K3的數據LED3();break;case(0xF7) : /返回按鍵K4的數據LED4();break;case(0xEF) : /返回按鍵K5的數據LED5();break;case(0xDF) : /返回按鍵K6的數據LED6();break;case(0xBF) : /返回按鍵K7的數據LED7();break;case(0x7F) : /返回按鍵K8的數據LED8();break;defaul

23、t:break;/* 函 數 名 : Key_Scan()* 函數功能 : 掃描鍵盤* 輸 入 : 無* 輸 出 : 讀取到的鍵值*/unsigned char Key_Scan()unsigned char keyValue = 0 , i; /保存鍵值/-檢測按鍵1-/if (GPIO_KEY != 0xFF)/檢測按鍵K1是否按下Delay10ms(1);/消除抖動if (GPIO_KEY != 0xFF)/再次檢測按鍵是否按下keyValue = GPIO_KEY;i = 0;while (i<50) && (GPIO_KEY != 0xFF) /檢測按鍵是否松開

24、Delay10ms(1);i+;return keyValue; /將讀取到鍵值的值返回/* 函 數 名 : Delay10ms* 函數功能 : 延時函數,延時10ms* 輸 入 : 無* 輸 出 : 無*/void Delay10ms(unsigned int c) /誤差 0us unsigned char a, b;/-c已經在傳遞過來的時候已經賦值了,所以在for語句第一句就不用賦值了-/ for (;c>0;c-)for (b=38;b>0;b-)for (a=130;a>0;a-); /* 函 數 名 : LED1* 函數功能 : LED左移閃爍兩次* 輸 入 :

25、 無* 輸 出 : 無*/void LED1()unsigned char i;GPIO_LED = 0x01;for (i=0; i<16; i+)GPIO_LED = _crol_(GPIO_LED, 1);Delay10ms(5);/* 函 數 名 : LED2* 函數功能 : LED右移閃爍兩次* 輸 入 : 無* 輸 出 : 無*/void LED2()unsigned char i;GPIO_LED = 0x80;for (i=0; i<16; i+)GPIO_LED = _cror_(GPIO_LED, 1);Delay10ms(5);/* 函 數 名 : LED3*

26、 函數功能 : LED交替閃爍* 輸 入 : 無* 輸 出 : 無*/void LED3()GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);/* 函 數 名 : LED4* 函數功能 : LED交替閃爍* 輸 入 : 無* 輸 出 : 無*/void LED4()GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Delay10ms(5);GPIO_LED = 0xaa;Delay10ms(5);/* 函 數 名 : LED5* 函數功能 : LED交替閃爍* 輸 入 : 無* 輸 出 : 無*/void LED5()GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);/* 函 數 名 : LED6* 函數功能 : LED交替閃爍* 輸 入 : 無* 輸 出 : 無*/void LED6()GPIO_LE

溫馨提示

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

最新文檔

評論

0/150

提交評論