普中單片機例程_第1頁
普中單片機例程_第2頁
普中單片機例程_第3頁
普中單片機例程_第4頁
普中單片機例程_第5頁
已閱讀5頁,還剩124頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、一、8個獨立按鍵控制8個LED實驗2二、LED顯示鍵值實驗5三、按鍵選擇LED花樣顯示實驗7四、按鍵選擇LED燈左右移動實驗14五、LED顯示譯碼器輸出值17六、動態(tài)數碼管顯示數字(不帶譯碼器)19七、動態(tài)數碼管顯示數字(帶譯碼器)21八、動態(tài)顯示數碼管實驗(交通燈)23九、DA輸出實驗28十、電位器AD值31十一、光敏電阻AD值33十二、熱敏電阻AD值34十三、外部電阻AD輸出值36十四、繼電器實驗試驗38十五、C51音樂程序(八月桂花)39十六、LED點陣數字倒計時42十七、LED點陣顯示漢字49十八、使用C語言指針顯示漢字56十九、漢字縱向移動顯示59二十、步進電機試驗一(雙極性步進電機

2、)62二十一、步進電機試驗二(雙四拍方式)65二十二、步進電機試驗三(半步八拍)67二十三、步進電機試驗四(采用2細分)71二十四、TC1117-四線雙極性電機74二十五、LCD1602顯示鍵值75二十六、動態(tài)數碼管按鍵移動顯示試驗79二十七、矩陣鍵盤顯示試驗83二十八、12、單片機IO擴展一861、 74H165顯示試驗862、試驗74HC595驅動數碼管上顯示數字(C語言)873、74H595顯示試驗90二十九、單片機IO擴展二921、試驗74HC595驅動8位LED燈(C語言)922、試驗74HC595驅動數碼管上顯示數字(C語言)943、學習板的按鈕輸入控制對應的繼電器輸出和LED燈9

3、6三十、實時時鐘DS1302991、LCD1602顯示時鐘992、數碼管顯示時鐘102三十一、溫度傳感器DS18B201051、LCD1602顯示+串口接收溫度1052、LCD1602顯示溫度1083、數碼管顯示溫度111三十二、動態(tài)數碼管按鍵移動顯示試驗114三十三、中斷1181、試驗數碼管上顯示外部中斷計數1182、試驗數碼管上顯示定時器中斷計數1213、計數器中斷實驗1244、試驗定時中斷1使 蜂鈴器發(fā)聲(C語言)1255、試驗1位數碼管上顯示外部中斷計數127一、8個獨立按鍵控制8個LED實驗* 實驗說明 : 每個按鍵控制一個LED* 連接方式 : 見接線圖* 注 意 : */-包含你

4、要使用的頭文件-/#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* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char

5、 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的數據ledValue = 0x08;break;case(0xEF) : /返回按鍵K5的數據ledValue = 0x

6、10;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()* 函數功能 : 掃描鍵盤* 輸 入 : 無* 輸 出 : 讀取到的鍵值*/unsigned char Key_Scan()unsigned char keyValue = 0 , i;

7、/保存鍵值/-檢測按鍵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* 函數功能 : 延時函數,延時10ms* 輸 入 : 無* 輸 出 : 無*/void Delay10ms(unsi

8、gned 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 <reg51.h> /此文件中定義了51的一些特殊功能寄存器#include <intrins.h>/-定義要使用的IO口-/#define

9、 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;ledValue = 0x00;while (1)keyNum = Key_Scan(); /掃描鍵盤if (keyNum != 0) /有按鍵按下ledValue

10、 = 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 (GPIO_KEY != 0xFF)/再次檢測按鍵是否按下keyValue = GPIO_KEY;i = 0;while (i<50) &&

11、 (GPIO_KEY != 0xFF) /檢測按鍵是否松開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-); 三、按鍵選擇LED花樣

12、顯示實驗* 實驗說明 : 每個按鍵控制選擇一種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();void LED1();void L

13、ED2();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 (keyNum)case(0xFE) : /返回按鍵K1的數據LED1();break;case(0xFD) : /返回按鍵K2的數據LED2();break;case(0xFB) : /返回按

14、鍵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;default:break;/* 函 數 名 : Key_Scan()* 函數功能 : 掃描鍵盤* 輸 入 : 無* 輸 出 : 讀取到的鍵值*/unsigned char Key_Scan()unsi

15、gned 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* 函數功能 : 延時函數,延時10ms* 輸 入 : 無*

16、輸 出 : 無*/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左移閃爍兩次* 輸 入 : 無* 輸 出 : 無*/void LED1()unsigned char i;GPIO_LED = 0x01;for (i=0; i<16; i+)GPIO_LED = _crol_

