單片機(jī)程序源代碼_第1頁
單片機(jī)程序源代碼_第2頁
單片機(jī)程序源代碼_第3頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第二章 任務(wù)一:閃爍廣告燈的設(shè)計(jì) 利用89c51單片機(jī)的端口控制兩個(gè) LED (DO和D1),編寫程序,實(shí)現(xiàn)兩個(gè) LED互閃。#include<reg52.h>#define uint unsigned int八defi ne uchar un sig ned charsbit LED1=PO AO;sbit LED2=PO A1;void delayms(uint ms)uint i;v/hile(ms-)(for(i=O;i<12O;i+);)void main()(while LED1=O;LED2=1;delayms(5OO);LED1=1;LED2=O;delaym

2、s(5OO); 任務(wù)二:流水廣告燈的設(shè)計(jì)利用89c51單片機(jī)的端口控制8個(gè)LED (D0-D7)循環(huán)點(diǎn)亮,剛開始時(shí)DO點(diǎn)亮,延時(shí)片刻 后, 接著 D1 點(diǎn)亮, 然后依次點(diǎn)亮 D2->D3->D4->D5 ->D6->D7, 然后再點(diǎn)亮 D7->D6->D5->D4? >D3? >D2? >D1? >DO, 重復(fù)循環(huán)。#include<reg52.h>八in clude vintrin s.h>Adefi ne uint un sig ned intAdefi ne uchar un sig ned cha

3、ruint i;uchar temp;uint a8 =Oxfe,Oxfd,Oxfb,Oxf7,Oxef,Oxdf,Oxbf,Ox7f;void delayms(uint ms)vvhile(ms-) uint j;for(j=O;jv12O;j+);)void main()while P0=0xfe;v/hile(P0!=0x7f)/P1=temp;delayms(500);PO=_crol_(PO,1); delayms(250);temp=0x7f;v/hile(PO!=Oxfe)P0=temp; delayms(500); temp=_cror_(temp,1);任務(wù)三:拉幕式與閉幕式

4、廣告燈的設(shè)計(jì)利用 89c51 單片機(jī)的 P0 端口實(shí)現(xiàn) 8 個(gè) LED D0D7 的拉幕式與閉幕式廣告燈設(shè)計(jì)。拉幕式:開始 D0-D7 全火,延時(shí)片刻后首先 D3 和 D4 亮,其次是 D2 和 D5 亮,再是 D1 和 D6 亮,最后是 DO 和 D7 亮。閉幕式:開始 D0D7 全亮,延時(shí)片刻后首先 DO 和 D7 滅,其次是 D1 和 D6 火,再是 D2 和 D5 滅,最后是 D3 和 D4 滅。#include<reg52.h>八defi ne uint un sig ned int八defi ne uchar un sig ned charuchar code tabl

5、e=(0xe7,0xc3,0x81,0x00);void delay(uint x)uint i J;for(i=x;i>0;i-) for(j=120;j>0;j-); void main()uint i;v/hile(1)P1=0xff; delay(500); for(i=0;i<4;i+)P1=tablei;delay(500);for(i=3;i>0;i-)P1=tablei-1; delay(500);)任務(wù)四:復(fù)雜廣告燈的設(shè)計(jì)向流利用 89c51 單片機(jī)的端口實(shí)現(xiàn) 8個(gè) LED (D0-D7) 復(fù)雜廣告燈的控制,要求顯示規(guī)律為:正 水->反向流水 -

6、>隔燈閃爍 3 次->高四盞、低四盆閃爍 2 次->隔兩盞閃爍 3 次,再重復(fù)循 環(huán) #include reg52 ? h>八defi ne uint un sig ned int#include<intrins.h> void delayms(uint ms)uint i;v/hile(ms-)for(i=0;i<110;i+);void main()uint i,j,xx2=(0xaa,0xff),yy2 =(Oxf0,OxOf),zz2 =(0xb6,Oxff); unsigned char aa;v/hile(1)(aa=Oxfe; for(i

