实验汇总
- 格式:doc
- 大小:107.00 KB
- 文档页数:10
//让LED从右到左依次点亮。
#include "reg51.h"void delay05s(void);void main(void){unsigned char light,i;while(1){light=0x01;for(i=8;i>0;i--){P1=~light;delay05s( );light=light<<1;}}}void delay05s(void){unsigned char i,j,k;for(i=5;i>0;i--){for(j=200;j>0;j--){for(k=250;k>0;k--){;}}}}/*让LED从右到左依次点亮,移动到最左端后向右移动,向右移动到最右端时向右移动,反复进行。
*/#include "reg51.h"#define uchar unsigned charvoid delay05s(void){unsigned char i,j,k;for(i=5;i>0;i--){for(j=200;j>0;j--){for(k=250;k>0;k--){;}}}}void left(void){uchar i,j;j=0x01;for(i=8;i>0;i--){P1=~j;delay05s( );j=j<<1;}}void right(void){uchar i,j;j=0x80;for(i=8;i>0;i--){P1=~j;delay05s( );j=j>>1;}}void main(void){while(1){left( );right( );}}用定时器T0定时500μs ,使P1.0引脚产生1000Hz方波,用定时器T1定时0.5s ,使P1.1引脚产生1Hz方波。
#include<reg51.h>unsigned char count;sbit CLK=P1^0;sbit light=P1^1;void main( ){TMOD=0x11;TH0=(65536-500*12/12)/256;TL0=(65536-500*12/12)%256;TH1= (65536-50000*12/12)/256;TL1= (65536-50000*12/12)%256;ET0=1;ET1=1;EA=1;count=0;TR0=1;TR1=1;while(1){;}}void time0( )interrupt 1{TH0=(65536-500*110592/120000)/256;TL0=(65536-500*110592/120000)%256;CLK=~CLK;}void time1( )interrupt 3{TH1= (65536-50000*12/12)/256;TL1= (65536-50000*12/12)%256;count++;if(count==10){light=~light;count=0;}}键盘显示#include "reg51.h"#define uchar unsigned char#define uint unsigned intuchar keycode[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void delay();uchar keyfound();void main(){while(1){ P2=0;P0=keycode[keyfound()/10];P2=0x01;delay();P2=0;P0=keycode[keyfound()%10];P2=0x02;delay();}}void delay(){ uchar i;for(i=0;i<250;i++);}uchar keyfound(){uchar keyvalue[16]={0xee,0xed,0xeb,0xe7,0xde,0xdd,0xdb,0xd7, 0xbe,0xbd,0xbb,0xb7,0x7e,0x7d,0x7b,0x77};uchar keyin_h,keyin_l,key,i,temp;temp=0;P3=0xff;P1=0x00;keyin_h=P3;keyin_h=keyin_h<<4;P1=0xff;P3=0x00;keyin_l=P1;keyin_l=keyin_l&0x0f;key=keyin_h|keyin_l;for(i=0;i<16;i++){if(key==keyvalue[i]){ temp=i;break;}}return(temp);}#include"reg51.h"#define uchar unsigned charuchar count;uchar time[3]={0};uchar dispcode[10]={0xC0,0xF9,0xA4, 0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; void delay();void display();main(){TMOD=0x01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;count=0;TR0=1;while(1){display();}}void timer0() interrupt 1{count++;TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(count==20){ count=0;time[2]++;if(time[2]>59){ time[2]=0;time[1]++;if(time[1]>59){ time[0]++;time[1]=0;if(time[0]>23){ time[0]=0;}}}}void display(){uchar k,i;k=0x04;for(i=0;i<3;i++){P2=0;P0=dispcode[time[i]/10];P2=k;k<<=1;delay();P2=0;P0=dispcode[time[i]%10];P2=k;k<<=1;delay();}}void delay(){uchar i;for(i=0;i<250;i++);}数字电压表#include <reg51.h>#define data_point P1sbit EOC=P2^0;sbit ADDA=P2^1;sbit ADDB=P2^2;sbit ADDC=P2^3;sbit OE=P2^5;sbit START=P2^6;sbit CLK=P2^7;unsigned char disp[8]={0,0,0};char code dispcode[]={0xC0,0xF9,0xA4,0xB0, 0x99,0x92,0x82,0xf8,0x80,0x90};unsigned char t0count=0;void display(){unsigned char i,j,k=0x80;for(i=0;i<3;i++){P3=0;P0=disp[i];P3=k;k>>=1;for(j=200;j>0;j--);}P3=0;}unsigned char ADC0809(){unsigned char i,d;ADDC=0;ADDB=0;ADDA=0;START=1;for(i=0;i<50;i++);START=0;while(EOC==0);OE=1;d=P1;OE=0;return d;}void covert(unsigned char x) {disp[0]=dispcode[x/51];disp[0]=disp[0]-0x80;x=(x%51)*2;disp[1]=dispcode[x/10];disp[2]=dispcode[x%10]; }void main(){TMOD=0X21;TH0=(65536-10000)/256;TL0=(65536-10000)%256;TH1=256-2;ET0=1;ET1=1;EA=1;TR0=1;TR1=1;OE=0;START=0;EOC=1;while(1){display();}}void time0()interrupt 1{TH0=(65536-10000)/256;TL0=(65536-10000)%256;t0count++;if(t0count==100){t0count=0;covert(ADC0809());}}void time1()interrupt 3{CLK=~CLK;}波形发生器(100HZ)#include <reg51.h>#define uchar unsigned charuchar flag;bit time;void DAC0832(unsigned char x); unsigned char sin(unsigned char x); void main(){uchar i;TMOD=0x02;TH0=256-40;TL0=256-40;ET0=1;EX0=1;EX1=1;EA=1;IT0=1;IT1=1;TR0=1;flag=0;time=0;i=0;while(1){ if(time==1){ time=0;if(i>249)i=0;else i++;switch(flag){case 0:DAC0832(0);break;case 1:if(i>125) DAC0832(250-i); else DAC0832(i);break;case 2: DAC0832(sin(i));break;default: ;}}}}void time0()interrupt 1{time=1;}void int0()interrupt 0{flag=1;}void int1()interrupt 2{flag=2;}void DAC0832(uchar x){P2=x;}uchar sin(uchar x){uchar code sin_tab[]={125,128,131,134,138,141,144,147,150,153,156,159,162,165,168,171,174, 177,180,182,185,188,191,193,196,198,201,203,206,208,211,213,215,217,2 19,221,223,225,227,229,231,232,234,235,237,238,239,241,242,243,244,24 5,246,246,247,248,248,249,249,250,250,250,250,250,250,250,250,249,249 ,248,248,247,246,246,245,244,243,242,241,239,238,237,235,234,232,231, 229,227,225,223,221,219,217,215,213,211,208,206,203,201,198,196,193,1 91,188,185,182,180,177,174,171,168,165,162,159,156,153,150,147,144,14 1,138,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,85, 82,79,76,73,70,68,65,62,59,57,54,52,49,47,44,42,39,37,35,33,31,29,27, 25,23,21,19,18,16,15,13,12,11,9,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0 ,1,1,2,2,3,4,4,5,6,7,8,9,11,12,13,15,16,18,19,21,23,25,27,29,31,33,35 ,37,39,42,44,47,49,52,54,57,59,62,65,68,70,73,76,79,82,85,88,91,94,97 ,100,103,106,109,112,116,119,122};return sin_tab[x];}。