51单片机实验板原理图
1.流水灯实验
#include void delay(unsigned int Cnt){unsigned int t;while(Cnt--){t = 120;while(t--);}}void main( )/*主程序*/{ P1=0xfe;delay( 400 ); /*500为延时参数,可根据实际需要调整*/P1=0xfd;delay( 500 );P1=0xfb;delay( 500 );P1=0xf7;delay( 500 );P1=0xef;delay( 500 );P1=0xdf;delay( 500 );P1=0xbf;delay( 500 );P1=0x7f;delay( 500 );}
2.数码管动态显示
#include#include#define uchar unsigned char#define uint unsigned intsbit duan=P2^6; sbit wei=P2^7; uchar code tab[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f, 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x00,0x40}; //uchar idata dis_buf[6]={17,17,17,17,17,17}; //void delayms(uint i) { uint j; for(;i>0;i--) for(j=120;j>0;j--) {;}}void main() { uchar k,m,n,bitcode,segcode; while(1) { for(n=0;n<17;n++) { dis_buf[0]=dis_buf[1]; dis_buf[1]=dis_buf[2]; dis_buf[2]=dis_buf[3]; dis_buf[3]=dis_buf[4]; dis_buf[4]=dis_buf[5]; dis_buf[5]=n; for(m=0;m<100;m++) { bitcode=0xfe; for(k=0;k<6;k++) { P0=0xff; wei=1; wei=0; segcode=dis_buf[k]; P0=tab[segcode]; duan=1; duan=0; P0=bitcode; wei=1; wei=0; delayms(1); bitcode=_crol_(bitcode,1); } } } }}
3.数码管静态显示
#include #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;uchar code led[6]={0x00,0x01,0x02,0x03,0x04,0x05};uchar data ledwei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};uchar data displaytab[6]={ 0x06, 0x5b ,0x4f ,0x66 ,0x6d ,0x7d };void delay() {uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void main( ) {uchar i;while(1){for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay();P0=0x00;DUAN = 1;DUAN = 0;} }}
4.数码管显示相同的内容
#include #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;uchar code led[6]={0x00,0x01,0x02,0x03,0x04,0x05};uchar data ledwei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};uchar data displaytab[6]={ 0x06, 0x5b ,0x4f ,0x66 ,0x6d ,0x7d };void delay() {uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void main( ) {uchar i;while(1){for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay();P0=0x00;DUAN = 1;DUAN = 0;} }}
5.脉冲计数
#include #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;sbit K1=P3^4;sbit K2=P3^5;sbit K3=P3^6;sbit K4=P3^7;uint q=9999;uchar data led[6]={9,9,9,9,0,0};uchar data ledwei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data displaytab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay() /*延时函数,约1mS*/{uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void display() /*主程序*/{uchar i;for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay(); P0=0xff;/*消影2,位选全部关断*/ WEI = 1;WEI = 0;P0=0x00;/*消影1,熄灭断码*/ DUAN = 1;DUAN = 0;} }void main(){TMOD=0x06;EA=1;ET0=1;ET1=1;TH0=0xff;TL0=0xff;TH1=0xff;TL1=0xff;TR0=1;TR1=1; PT0=1;while(1){display();}}void T0_int() interrupt 1{display();display(); if(K1==0) {q++;led[5]=q/100000;led[4]=q%100000/10000;led[3]=q%10000/1000;led[2]=q%1000/100;led[1]=q%100/10;led[0]=q%10/1;}top:while(!K1){display();}display(); display();while(!K1){ goto top;}} void T1_int() interrupt 3{display();display(); if(K2==0) {q--;led[5]=q/100000;led[4]=q%100000/10000;led[3]=q%10000/1000;led[2]=q%1000/100;led[1]=q%100/10;led[0]=q%10/1;}top:while(!K2){display();}display(); display();while(!K2){ goto top;}}
6.脉冲测量
#include #define uchar unsigned char #define uint unsigned int sbit DUAN=P2^6;sbit WEI=P2^7;sbit K1=P3^4;sbit K2=P3^5;sbit pulse=P3^3;uchar count_high;uchar count_low;uint num;uchar data led[6]={0,0,0,0,0,0};uchar data ledwei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};uchar data displaytab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};void delay() /*延时函数,约1mS*/{uchar x,y;for(x=2; x>0; x--)for(y=250; y>0; y--);}void read_count(){count_high=TH1;count_low=TL1;num=count_high*256+count_low;}void display() /*主程序*/{uchar i;for (i=0;i<6;i++){P0=displaytab[led[i]];DUAN=1;DUAN=0;P0=ledwei[i]; WEI = 1;WEI = 0;delay();P0=0xff;/*消影2,位选全部关断*/ WEI = 1;WEI = 0;P0=0x00;/*消影1,熄灭断码*/ DUAN = 1;DUAN = 0;} }void main(){TMOD=0x06;EA=1;ET0=1;TR0=1;TH0=0xff;TL0=0xff;while(1){display();}}void T0_int() interrupt 1{display(); display(); if(K1==0) { TMOD=0X90; while(pulse==1); TR1=1; while(pulse==0); while(pulse==1); TR1=0; read_count();led[5]=num/100000;led[4]=num%100000/10000;led[3]=num%10000/1000;led[2]=num%1000/100;led[1]=num%100/10;led[0]=num%10/1;}top:while(!K1){display();}display(); display();while(!K1){ goto top;}}