7、=0;i<7;i+)P0=aa;aa=_crol_(aa,1); delayms(500);for(i=0;1<8;i+)PO=aa;aa=_cror_(aa,1); delayms(500);for(i=0;i<3;i+) for(j=0;j<2;j+) PO=xxj; delayms(500); for(i=0;i<2;i+) for(j=0;j<2;j+)po=yyj; delayms(500);for(i=0;i<3;i+) for(j=0;j<2;j+)PO=zzj; delayms(500);09 的) 任務(wù)五:?jiǎn)蝹€(gè) LED 數(shù)碼管顯

8、示設(shè)計(jì) 使用 89c51 的 P0 口作為輸出口,外接 LED 數(shù)碼管,編寫程序,使數(shù)碼管循環(huán)顯示從 加 1 計(jì)數(shù)。#1nclude<reg52.h>八defi ne uint un sig ned int#define uchar unsigned charuchar table10=( 0XC0,0XF9,0XA4,0XB0, 0X99,0X92,0X82,0XF8, 0X80,0X90);uint key=0;void intjnt()EA=1;IT0=1;EX0=1;void count_num() interrupt 0 if(key=9)key=0; else key+

9、;void main()intjnt();while (PO=tablekey;任務(wù)六:多個(gè) LED 數(shù)碼管顯示設(shè)計(jì)使用單片機(jī) P0 和 P2 口作為輸出口,外接一個(gè) 8 位 LED 數(shù)碼管,編寫程序,使數(shù)碼管顯示 “ 872AF635氣#include<reg52.h> #include<intrins.h>八defi ne uint un sig ned int八defi ne uchar un sig ned chardelay(ms)while(ms ?) int i;for(i=0;i<110;i+);)main()uchara16 =0xc0,0xf9

10、,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6, Oxa 1,0x86, 0x8e);uchar b8 =(0x08,0x07,0x02,0x0a,OxOf,0x06,0x03,0x05),j;uint i;while j=OxO1;for(i=0;i<8;i+)P2=j;PO=abi;j=_crol_(j,1) ;.wddelay ;)任務(wù)七:查詢式按鍵設(shè)計(jì)將 8 個(gè)按鍵從仆 8 進(jìn)行編號(hào),如果其中一個(gè)鍵被按下,則在 LED 數(shù)碼管上顯示相應(yīng)的鍵值。 #include<reg52.h>Adefi ne uint

11、 un sig ned intAdefi ne uchar un sig ned charmain()uchara 16 =OxcO, Oxf 9,0xa4, OxbO,0x99,0x92,0x82, Oxf8,0x80,0x90,0x88,0x83,0xc6, Oxa 1, 0x86, 0x8e);PO=Oxff;v/hile(PO!=Oxff) switch(PO)case Oxfe:P2=a1; break;case Oxfd:P2=a2; break;case Oxfb:P2=a3; break;case 0xf7:P2=a4; break;case Oxef:P2=a5; break

12、;case Oxdf:P2=a6; break;case Oxbf:P2=a7; break;case 0x7f:P2=a8;)任務(wù)八: LED 數(shù)碼管顯示矩陣鍵盤按鍵的設(shè)計(jì)設(shè)計(jì)一個(gè) 4*4 的矩陣鍵盤 , 以 P1.0-P1.3 作為行線 , 以 P1.4-P1.7 作為列線。要求:未按下 按鍵時(shí), LED 數(shù)碼管顯示按下按鍵時(shí),在數(shù)碼管上顯示相應(yīng)的鍵值。#include<reg52.h>八defi ne uchar un sig ned char八defi ne uint un sig ned intuchartable17=(0xbf,0xc0,0xf9,0xa4,0xb0,

