1、8051单片机Proteus仿真实例2原理图+C程序1. INT0,INT1中断计数原理图:程序:#include sbit k3=P34;sbit k4=P35;unsigned char code led_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;unsigned char code seg_code=0x20,0x10,0x08,0x04,0x02,0x01;unsigned char led_buffer=0,0,0,0,0,0;unsigned int count_a=0,count_b=0;void de
2、lay(unsigned int x) unsigned char t; while(x-) for(t=0;t120;t+);void display() unsigned char i; led_buffer2=count_a/100; led_buffer1=count_a%100/10; led_buffer0=count_a%10; if(led_buffer2=0) led_buffer2=10; if(led_buffer1=0) led_buffer1=10; led_buffer5=count_b/100; led_buffer4=count_b%100/10; led_bu
3、ffer3=count_b%10; if(led_buffer5=0) led_buffer5=10; if(led_buffer4=0) led_buffer4=10; for(i=0;i6;i+) P2=seg_codei; P1=led_codeled_bufferi; delay(1); void main() IT0=1; IT1=1; PX0=1; IE=0x85; while(1) k3=1; k4=1; if(k3=0) count_a=0; if(k4=0) count_b=0; display(); void int0() interrupt 0 count_a+;void
4、 int1() interrupt 2 count_b+;2. INT0中断计数原理图:程序:#include unsigned char code led_code=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00;unsigned char led_buffer=0,0,0;unsigned count=0;sbit key=P36;void display() led_buffer2=count/100; led_buffer1=count%100/10; led_buffer0=count%10; if(led_buffer2
5、=0) led_buffer2=10; if(led_buffer1=0) led_buffer1=10; P0=led_codeled_buffer0; P1=led_codeled_buffer1; P2=led_codeled_buffer2;void main() IE=0x81; IT0=1; while(1) key=1; if(key=0) count=0; display(); void int0() interrupt 0 count+; 3.LED点阵原理图:程序:#include sbit led1=P00;sbit led2=P01;void delay(long dl
6、y) while(dly-);void main() SCON=0x50; TMOD=0x20; TH1=0xfd; TL1=0xfd; PCON=0x00; TR1=1; RI=0; while(1) if(RI=1) RI=0; switch(SBUF) case A:led1=led1;led2=1;break; case B:led1=1;led2=led2;break; case C:led1=led1;led2=led2;break; else led1=led2=1; delay(1000); 4.串行通信(MAX232芯片)原理图:程序:#include sbit led1=P
7、00;sbit led2=P01;void delay(long dly) while(dly-);void main() SCON=0x50; TMOD=0x20; TH1=0xfd; TL1=0xfd; PCON=0x00; TR1=1; RI=0; while(1) if(RI=1) RI=0; switch(SBUF) case A:led1=led1;led2=1;break; case B:led1=1;led2=led2;break; case C:led1=led1;led2=led2;break; else led1=led2=1; delay(1000); 5.MAX722
8、1芯片原理图:程序:#include #include sbit DIN=P20;sbit CSB=P21;sbit CLK=P22;unsigned char code buffer=2,0,1,5,10,5,10,9;void delay(long dly) while(dly-);void write(unsigned char addr,unsigned char dat) unsigned char i; CSB=0; for(i=0;i8;i+) CLK=0; addr=1; DIN=CY; CLK=1; _nop_(); _nop_(); CLK=0; for(i=0;i8;i+
9、) CLK=0; dat=1; DIN=CY; CLK=1; _nop_(); _nop_(); CLK=0; CSB=1;void initialise() write(0x09,0xff); write(0x0a,0x07); write(0x0b,0x07); write(0x0c,0x01);void main() unsigned char i; initialise(); delay(10); for(i=0;i8;i+) write(i+1,bufferi); while(1);6. T0控制LED实现二进制计数原理图:程序:#include void main() TMOD=0
10、x05; TR0=1; TH0=0x00; TL0=0x00; while(1) P1=TH0; P2=TL0; 8. 按键控制LED循环原理图:程序:#include #include void delay(unsigned int x) while(x-);void move_led() if(P1&0x10)=0) P0=_cror_(P0,1); else if(P1&0x20)=0) P0=_crol_(P0,1); else if(P1&0x40)=0) P2=_cror_(P2,1); else if(P1&0x80)=0) P2=_crol_(P2,1); void main(
11、) unsigned char key; P0=0xfe; P2=0xfe; P1=0xff; key=0xff; while(1) if(key!=P1) key=P1; move_led(); delay(15000); 9.按键控制数码管显示原理图:程序:#include unsigned char code led_code=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;unsigned char code led_seg=0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01;unsigned c
12、har led_buffer=0,10,10,10,10,10,10,10;void delay(unsigned int x) unsigned char t; while(x-) for(t=0;t120;t+); void led_display() unsigned char i; for(i=0;i8) key_count=8; led_bufferkey_count-1=key_count; break; case 0xfd:if(key_count0) led_buffer-key_count=10; if(key_count=0) led_buffer0=0; break; c
13、ase 0xfb:led_buffer0=0; for(i=1;i8;i+) led_bufferi=10; key_count=0; while(P1!=0xff) led_display(); 10.报警器原理图:程序:#include sbit SOUNDER=P10;sbit BUTTON=P17;void delay(unsigned int x) while(x-);void alarm(unsigned char t) unsigned char i,j; for(i=0;i200;i+) SOUNDER=!SOUNDER; for(j=0;jt;j+); delay(15); void main() SOUNDER=0; while(1) BUTTON=1; if(BUTTON=1) alarm(90); alarm(120);
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1