51单片机实验板原理图
1.流水灯实验
#include <REG52.h> 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<reg52.h>#include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit 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 <reg51.h> #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 <reg51.h> #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 <reg51.h> #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 <reg51.h> #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; } }
复制代码