13、0x99,0x92,0x82,Oxf8,0x80,0x90,0x88,0x83,0xc6,0 xa1,0x86,0x8e);uint num=O;void delay(uint x)uchar i,j;for(i=x;i>0;i ? -) for(j=120;j>0;j-);keyscan() uint temp;temp=P2;temp&=0x0f;if(temp=0x0e)P2=OxfO; temp=P2; temp&=0xf0;svvitch(temp)case 0xe0:num=1;break;case 0xd0:num=2;break;case 0xb0:

14、num=3;break;case 0x70:num=4;)if(temp=0x0d)P2=OxfO;temp=P2;temp&=OxfO; svvitch(temp)case 0xe0:num=5;break;case 0xd0:num=6;break;case 0xb0:num=7;break;case 0x70:num=8;) if(temp=0x0b)P2=OxfO;temp=P2; tempft=OxfO;switch(temp)case 0xe0:num=9;break;case OxdO:num=1O;break; case OxbO:num=11 ;break; case

15、 0x70:num=12; ) if(temp=0x07)P2=OxfO;temp=P2; tempft=OxfO;switch(temp)case OxeO:num=13;break;case OxdO:num=14;break; case 0xb0:num=15;break; case 0x70:num=16;return num;void display(uint num) if(num=0)PO=Oxbf;PO=tablenum;main()uint temp;while P2=OxOf;temp=P2; if(temp!=OxOf) keyscan(); display(num);)

16、(2) #include<reg52.h>八defi ne uchar un sig ned char八defi ne uint un sig ned intsbit LED1=P2 A0;sbit LED2=P2 A1;uchar num;uchar code LED_code=0x80,0x90,0x88,0x83,OxcO, 0xf9,0xa4, OxbO, 0x99,0x92,0x82, Oxf8, 0xc6,0xa1,0x86,0x8e; 數(shù)碼管字形碼編碼void delay(uint x)uchar i,j;for(i=x;i>0;i-) for(j=120;j&

17、gt;0;j-); 延時(shí)函數(shù)void display(uchar num)PO=LED_codenum; 數(shù)碼管顯示函數(shù)void keyscan() 鍵盤掃描函數(shù)uchar temp;P1 =Oxfe; /key 1 -key4 第一行按下 temp=P1; tempft=OxfO;if(temp!=OxfO)temp&=0xf0; if(temp!=OxfO)temp=P1; switch(temp)case Oxee:num=1; break; case Oxde: num=2; break; case Oxbe: num=3;break;case 0x7e:num=4;break

18、;vhile(temp!=OxfO) 等待按鍵釋放temp=P1; tempft=OxfO;P1 =Oxfd;/key5-key8 第二行按下 temp=P1; tempft=OxfO;if(temp!=OxfO)delay(10);/ 消除抖動(dòng) temp=P1;temp&=OxfO; if(temp!=OxfO)temp=P1;switch(temp)case Oxed:num=5;break;case Oxdd:num=6;break;case Oxbd:num=7;break;case 0x7d:num=8;break;vhile(temp!=OxfO) 等待按鍵釋放 temp=

19、P1; tempft=OxfO;P1 =Oxfb; / /key9-key12 第三行按下 temp=P1; tempft=OxfO;if(temp!=OxfO)delay(10);/ 消除抖動(dòng) temp=P1; temp&=OxfO;if(temp!=OxfO) temp=P1; switch(temp)case Oxeb: num=9; break;case Oxdb: num=10; break;case Oxbb: num=11; break;case 0x7b: num=12; break;v/hile(temp!=OxfO)/ 等待按鍵釋放 temp=P1; temp&am

