單片機(jī)程序源代碼_第1頁
單片機(jī)程序源代碼_第2頁
單片機(jī)程序源代碼_第3頁
已閱讀5頁,還剩35頁未讀, 繼續(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#define uChar unsigned Charsbit LED仁POP;sbit LED2=P0A1;void delayms(uint ms)uint i;while(ms-)for(i=O;i<12O;i+);void main()while(1)LED1=O;LED2=1;delayms(5OO);LED1=1;LED2=O;delayms(5OO);任務(wù)二:流水

2、廣告燈的設(shè)計(jì)利用89c51單片機(jī)的端口控制8個(gè)LED( DOD7循環(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>#include <intrins.h>#define uint unsigned int#define uchar unsigned charuint i;uchar temp;uint a8=

3、Oxfe,Oxfd,Oxfb,Oxf7,Oxef,Oxdf,Oxbf,Ox7f;void delayms(uint ms)while(ms-) uint j;for(j=0;j<120;j+);void main()while(1)P0=0xfe;while(P0!=0x7f)/P1=temp;/delayms(500);P0=_crol_(P0,1); delayms(250);temp=0x7f;while(P0!=0xfe)P0=temp;delayms(500);temp=_cror_(temp,1); 任務(wù)三:拉幕式與閉幕式廣告燈的設(shè)計(jì)利用89C51單片機(jī)的P0端口實(shí)現(xiàn)8個(gè)LE

4、D D0D7的拉幕式與閉幕式廣告燈設(shè)計(jì)。拉幕式: 開始D0D7全滅,延時(shí)片刻后首先D3和D4亮,其次是 D2和D5亮,再是D1和D6亮,最后是 D0和D7亮。閉幕式:開始D0D7全亮,延時(shí)片刻后首先 D0和D7滅,其次是D1和D6滅,再是D2和D5 滅,最后是D3和D4滅。#inClude<reg52.h>#define uint unsigned int#define uChar unsigned CharuChar Code table=0xe7,0xC3,0x81,0x00;void delay(uint x)uint i,j;for(i=x;i>0;i-)for(j=

5、120;j>0;j-);void main()uint i;while(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( D0D7復(fù)雜廣告燈的控制,要求顯示規(guī)律為:正 向流水 ->反向流水 ->隔燈閃爍 3次->高四盞、低四盞閃爍 2 次->隔兩盞閃爍 3次,再重復(fù)循 環(huán)。#include<reg52.h>#define uint

6、unsigned int#include<intrins.h>void delayms(uint ms)uint i;while(ms-)for(i=0;i<110;i+);void main()uint i,j,xx2=0xaa,0xff,yy2=0xf0,0x0f,zz2=0xb6,0xff; unsigned char aa;while(1)aa=0xfe;for(i=0;i<7;i+)P0=aa;aa=_crol_(aa,1);delayms(500);for(i=0;i<8;i+)P0=aa;aa=_cror_(aa,1);delayms(500);fo

7、r(i=0;i<3;i+)for(j=0;j<2;j+)P0=xxj;delayms(500);for(i=0;i<2;i+)for(j=0;j<2;j+)P0=yyj ;delayms(500);for(i=0;i<3;i+)for(j=0;j<2;j+)P0=zzj ;delayms(500);任務(wù)五:?jiǎn)蝹€(gè)LED數(shù)碼管顯示設(shè)計(jì)09 的使用89C51的P0 口作為輸出口,外接LED數(shù)碼管,編寫程序,使數(shù)碼管循環(huán)顯示從加 1 計(jì)數(shù)。#inClude<reg52.h>#define uint unsigned int#define uChar un

8、signed CharuChar table10= 0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90;uint key=0;void int_int()EA=1;IT0=1;EX0=1;void count_num() interrupt 0if(key=9)key=0;else key+;void main()int_int();while(1)P0=tablekey;任務(wù)六:多個(gè)LED數(shù)碼管顯示設(shè)計(jì)使用單片機(jī) P0 和 P2 口作為輸出口,外接一個(gè) 8 位 LED 數(shù)碼管,編寫程序,使數(shù)碼管顯示 “872AF635”。#include<

9、;reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned chardelay(ms)while(ms-) int i;for(i=0;i<110;i+);main()uchar a16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x 86,0x8e;uchar b8=0x08,0x07,0x02,0x0a,0x0f,0x06,0x03,0x05,j;uint i;while(1)

10、j=0x01;for(i=0;i<8;i+)P2=j;P0=abi;j=_crol_(j,1);delay(3);任務(wù)七:查詢式按鍵設(shè)計(jì)將 8 個(gè)按鍵從 18 進(jìn)行編號(hào),如果其中一個(gè)鍵被按下,則在LED 數(shù)碼管上顯示相應(yīng)的鍵值。#include<reg52.h>#define uint unsigned int#define uchar unsigned charmain()uchar a16=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x 86,0x8e;P0=0xff;whi

11、le(P0!=0xff) switch(P0)case 0xfe:P2=a1; break;case 0xfd:P2=a2; break;case 0xfb:P2=a3; break;case 0xf7:P2=a4; break;case 0xef:P2=a5; break;case 0xdf:P2=a6; break;case 0xbf:P2=a7; break;case 0x7f:P2=a8;任務(wù)八:LED數(shù)碼管顯示矩陣鍵盤按鍵的設(shè)計(jì)設(shè)計(jì)一個(gè) 4*4 的矩陣鍵盤,以 P1.0P1.3 作為行線,以 P1.4P1.7 作為列線。要求:未按下 按鍵時(shí),LED數(shù)碼管顯示"-”,按下按鍵

12、時(shí),在數(shù)碼管上顯示相應(yīng)的鍵值。#include<reg52.h>#define uchar unsigned char#define uint unsigned intuchar table17=0xbf,0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;uint num=0;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

13、&=0x0f;if(temp=0x0e)P2=0xf0;temp=P2;temp&=0xf0;switch(temp)case 0xe0:num=1;break;case 0xd0:num=2;break;case 0xb0:num=3;break;case 0x70:num=4;if(temp=0x0d)P2=0xf0;temp=P2;temp&=0xf0;switch(temp)case 0xe0:num=5;break;case 0xd0:num=6;break;case 0xb0:num=7;break;case 0x70:num=8;if(temp=0x0b)

14、P2=0xf0;temp=P2;temp&=0xf0;switch(temp)case 0xe0:num=9;break;case 0xd0:num=10;break;case 0xb0:num=11;break;case 0x70:num=12;if(temp=0x07)P2=0xf0;temp=P2;temp&=0xf0;switch(temp)case 0xe0:num=13;break;case 0xd0:num=14;break;case 0xb0:num=15;break;case 0x70:num=16;return num;void display(uint n

15、um) if(num=0)P0=0xbf;P0=tablenum ;main()uint temp;while(1)P2=0x0f;temp=P2;if(temp!=0x0f)keyscan();display(num);(2)#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit LED仁P2P;sbit LED2=P2A1;uchar num;uchar code LED_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x8

16、8,0x83,0xc6,0xa1,0x86,0x8e;/ 數(shù)碼管字形碼編碼void delay(uint x)uchar i,j;for(i=x;i>0;i-)for(j=120;j>0;j-);/ 延時(shí)函數(shù)void display(uchar num)P0=LED_codenum;/ 數(shù)碼管顯示函數(shù)void keyscan()/ 鍵盤掃描函數(shù)uchar temp;P1=0xfe;/key1-key4 第一行按下temp=P1;temp&=0xf0;if(temp!=0xf0)delay(10);/ 消除抖動(dòng)temp=P1;temp&=0xf0;if(temp!=0

17、xf0)temp=P1;switch(temp)case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;while(temp!=0xf0)/ 等待按鍵釋放temp=P1;temp&=0xf0;P1=0xfd;/key5-key8 第二行按下 temp=P1;temp&=0xf0;if(temp!=0xf0)delay(10);/ 消除抖動(dòng)temp=P1;temp&=0xf0;if(temp!=0xf0)temp=P1;switch(temp)case

18、0xed:num=5;break;case 0xdd:num=6; break;case 0xbd:num=7;break;case 0x7d:num=8;break;while(temp!=0xf0)/ 等待按鍵釋放temp=P1; temp&=0xf0;P1=0xfb;/key9-key12 第三行按下 temp=P1;temp&=0xf0;if(temp!=0xf0)delay(10);/ 消除抖動(dòng)temp=P1;temp&=0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0xeb:num=9;break;case 0xdb

19、:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break;while(temp!=0xf0)/ 等待按鍵釋放temp=P1; temp&=0xf0;P1=0xf7;/key13-key16 第四行按下 temp=P1;temp&=0xf0;if(temp!=0xf0)delay(10);/ 消除抖動(dòng)temp=P1;temp&=0xf0;if(temp!=0xf0)temp=P1;switch(temp)case 0xe7:num=13; break;case 0xd7:num=14; break;case 0

20、xb7:num=15; break;case 0x77:num=16; break;while(temp!=0xf0)/ 等待按鍵釋放temp=P1; temp&=0xf0;void main()while(1)keyscan();if(num=0)P0=0xbf;elsedisplay(num-1); 任務(wù)九:簡(jiǎn)單撥號(hào)鍵盤的設(shè)計(jì)使用4*4的矩陣式鍵盤及8位共陽極LED數(shù)碼管設(shè)計(jì)一個(gè)簡(jiǎn)單撥號(hào)鍵盤,要求在初始狀態(tài)時(shí),8位數(shù)碼管均顯示“-”,每按下一個(gè)后,原 8位LED數(shù)碼管顯示的容向左移動(dòng)1位。#include<reg52.h>#include<intrins.h>

21、;#define uint unsigned int#define uchar unsigned charuchar keycount=0,num;uchar code LED1_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,段共陽數(shù)碼管編0x80,0x90,0x88,0x83, 0xc6,0xa1,0x86,0x8e ;/ 數(shù)碼管字形碼編碼 uchar LED2_duan8=0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf,0xbf;/8 碼uchar LED2_wei8= 0x80,0x40,0x20,0x10,0x08,0x

22、04,0x02,0x01; void delay(uint x)uchar i,j;for(i=x;i>0;i-) for(j=120;j>0;j-);void display()uchar i; /P2=0x80; for(i=0;i<8;i+) P2=LED2_weii; P0=LED2_duan7-i; delay(1);void keyscan()uchar temp;P3=0xfe;temp=P3; temp&=0xf0;if(temp!=0xf0) delay(10); temp=P3; temp&=0xf0; if(temp!=0xf0) tem

23、p=P3; switch(temp) case 0xee:keycount+;num=0;break;case 0xde:keycount+;num=1;break;case 0xbe:keycount+;num=2;break; case 0x7e:keycount+;num=3;break; while(temp!=0xf0) temp=P3; temp&=0xf0;P3=0xfd; temp=P3;temp&=0xf0; if(temp!=0xf0)delay(10);temp=P3; temp&=0xf0;if(temp!=0xf0) temp=P3; swit

24、ch(temp)case 0xed:keycount+;num=4;break; case 0xdd:keycount+;num=5;break; case 0xbd:keycount+;num=6;break; case 0x7d:keycount+;num=7;break; while(temp!=0xf0) temp=P3; temp&=0xf0;P3=0xfb;temp=P3; temp&=0xf0;if(temp!=0xf0)delay(10);temp=P3; temp&=0xf0;if(temp!=0xf0)temp=P3; switch(temp) ca

25、se 0xeb:keycount+;num=8;break; case 0xdb:keycount+;num=9;break; case 0xbb:keycount+;num=10;break; case 0x7b:keycount+;num=11;break; while(temp!=0xf0) temp=P3; temp&=0xf0;P3=0xf7; temp=P3;temp&=0xf0; if(temp!=0xf0)delay(10);temp=P3; temp&=0xf0;if(temp!=0xf0) temp=P3; switch(temp)case 0xe7

26、:keycount+;num=12;break; case 0xd7:keycount+;num=13;break; case 0xb7:keycount+;num=14;break; case 0x77:keycount+;num=15;break; while(temp!=0xf0) temp=P3; temp&=0xf0;void main()uchar i;while(1)display();keyscan();if(keycount!=0)for(i=0;i<7;i+)LED2_duani=LED2_duani+1;LED2_duan7=LED1_codenum;key

27、count=0;第五章任務(wù)一:帶中斷控制的LED花樣燈P0端口作為輸出口,外接 8只LED, P3.2外接按鍵K。編寫程序,當(dāng) K未按下時(shí),8只LED 進(jìn)行默認(rèn)顯示,其顯示規(guī)律為左移流水 -> 右移流水 ->隔燈閃爍 3 次花樣顯示;如果按下 K 鍵后,8只LED暫停默認(rèn)顯示,而進(jìn)行閃爍顯示,當(dāng)顯示達(dá)到5次后,繼續(xù)按默認(rèn)規(guī)律顯示。#include<reg52.h>#define uint unsigned int#define uchar unsigned charuintLED_table14=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x

28、7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd;void delayms(uint ms)uint i;while(ms-)for(i=0;i<120;i+);void int_int()EA=1;EX0=1;IT0=1;void LED_shan() interrupt 0uint k;for(k=0;k<5;k+)P0=0xaa; delayms(500);P0=0xff; delayms(500);void main()int_int();while(1)uint i;for(i=0;i<14;i+)P0=LED_tablei;delayms(500)

29、; for(i=0;i<3;i+)P0=0xaa;delayms(500);P0=0xff;delayms(500);任務(wù)二:采用外中斷控制的條形LED彩燈設(shè)計(jì)P0端口作為輸出口,外接條形LED編寫程序,當(dāng)按鍵K未按下時(shí),LED進(jìn)行循環(huán)左移顯示。如果第 1 次按下按鍵K后,LED進(jìn)行循環(huán)右移顯示。如果第2次按下按鍵K后,LED進(jìn)行拉幕式與閉幕式花樣顯示。如果第 3 次按下按鍵 K 后,又恢復(fù)循環(huán)左移顯示。#include <reg52.h>unsigned char flag=0;/ 狀態(tài)標(biāo)志位unsigned char led =0;/LED 映射位unsigned cha

30、r table=/ 花樣數(shù)組0x00,0x81,0xc3,0xe7,0xff,0xe7,0xc3,0x81;/先閉幕式再開幕式void delayms(unsigned int ms); / 延時(shí)函數(shù)void sysInit(void);/ 系統(tǒng)初始化void step0(void);/ 狀態(tài) 0void step1(void);/ 狀態(tài) 1void step2(void);/ 狀態(tài) 2void main(void)sysInit(); / 初始化系統(tǒng) while(1)switch(flag)case 0: step0();break;case 1: step1();break;case 2:

31、 step2();break; default:break;P0 = led;/將led值映射到LED燈delayms(500);/ 延時(shí) 500msvoid delayms(unsigned int ms)unsigned char i;for (;ms;ms-)for (i=110;i;i-);void sysInit(void)EX0 = 1;/ 打開外部中斷 0EA = 1;/ 打開總中斷IT0 = 1;/ 外部中斷 0 下降沿觸發(fā)void step0(void)led <<=1;/ 左移if (led=0) / 溢出處理 led = 0x01;void step1(voi

32、d)led >>=1;/ 右移if (led=0) / 溢出處理 led = 0x80;void step2(void)static char t;led = tablet+;/ 開幕閉幕花樣顯示if (t=8)t = 0;void EX_0() interrupt 0 / 外部中斷 0 服務(wù)函數(shù) flag+; if (flag=3) flag = 0;(2)#include<reg52.h>/ 頭文件#define uchar unsigned char#define uint unsigned int/ 宏定義uchar temp,key_count;uchar c

33、ode 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(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=tabco

34、unt; count+; if(count>=8) count=0;void init()EA=1;EX0=1;IT0=1;temp=0;key_count=0;void main()init();while(1)switch(key_count)case 0:loop_leftmove();break;case 1:loop_rightmove();break;case 2:open_close();break;default:break;P0=temp;delay(250);void key_interrupt() interrupt 0/ 外部中斷 INT0 中斷服務(wù)程序key_c

35、ount+;key_count%=3;/*if(key_count=3)key_count=0;*/任務(wù)三:采用兩個(gè)外中斷的LED彩燈控制P0端口作為輸出口,外接 8只LED P3.2外接按鍵K1, P3.3外接按鍵K2。編寫程序,沒有 按下任何按鍵時(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>#def

36、ine uchar unsigned char#define uint unsigned intsbit key1=P3A2;sbit key2=P3A3;sbit beep=P1A0;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 i,j;for(i=ms;i>0;i-) for(j=110;j>0;j-);void init()EA=1;/ 打開總中斷EX0=

37、1;/ 打開外部中斷 INT0EX1=1;/ 打開外部中斷 INT1IT0=1;/ 下降沿觸發(fā)方式IT1=1;/ 下降沿觸發(fā)方式PX0=0;/ 設(shè)置 INT0 為低中斷優(yōu)先級(jí)PX1=1;/ 設(shè)置 INT1 為高中斷優(yōu)先級(jí) void interval_LED()P0=0xff;delay(500);P0=0xaa;delay(500);void left_right_move()if(!right) temp=_crol_(temp,1);elsetemp=_cror_(temp,1); if(temp=0x01)right=0;if(temp=0x80)right=1;void open_LE

38、D()uchar count; temp=tabcount+;if(count=8) count=0;void Beep()uchar i,j,k; for(i=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=0;void main()init();beep=0;while(1) if(!flag) interval_LED();else if(beep_FG) Beep(); else swi

39、tch(key_count%2) case 1: left_right_move(); break;/ 奇數(shù)次按鍵左移右移顯示case 0:open_LED();break;/ 偶數(shù)次按鍵拉幕式顯示default:break;P0=temp;delay(400);void key1_interrupt() interrupt 0flag=1;key_count+;void key2_interrupt() interrupt 2flag=1;beep_FG=1;任務(wù)四:采用兩個(gè)外中斷實(shí)現(xiàn)LED鍵控移位P0端口作為輸出口,外接 8只LED P3.2外接按鍵K1, P3.3外接按鍵K2。編寫程序,

40、要現(xiàn) LED鍵控移位,按下按鍵 K1時(shí),8只LED左移1位;按下按鍵 K2時(shí),8只LED右移1位。 #include<reg52.h>#include<intrins.h>#define uint unsigned int#define uchar unsigned charuchar key1=0,key2=0,temp1=0,temp2=0,temp11=0,temp12=0;/*void delayms(uint ms)uint i;while(ms-)for(i=0;i<120;i+); */void int_int()void int0() interr

41、upt 0key1+;void int1() interrupt 2key2+;void main()uchar a;int_int();a=0xfe;while(1)if(temp1!=key1)P0 = a; a=_crol_(a,1); temp1=key1;if(temp2!=key2)P0 = a; a=_cror_(a,1); key2=temp2;(2)#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar key1=0,key2=0,m,n,k;uchar table=0x

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

43、行加1顯示;每次按下按鍵 K2時(shí), LED數(shù)碼管進(jìn)行減1顯示,計(jì)數(shù)圍為 099。#include<reg52.h>/ 頭文件#define uint unsigned int / 宏定義#define uchar unsigned char / 宏定義uchar table=OxcO,Oxf9,Oxa4,OxbO,Ox99,Ox92,Ox82,Oxf8,Ox8O,Ox9O;/O-9共陽字型碼編碼uchar shi,ge;void LED_scan()/shi=count/1O;/ ge=count%1O;/ P2=tablege;/ PO=tableshi;/void int_in

44、t() /char count=O;數(shù)碼管掃描子函數(shù)分離十位分離個(gè)位顯示個(gè)位顯示十位初始化/ 打開總中斷/ 打開外部中斷O/ 打開外部中斷1/ 設(shè)置下降沿觸發(fā)方式IT1=1;void main()int_int(); / while(1)LED_scan(); /void int0() interrupt 0/count+; if(count=100) count=0;void int2() interrupt 2 /count-; if(count<0) count=99;/ 設(shè)置下降沿觸發(fā)方式/ 主函數(shù)調(diào)用初始化函數(shù)調(diào)用數(shù)碼管掃描函數(shù)外部中斷 0 服務(wù)程序/ 計(jì)數(shù)加 1/ 溢出操作外

45、部中斷 1 服務(wù)程序/ 計(jì)數(shù)減 1/ 溢出操作(2)#include<reg52.h>/ 頭文件共陽字型碼編碼#define uint unsigned int / 宏定義 #define uchar unsigned char / 宏定義 uchar table=0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90;/0-9 char count=0;uchar shi,ge;void delay(uint ms)/ 延時(shí)子函數(shù) uchar i; for(;ms;ms-) for(i=120;i;i-);void LED_scan(

46、)/ 數(shù)碼管掃描子函數(shù)shi=count/10;/ 分離十位 ge=count%10;/ 分離個(gè)位P2=0x01; / 個(gè)位對(duì)應(yīng)的數(shù)碼管點(diǎn)亮 P0=tablege;/ 顯示個(gè)位 delay(1);P2=0x02; / 十位對(duì)應(yīng)的數(shù)碼管點(diǎn)亮初始化/ 打開總中斷/ 打開外部中斷 0/ 打開外部中斷 1/ 設(shè)置下降沿觸發(fā)方式 / 設(shè)置下降沿觸發(fā)方式/ 主函數(shù)調(diào)用初始化函數(shù)調(diào)用數(shù)碼管掃描函數(shù) 外部中斷 0 服務(wù)程序/ 計(jì)數(shù)加 1/ 溢出操作外部中斷 1 服務(wù)程序/ 計(jì)數(shù)減 1/ 溢出操作P0=tableshi;/ 顯示十位 delay(1);void int_int() /EA=1;EX0=1;EX1

47、=1;IT0=1;IT1=1;void main()int_int(); / while(1)LED_scan(); /void int0() interrupt 0/count+; if(count=100)count=0;void int2() interrupt 2 /count-;if(count<0) count=99; 任務(wù)六:采用外中斷進(jìn)行計(jì)數(shù)和清零控制使用單片機(jī)PO、P2端口作為輸出口,外接一個(gè)2位LED數(shù)碼管,P3.2外接按鍵K1, P3.3外接按鍵K2。編寫程序,按鍵K2作為“加1/暫停/清零”控制;按鍵K1作為加1計(jì)數(shù)控制。 當(dāng)按鍵K2沒有按下時(shí),按鍵 K1按下后L

48、ED數(shù)碼管總顯示為 0;第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 次類似。#include<reg52.h> #define uint unsigned int #define uchar unsigned charuchar key1=0,temp1=0,key2=0,temp2=0,key=0;uchar table=0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0X

49、F8,0X80,0X90;void delayms(uint ms)while(ms-)uint i=0;for(i;i<120;i+) ;void int_int()EA=1;EX0=1;EX1=1;IT0=1;IT1=1;void int1() interrupt 0key2+;void int0() interrupt 2key1+;void display()P2=0xfe;P0=tabletemp1;delayms(2);P2=0xfd;P0=tabletemp2;delayms(2);void main()int_int();while(1)temp1=key1%10; te

50、mp2=key1/10; switch(key2%3)case 0:while(1)if(key2%3!=0) break; P2=0xfe;P0=table0; delayms(2);P2=0xfd;P0=table0; delayms(2);key1=0; break;case 1: display();break;case 2: key=key1;while(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ù)

51、器的設(shè)計(jì)使用單片機(jī)PO, P2端口作為輸出口,外接一個(gè)2位LED數(shù)碼管,P3.4外接按鍵K。編寫程序,每次按鍵 K按下時(shí)LED數(shù)碼管進(jìn)行加1顯示,計(jì)數(shù)圍為099。#include<reg52.h>#define uint unsigned int#define uchar unsigned charuchar table=OXCO,OXF9,OXA4,OXBO,OX99,OX92,OX82,OXF8,OX8O,OX9O;uchar key=0;void delayms(uint ms)uint i;while(ms-) for(i=0;i<120;i+);void int_int()EA=1;ET0=1; / 開定時(shí)器 0 中斷1 選擇計(jì)數(shù)功能就中斷TR0=1; / 啟動(dòng)定時(shí)器 0TMOD=0x05;/ 設(shè)置工作方式為 TH0=0xff;TL0=0xff; / 裝初值使得按一void int1() interrupt 1TH0=0xff;TL0=0xff;key+;void display()

溫馨提示

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