您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 单片机期末考试编程题
/***************************************实验题目要求:P23-P26口做输出口,接发光二极管,编写并调试程序,使其闪烁。时间:2012年12月21日程序撰写者:邹康*****************************************/#includereg52.hvoiddelay(unsignedintt)//软延时大致时间为1ms{unsignedinta,b;for(a=0;at;a++)for(b=0;b120;b++);}voidmain(){while(1){P2=~P2;delay(1000);//延时1s}}/*********************************************************实验题目要求:P23-P26口做输出口,接发光二极管,编写并调试跑马灯程序。时间:2012年12月21日程序撰写者:邹康***********************************************************/#includereg52.hvoiddelay(unsignedintt)//延时1ms左右{unsignedinta,b;for(a=0;at;a++)for(b=0;b120;b++);}voidmain(){unsignedchari=0,m=0;while(1){for(i=0;i4;i++)//向左移动{P2=~(0x08i);delay(1000);}m=~P2;for(i=0;i4;i++)//向右移动{P2=~(mi);delay(1000);}}}/*********************************实验题目要求:设计一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。时间:2012年12月21日程序撰写者:邹康**********************************/#includereg52.hsbitkey1=P2^0;sbitLED0=P2^6;//单片机板子最右边的led灯sbitLED1=P2^5;//右边数第二个灯sbitLED2=P2^4;//右边数第三个灯sbitLED3=P2^3;//右边数第四个灯charnumber=15;unsignedcharnum[4];voidkey()//通过按键对NUMBER的数值进行减计数{staticunsignedcharm=0;if(key1==0){m++;if(m=30){number--;if(number0)number=15;m=0;}}}voidnumber_change()//将十进制转换为二进制{unsignedintn=0;unsignedcharj=0;n=number;for(j=0;j4;j++){num[j]=n%2;n=n/2;}}voidshow()//通过LED将二进制显示出来{LED0=!num[0];LED1=!num[1];LED2=!num[2];LED3=!num[3];}voidmain(){while(1){key();number_change();show();}}/*******************************************实验题目要求:用1个按键控制LED的显示,要求显示3种以上的不同模式。时间:2012年12月22日程序撰写者:邹康********************************************/#includereg52.hsbitled0=P2^3;sbitled1=P2^4;sbitled2=P2^5;sbitled3=P2^6;sbitmode_key=P2^0;charmode=0;voiddelay(unsignedintt)//延时时间大约1ms{unsignedinta,b;for(a=0;at;a++)for(b=0;b120;b++);}voidkey()//通过按键进行模式选择{staticunsignedcharm;if(mode_key==0){m++;if(m=30){mode++;if(mode=3)mode=0;m=0;}}}voidmode_1()//模式一根据开发板,LED循环右移,时间间隔1s左右{unsignedchari=0,c=0;for(i=0;i4;i++){P2|=0xf8;c=~(0x08i);P2&=c;delay(1000);}}voidmode_2()//模式二根据开发板,LED一闪一灭,时间间隔1s左右{led0=0;led1=0;led2=0;led3=0;delay(1000);led0=1;led1=1;led2=1;led3=1;delay(1000);}voidmode_3()//模式三,先循环右移,再循环左移,时间间隔1s左右{unsignedchari=0,n=0,c=0;for(i=0;i4;i++){P2|=0xf8;P2&=~(0x08i);delay(1000);}for(i=0;i4;i++){P2|=0xf8;P2&=~(0x40i);delay(1000);}}voidmain(){while(1){key();switch(mode){case0:mode_1();break;case1:mode_2();break;case2:mode_3();break;}}/*******************************************实验题目要求:用1个按键控制LED的显示,要求显示3种以上的不同模式。时间:2012年12月22日程序撰写者:邹康********************************************/#includereg52.hsbitled0=P2^3;sbitled1=P2^4;sbitled2=P2^5;sbitled3=P2^6;sbitmode_key=P2^0;charmode=0;voiddelay(unsignedintt)//延时时间大约1ms{unsignedinta,b;for(a=0;at;a++)for(b=0;b120;b++);}voidkey()//通过按键进行模式选择{staticunsignedcharm;if(mode_key==0){m++;if(m=30){mode++;if(mode=3)mode=0;m=0;}}}voidmode_1()//模式一根据开发板,LED循环右移,时间间隔1s左右{unsignedchari=0,c=0;for(i=0;i4;i++){P2|=0xf8;c=~(0x08i);P2&=c;delay(1000);}}voidmode_2()//模式二根据开发板,LED一闪一灭,时间间隔1s左右{led0=0;led1=0;led2=0;led3=0;delay(1000);led0=1;led1=1;led2=1;led3=1;delay(1000);}voidmode_3()//模式三,先循环右移,再循环左移,时间间隔1s左右{unsignedchari=0,n=0,c=0;for(i=0;i4;i++){P2|=0xf8;P2&=~(0x08i);delay(1000);}for(i=0;i4;i++){P2|=0xf8;P2&=~(0x40i);delay(1000);}}voidmain(){while(1){key();switch(mode){case0:mode_1();break;case1:mode_2();break;case2:mode_3();break;}}}}/************************************实验题目要求:采用外部中断的方式实现用1个按键控制LED的显示,要求显示3种以上的不同模式。时间:2012年12月22日程序撰写者:邹康*************************************/#includereg52.hsbitled0=P2^3;sbitled1=P2^4;sbitled2=P2^5;sbitled3=P2^6;unsignedcharmode=0;voiddelay(unsignedintt)//延时时间大约1ms{unsignedinta,b;for(a=0;at;a++)for(b=0;b120;b++);}voidmode_1()//模式一根据开发板,LED循环右移,时间间隔1s左右{unsignedchari=0,c=0;for(i=0;i4;i++){P2|=0xf8;c=~(0x08i);P2&=c;delay(1000);}}voidmode_2()//模式二根据开发板,LED一闪一灭,时间间隔1s左右{led0=0;led1=0;led2=0;led3=0;delay(1000);led0=1;led1=1;led2=1;led3=1;delay(1000);}voidmode_3()//模式三,先循环右移,再循环左移,时间间隔1s左右{unsignedchari=0,n=0,c=0;for(i=0;i4;i++){P2|=0xf8;P2&=~(0x08i);delay(1000);}for(i=0;i4;i++){P2|=0xf8;P2&=~(0x40i);delay(1000);}}voidinit(){EA=1;IT0=1;EX0=1;}voidmain(){init();while(1){switch(mode){case0:mode_1();break;case1:mode_2();break;case2:mode_3();break;}}}voidcome0()interrupt0{mode++;if(mode2)mode=0;}/******************************************实验题目要求:采用外部中断的方式实现一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。时间:2012年12月22日程序撰写者:邹康******************************************/#includereg52.hsbitled0=P2^6;sbitled1=P2^5;sbitled2=P2^4;sbitled3=P2^3;unsignedcharnum[4];charnumber=15;voidinit(){EA=1;IT0=1;EX0=1;}voidnum_change(){chari=0,n=0;n=number;for(i=0;i4;i++){num[i]=n%2;n=n/2;}led0=!num[0];led1=!num[1];led2=!num[2];led3=!num[3];}voidmain(){init();while(1){num_change();}}voidcome0()interrupt0{number--;if(number0)number=15;}/************************************实验题目要求:采用外部中断的方式实现用1个按键控制LED的显示,要求显示3种以上的不同模式。时间:2012年12月22日程序撰写者:邹康*************************************/#includereg52.hsbitled0=P2^3;sbitled1=P2^4;sbitled2=P2^5;sbitled3=P2^6;unsignedcharmode=0;voiddelay(unsignedintt)/
本文标题:单片机期末考试编程题
链接地址:https://www.777doc.com/doc-7185180 .html