20、p;=0xf0;P1 =Oxf7;/key 13-key 16 第四行按下 temp=P1; temp&=OxfO;if(temp!=OxfO)(delay(1O);/ 消除抖動(dòng) temp=P1; temp&=OxfO; if(temp!=OxfO)switch(temp) (case 0xe7:num=13; break;case 0xd7:num=14; break;case 0xb7: num=15; break;case 0x77: num=16; break;vhile(temp!=0xf0)/ 等待按鍵釋放temp=P1; tempft=0xf0;void main

21、()v/hile(1)keyscan();if(num=0)PO=Oxbf;elsedisplay(num-l);任務(wù)九:簡(jiǎn)單撥號(hào)鍵盤的設(shè)計(jì)時(shí),使用 4*4 的矩陣式鍵盤及 8 位共陽極 LED 數(shù)碼管設(shè)計(jì)一個(gè)簡(jiǎn)單撥號(hào)鍵盤,要求在初始狀態(tài)8 位數(shù)碼管均顯示“ ?氣每按下一個(gè)號(hào)碼后,原 8 位 LED 數(shù)碼管顯示的內(nèi)容向左移動(dòng) 1 位。 #include<reg52.h>#include<intrins.h>八defi ne uint un sig ned int八defi ne uchar un sig ned charuchar keycount=0,num;ucha

22、r code LED1_code=OxcO, 0xf9,0xa4 ,OxbO,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e; 數(shù)碼管字形碼編碼段共陽數(shù)碼管編碼ucharuchar LED2_duan8=(0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf;/8 LED2_wei8= (0x80,0x40,0x20,Ox10,0x08,0x04,0x02,0x01); void delay(uint x)uchar i,j;for(i=x;i>0;i-) for(j=120;j>0

23、;j-);void displayOuchar i;/P2=0x80;for(i=0;i<8;i+) P2=LED2_weii; P0=LED2_duan7-i;delay ;void keyscan()uchar temp;P3=0xfe;temp=P3; tempft=OxfO; if(temp!=OxfO)delay(10);temp=P3; temp&=0xf0; if(temp!=OxfO)temp=P3; switch(temp) case Oxee:keycount+;num=0;break;case 0xde:keycount+;num=1;break;case

24、Oxbe:keycount+;num=2;break;case Ox7e:keycount+;num=3;break;vhile(temp!=OxfO)tempft=OxfO;P3=0xfd;temp=P3; tempft=OxfO; if(temp!=OxfO)delay(10);temp=P3;tempft=OxfO;if(temp!=OxfO)temp=P3;switch(temp)case Oxed: keycount+;num=4; break;case Oxdd:keycount+;num=5;break;case 0xbd:keycount+;num=6;break;case 0

25、x7d:keycount+;num=7;break; v/hile(temp!=OxfO)temp=P3;temp&=OxfO;P3=Oxfb;temp=P3; tempft=OxfO; if(temp!=OxfO)(delay(1O);temp=P3;temp&=OxfO;if(temp!=OxfO)temp=P3;switch(temp) case Oxeb:keycount+;num=8;break;case 0xdb:keycount+;num=9;break;case 0xbb:keycount+;num=10;break;case 0x7b:keycount+;nu

26、m=11;break; vhile(temp!=OxfO)temp=P3; tempft=OxfO;P3=0xf7;temp=P3; tempft=OxfO; if(temp!=OxfO)delay(10);temp=P3; temp&=OxfO; if(temp!=OxfO)temp=P3;switch(temp)(case 0xe7:keycount+;num=12;break; case 0xd7:keycount+;num=13;break; case 0xb7:keycount+;num=14;break; case 0x77:keycount+;num=15;break;

27、whHe(temp!=OxfO)temp=P3; temp&=OxfO;void main()uchar i;v/hile(1) display(); keyscan(); if(keycount!=0)for(i=0;i<7;i+) LED2_duani=LED2_duani+1;LED2_duan7=LED1_codenum; keycount=0;第五章 任務(wù)一:帶中斷控制的 LED 花樣燈P0端口作為輸出口,外接 8只LED, P3.2外接按鍵K編寫程序,當(dāng)K未按下時(shí),8只LED進(jìn) 行默認(rèn)顯示,其顯示規(guī)律為左移流水 ->右移流水-> 隔燈閃爍3次花樣顯示:如果

28、按下 K鍵后, 8 只 LED 暫停默認(rèn)顯示,而進(jìn)行閃爍顯示,當(dāng)顯示達(dá)到 5 次后,繼續(xù)按默認(rèn)規(guī)律顯示。#include<reg52.h>八defi ne uint un sig ned int八defi ne uchar un sig ned charuintLED_table14=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd ?void delayms(uint ms)uint i;v/hile(ms-)for(i=0;i<120;i+);void intjnt()EA=1;EX

29、O=1;IT0=1;)void LED_shan() interrupt 0 uint k;for(k=0;k<5;k+)PO=Oxaa; delayms(500); PO=Oxff; delayms(500);void main()intjnt();v/hile(1)uint i;for(i=0;i<14;i+)PO=LED_tablei; delayms(500);for(i=0;i<3;i+)PO=Oxaa; delayms(500); PO=Oxff; delayms(500);)任務(wù)二: 采用外中斷控制的條形 LED 彩燈設(shè)計(jì)PO 端口作為輸出口,外接條形 LED

30、。編寫程序,當(dāng)按鍵 K 未按下時(shí), LED 進(jìn)行循環(huán)左移顯 示。如果第1次按下按鍵K后,LED進(jìn)行循環(huán)右移顯示。如果第 2次按下按鍵K后丄ED進(jìn)行 拉幕式與閉幕式花樣顯示。如果第 3 次按下按鍵 K 后,又恢復(fù)循環(huán)左移顯示。八in elude <reg52.h>unsigned char flag=O;狀態(tài)標(biāo)志位unsigned char led =0;/LED 映射位unsigned char table=(花樣數(shù)組0x00,0x81,0xc3,0xe7,0xff,0xe7,0xc3,0x81; 先閉幕式再開幕式void delayms(unsigned int ms);/ 延時(shí)

31、函數(shù) 系統(tǒng)初始化/ 狀態(tài) 0狀態(tài) 1狀態(tài) 2void syslnit(void); void stepO(void); void step 1 (void); void step2(void);void main(void)syslnit(); 初始化系統(tǒng)v/hile(1)switch (flag)PO = -led; delayms(500);case 0: stepO();break; case 1: step1();break; case 2: step2();break; default: break;將 led 值映射到 LED 燈延時(shí) 500msvoid delayms(unsig

32、ned int ms)unsigned char i;for (;ms;ms-)for (i=110;i;i-);void syslnit(void)EX0 = 1; / 打開外部中斷 0EA =1; 打開總中斷IT0= 1; 外部中斷 0 下降沿觸發(fā)void stepO(void)led ?=1;左移if (led=0)溢出處理led = 0x01;void step 1 (void)led ?=1;右移if (led=0)溢出處理led = 0x80;void step2(void)static char t;led = tablet+; 開幕閉幕花樣顯示 if (t=8) t = 0;外

33、部中斷。服務(wù)函數(shù)/ 宏定義開幕式閉幕式編碼void EX_O() interrupt 0flag+;if (flag=3) flag = 0;(2) #1nclude<reg52.h>/ 頭文件 八defi ne uchar un sig ned char 八defi ne uint un sig ned int uchar temp,key_count;uchar code tab=( 0x00,0x81,0xc3,0xe7, 0xff,0xe7,0xc3,0x81);void delay(uint ms)延時(shí)子函數(shù)uint i,j;for(i=ms;i>0;i-) for

34、(j=0;j<110;j+);void loop_leftmove()temp=temp<<1;if(temp=0) temp=0x01;void loop_rightmove()temp=temp>>1;if(temp=0) temp=0x80;void open_close()uchar count; temp=tabcount; count+;if(count>=8) count=0;void init()EA=1;EXO=1;IT0=1; temp=0;key_count=0;void main()init();while sv/itch(key_c

35、ount)case O:loop_leftn 】 ove();break;case 1 :loop_rightmove();break;case 2:open_close(); break; default: break;P0=-temp; delay(250);void keyjnterrupt() interrupt 0 外部中斷 INTO 中斷服務(wù)程序key_count+;key_count%=3;/*if(key_count=3)key_count=0;*/任務(wù)三:采用兩個(gè)外中斷的 LED 彩燈控制P0端口作為輸出口,外接 8只LED, P3.2外接按鍵K1, P3.3外接按鍵K2。編

36、寫程序,沒 有 按下任何按鍵時(shí), LED 隔燈閃爍,當(dāng)按鍵 K1 為奇數(shù)次時(shí), LED 進(jìn)行左移流水 -> 右移流水 顯 示。當(dāng)按下按鍵 K1 為偶數(shù)次時(shí), LED 進(jìn)行拉幕式顯示:當(dāng)按下按鍵 K2 時(shí), LED 暫停顯示 , 蜂 鳴器發(fā)出“叮咚”的開門聲音,然后 LED 繼續(xù)花樣顯示 (K2 按鍵優(yōu)先 )。#include<reg52.h>#include<intrins.h>八defi ne uchar un sig ned char八defi ne uint un sig ned intsbit key1=P3 A2;sbit key2=P3 A3;sbit

37、 beep=P1 A0; uchar code tab= 0xff,0xe7,0xc3,0x81, 0x00,0x81,0xc3,0xe7; 開幕式編碼 uchar temp=0x01,key_count,flag,right,beep_FG; void delay(uint ms)uint ij; for(i=ms;i>0;i-) for(j=110;j>0;j-);void init()EA=1;/ 打開總中斷EX0=1;/ 打開外部中斷 INTOEX1=1;/ 打開外部中斷 INT1 IT0=1;/ 下降沿觸發(fā)方式IT1=1; 下降沿觸發(fā)方式PXO=O;/ 設(shè)置 INTO 為

38、低中斷優(yōu)先級(jí)PX1=1;/ 設(shè)置 INT1 為高中斷優(yōu)先級(jí)void interval_LED()PO=Oxff; delay(500); P0=0xaa; delay(500);void left_right_niove()if(!right)temp=_crol_(tenip, 1); elsetemp=_cror_(temp,1);if(temp=0x01)right=O; if(temp=0x80) right=1; void open_LED() uchar count; temp=tabcount+; if(count=8)count=0;void Beep()ucharfor(i=

39、100;i;i ? ) for(j=20;j;j-)(for(k=1000;k;k-) beep=-beep;/*for(i=100;i;i-)for(j=200;j;j-)for(k=1000;k;k-)beep=-beep;*/beep_FG=O;void main()init();beep=0;while if(!flag) interval_LED();elseif(beep_FG)Beep();elseswitch (key_count%2) case 1:left_right_move();break;/ 奇數(shù)次按鍵左移右移顯示 case 0:open_LED();break;/

40、偶數(shù)次按鍵拉幕式顯示default: break;P0=-temp; delay(400);void key1 Jnterrupt() interrupt 0 flag=1;key_count+;void key2Jnterrupt() interrupt 2flag=1;beep_FG=1; 任務(wù)四:采用兩個(gè)外中斷實(shí)現(xiàn) LED 鍵控移位P0 端口作為輸出口,外接 8 只 LED, P3.2 外接按鍵 K1, P3.3 外接按鍵 K2 。編寫程序,要 求 實(shí)現(xiàn) LED 鍵控移位,按下按鍵 K1 時(shí),8只 LED 左移 1 位;按下按鍵 K2 時(shí),8 只 LED 右 移 1 位。#include

41、<reg52.h> #include<intrins.h>八defi ne uint un sig ned int八defi ne uchar un sig ned charuchar key1 =0,key2=0,tempi =0,temp2=0,tempi 1 =0,tempi 2=0;/*void delayms(uint ms)uint i;v/hile(ms-)for(i=0;i<120;i+);*/void intjnt()EA=1;EX0=1;EX1=1;IT0=1;IT1=1;void intO() interrupt 0key1+;void in

42、t1() interrupt 2key2+;void main()uchar a; intjnt(); a=0xfe; vhile(1)if(temp1 !=key1)PO = a; a=_crol_(a,1); tempi =key1;if(temp2!=key2)PO = a; a=_cror_(a,1); key2=temp2;(2)#include<reg52.h>八defi ne uint un sig ned int八defi ne uchar un sig ned charuchar key1 =0,key2=0,m,n,k;uchar table=0xfe,0xfd

43、,0xfb,0xf7,0xef,0xdf,0xbf,0x7f);void intjnt()EA=1;EXO=1;IT0=1;EX1=1;IT1=1;void intO() interrupt 0key1+;m=key1%8;void int2() interrupt 2key2+;n=key2%8;void main()intjnt();while (k=(m-n+8)%8;PO=tablek;任務(wù)五:采用外中斷實(shí)現(xiàn)計(jì)數(shù)K1, P3.3 外K2 時(shí),使用單片機(jī) PO、P2 端口作為輸出口,外接一個(gè) 2 位 LED 數(shù)碼管, P3.2 外接按鍵 接按鍵K2。編寫程序,每次按下 K1時(shí),LED數(shù)碼

44、管進(jìn)行加1顯示:每次按下按鍵 LED 數(shù)碼管進(jìn)行減 1 顯示,計(jì)數(shù)范圍為 099 。#1nclude<reg52.h>/ 頭文件八define uint unsigned int / 宏定義八defi ne uchar un sig ned char / 宏定義uchar table =(0xc0,Oxf9,0xa4,OxbO,0x99,0x92,0x82,Oxf8,0x80,0x90);/0-9 共陽字型碼編碼char count=0;uchar shi,ge;void LED_scan() 數(shù)碼管掃描子函數(shù)shi=count/10; 分離十位ge=count%10; 分離個(gè)位P

45、2=tablege;/ 顯示個(gè)位PO=tableshi;/ 顯示十位void intjnt() 初始化EA=1;EX0=1JEX1=1打開總中斷/ 打開外部中斷 0/ 打開外部中斷 1IT0=1;設(shè)置下降沿觸發(fā)方式IT 1=1; void mai n()/設(shè)置下降沿觸發(fā)方式/主函數(shù)intjn t(); while 調(diào)用初始化函數(shù)LED_sca n(); 調(diào)用數(shù)碼管掃描函數(shù) void intO() interrupt 0外部中斷0服務(wù)程序cou nt+;計(jì)數(shù)加 1if(count=100)/ 溢出操作count=0; void int2() interrupt 2外部中斷 1 服務(wù)程序cou n

46、t-;計(jì)數(shù)減 1if(count<0)/ 溢出操作count=99; (2)#include<reg52.h> / 頭文件八defi ne uint un sig ned int宏定義八define uchar unsigned char / 宏定義 uchar table 卜0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90);/0-9共陽字型碼編碼char cou nt=0;uchar shi,ge;void delay(ui nt ms) 延時(shí)子函數(shù) uchar i;for(;ms;ms- ?)for(i=120;i;i

47、-);void LED_scan()數(shù)碼管掃描子函數(shù)shi=count/10; 分離十位ge=count%10; / / 分離個(gè)位P2=0x01;個(gè)位對(duì)應(yīng)的數(shù)碼管點(diǎn)亮PO=tablege; 顯示個(gè)位delay ;P2=OxO2;十位對(duì)應(yīng)的數(shù)碼管點(diǎn)亮Portable shi;/ 顯示十位 delay (1);)void intjn t()初始化EA=1;打開總中斷EX0=1;/打開外部中斷0EX1=1;打開外部中斷1IT0=1;設(shè)置下降沿觸發(fā)方式IT1=1;/設(shè)置下降沿觸發(fā)方式void mai n()主函數(shù)intjn t();調(diào)用初始化函數(shù)v/hile(LED_scan(); /調(diào)用數(shù)碼管掃描函

48、數(shù) void in tO() in terrupt 0 外部中斷。服務(wù)程序cou nt+;計(jì)數(shù)加 1if(cou nt=1OO) 溢出操作coun t=0;void in t2() in terrupt 2 外部中斷1服務(wù)程序count-;/ 計(jì)數(shù)減 1if(count<0)/ 溢出操作count=99; 任務(wù)六:采用外中斷進(jìn)行計(jì)數(shù)和清零控制使用單片機(jī)P0、P2端口作為輸出口,外接一個(gè)2位LED數(shù)碼管,P3.2外接按鍵K1, P3.3外接按鍵K2。編寫程序,按鍵 K2作為“加1/暫停/清零”控制:按鍵K1作為加1計(jì)數(shù)控制。當(dāng)按鍵K2沒有按下時(shí),按鍵 K1按下后LED數(shù)碼管總顯示為0 :第

49、1次按下鍵K2時(shí),每次按下K1, LED數(shù)碼管進(jìn)行加1 顯示;第二次按下按鍵 K2時(shí),暫停加1計(jì)數(shù),按鍵K1按下后LED數(shù)碼管顯示暫停前的數(shù) 值:第3次按下按鍵K2時(shí),LED數(shù)碼管顯示為0 :第4次按下按鍵K2時(shí),與第1次類似。#in clude<reg52.h>八defi ne uint un sig ned int 八defi ne uchar un sig ned char uchar key1 =0,tempi =0,key2=0,temp2=0,key=0; uchar table=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8, 0X80

50、,0X90);void delayms( uint ms)v/hile(ms-)uint i=0;for(i;i<120;i+);void intjn t()EA=1;EX0=1;EX1=1;IT0=1;IT 1=1;void int1() interrupt 0key2+;void intO() interrupt 2key1+;void displayOP2=0xfe;P0=tabletemp1; delayms(2);P2=0xfd; P0=tabletemp2;delayms(2);void main()intjnt();while tempi =key1%10; temp2=k

51、ey1/10;switch (key2%3)case 0:while if(key2%3!=0) break; P2=0xfe; PO=tableO; delayms(2); P2=0xfd; PO=tableO; delayms(2); key1=0; break;case 1: display(); break;case 2:key=key1;vhile(1)if(key2%3!=2) break;P2=0xfe;P0=tabletemp1;delayms(2);P2=0xfd;P0=tabletemp2;delayms(2);key1=key;break;第六章任務(wù)一:簡(jiǎn)單計(jì)數(shù)器的設(shè)計(jì)使

52、用單片機(jī)P0, P2端口作為輸出口,外接一個(gè)2位LED數(shù)碼管,P3.4外接按鍵K。編寫程序,每次按鍵 K 按下時(shí) LED 數(shù)碼管進(jìn)行加 1 顯示,計(jì)數(shù)范圍為 099。#include<reg52.h>八defi ne uint un sig ned int八defi ne uchar un sig ned charuchar table=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90);uchar key=0;void delayms(uint ms)uint i;v/hUe(ms-)for(i=0;i<120;i+);void intjnt()EA=1;ET0=1; 開定時(shí)器。中斷TR0=1; 啟動(dòng)定時(shí)器 0TMOD=0x05; 設(shè)置工作方式為 1 選擇計(jì)數(shù)功能THO=Oxff;TLO=Oxff; / 裝初值使得按一下就中斷void int1() interrupt 1THO=Oxff;TLO=Oxff;key+;void displayO P2=0xfe;P0=tablekey%10; delayms(3);P2=0xfd;P0=tablekey/10;

溫馨提示

  • 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)論