17、(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* 函數功能 : LED交替閃爍* 輸 入 : 無* 輸 出 : 無*/void LED3()GPIO_LED = 0xaa;Delay10ms(5);GPIO_LED = 0x55;Dela

18、y10ms(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

19、 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_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5);GPIO_LED = 0x33;Delay10ms(5);GPIO_LED = 0xCC;Delay10ms(5)

20、;/* 函 數 名 : LED7* 函數功能 : LED1到LED6來一遍* 輸 入 : 無* 輸 出 : 無*/void LED7()LED1();LED2();LED3();LED4();LED5();LED6();/* 函 數 名 : LED8* 函數功能 : 全滅* 輸 入 : 無* 輸 出 : 無*/void LED8()GPIO_LED = 0x00;四、按鍵選擇LED燈左右移動實驗* 實驗說明 : 按鍵選擇LED燈左右移動* 連接方式 : 見接線圖* 注 意 : */-包含你要使用的頭文件-/#include <reg51.h> /此文件中定義了51的一些特殊功能寄存

21、器#include <intrins.h>/-定義要使用的IO口-/sbit K1 = P10;/對應按鈕K1sbit K2 = P11;/對應按鈕K2#define GPIO_LED P0 /led使用P0口/-定義全局函數-/void Delay10ms(unsigned int c); /延時10msunsigned char Key_Scan();/* 函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char ledValue, keyNum;ledValue = 0x01;while

22、(1)keyNum = Key_Scan(); /掃描鍵盤if (keyNum = 1) /如果鍵值返回1ledValue = _crol_(ledValue, 1);/左循環(huán)else if (keyNum = 2)ledValue = _cror_(ledValue, 1);/右循環(huán)GPIO_LED = ledValue;/點亮LED燈/* 函 數 名 : Key_Scan()* 函數功能 : 掃描鍵盤* 輸 入 : 無* 輸 出 : 讀取到的鍵值*/unsigned char Key_Scan()unsigned char keyValue = 0 , i; /保存鍵值/-檢測按鍵1-/i

23、f (K1=0)/檢測按鍵K1是否按下Delay10ms(1);/消除抖動if (K1=0)/再次檢測按鍵是否按下keyValue = 1;i = 0;while (i<50) && (K1=0) /檢測按鍵是否松開Delay10ms(1);i+;/-檢測按鍵2-/if (K2=0)/檢測按鍵K1是否按下Delay10ms(1);/消除抖動if (K2=0)/再次檢測按鍵是否按下keyValue = 2;i = 0;while (i<50) && (K2=0) /檢測按鍵是否松開Delay10ms(1);i+;return keyValue; /將讀

24、取到鍵值的值返回/* 函 數 名 : 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-); 五、LED顯示譯碼器輸出值* 實驗說明 : 8個LED燈顯示譯碼器輸出電平* 連接方式 : 見連接圖* 注 意 : */#include<reg5

25、1.h>/-定義要使用的IO口-/sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;/-聲明全局函數-/void Delay10ms(unsigned int c); /誤差 0us/* 函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char i = 0;while(1)switch(i) /位選,選擇點亮的數碼管,case(0):LSA=0;LSB=0;LSC=0; break;/顯示第0位case(1):LSA=1;LSB=0;LSC=0; break;/顯示第1位c

26、ase(2):LSA=0;LSB=1;LSC=0; break;/顯示第2位case(3):LSA=1;LSB=1;LSC=0; break;/顯示第3位case(4):LSA=0;LSB=0;LSC=1; break;/顯示第4位case(5):LSA=1;LSB=0;LSC=1; break;/顯示第5位case(6):LSA=0;LSB=1;LSC=1; break;/顯示第6位case(7):LSA=1;LSB=1;LSC=1; break;/顯示第7位Delay10ms(50);i+;if(i = 8)i = 0;/* 函 數 名 : Delay10ms* 函數功能 : 延時函數,延

27、時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-); 六、動態(tài)數碼管顯示數字(不帶譯碼器)* 實驗說明 : 8位數碼管顯示07* 連接方式 : 見連接圖* 注 意 : */#include<reg51.h>/-定義使用的IO口-/#define GPIO_DIG P0/段選#de

28、fine GPIO_PLACE P2/位選/-定義全局變量-/unsigned char code DIG_PLACE8 = 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/位選控制 查表的方法控制unsigned char code DIG_CODE17 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼unsigned char DisplayData8;/用來存放要顯示的

29、8位數的值/-聲明全局函數-/void DigDisplay(); /動態(tài)顯示函數/* 函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char i;for(i=0; i<8; i+)DisplayDatai = DIG_CODEi;while(1)DigDisplay();/* 函 數 名 : DigDisplay* 函數功能 : 使用數碼管顯示* 輸 入 : 無* 輸 出 : 無*/void DigDisplay()unsigned char i;unsigned int j;for(i=0; i

30、<8; i+)GPIO_PLACE = DIG_PLACEi; /發(fā)送位選GPIO_DIG = DisplayDatai; /發(fā)送段碼j = 10; /掃描間隔時間設定while(j-);GPIO_DIG = 0x00;/消隱七、動態(tài)數碼管顯示數字(帶譯碼器)* 實驗說明 : 8位數碼管顯示07* 連接方式 : 見連接圖* 注 意 : */#include<reg51.h>/-定義使用的IO-/#define GPIO_DIG P0sbit LSA=P22;sbit LSB=P23;sbit LSC=P24;/-定義全局變量-/unsigned char code DIG_C

31、ODE17=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼unsigned char DisplayData8;/用來存放要顯示的8位數的值/-聲明全局函數-/void DigDisplay(); /動態(tài)顯示函數/* 函 數 名 : main* 函數功能 : 主函數* 輸 入 : 無* 輸 出 : 無*/void main(void)unsigned char i;for(i=0;i<8;i+)Displ

32、ayDatai=DIG_CODEi;while(1)DigDisplay();/* 函 數 名 : DigDisplay* 函數功能 : 使用數碼管顯示* 輸 入 : 無* 輸 出 : 無*/void DigDisplay()unsigned char i;unsigned int j;for(i=0;i<8;i+)switch(i) /位選,選擇點亮的數碼管,case(0):LSA=0;LSB=0;LSC=0; break;/顯示第0位case(1):LSA=1;LSB=0;LSC=0; break;/顯示第1位case(2):LSA=0;LSB=1;LSC=0; break;/顯示第2位case(3):LSA=1;LS

溫馨提示

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

評論

0/150

提交評論