单片机期末考试编程题资料.docx
- 文档编号:25037804
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:25
- 大小:17.05KB
单片机期末考试编程题资料.docx
《单片机期末考试编程题资料.docx》由会员分享,可在线阅读,更多相关《单片机期末考试编程题资料.docx(25页珍藏版)》请在冰豆网上搜索。
单片机期末考试编程题资料
/***************************************
实验题目要求:
P23-P26口做输出口,接发光二极管,编写并调试程序,使其闪烁。
时间:
2012年12月21日
程序撰写者:
邹康
*****************************************/
#include
voiddelay(unsignedintt)//软延时大致时间为1ms
{
unsignedinta,b;
for(a=0;a for(b=0;b<120;b++); } voidmain() { while (1) { P2=~P2; delay(1000);//延时1s } }/********************************************************* 实验题目要求: P23-P26口做输出口,接发光二极管,编写并调试跑马灯程序。 时间: 2012年12月21日 程序撰写者: 邹康 ***********************************************************/ #include voiddelay(unsignedintt)//延时1ms左右 { unsignedinta,b; for(a=0;a for(b=0;b<120;b++); } voidmain() { unsignedchari=0,m=0; while (1) { for(i=0;i<4;i++)//向左移动 { P2=~(0x08< delay(1000); } m=~P2; for(i=0;i<4;i++)//向右移动 { P2=~(m>>i); delay(1000); } } }/********************************* 实验题目要求: 设计一个二进制减1计数器,按一次键,减1,并用4个LED显示计数结果,减至0时,重新从15开始计数。 时间: 2012年12月21日 程序撰写者: 邹康 **********************************/ #include sbitkey1=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(number<0) number=15; m=0; } } } voidnumber_change()//将十进制转换为二进制 { unsignedintn=0; unsignedcharj=0; n=number; for(j=0;j<4;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日 程序撰写者: 邹康 ********************************************/ #include sbitled0=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;a for(b=0;b<120;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;i<4;i++) { P2|=0xf8; c=~(0x08< 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;i<4;i++) { P2|=0xf8; P2&=~(0x08< delay(1000); } for(i=0;i<4;i++) { P2|=0xf8; P2&=~(0x40>>i); 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日 程序撰写者: 邹康 ********************************************/ #include sbitled0=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;a for(b=0;b<120;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;i<4;i++) { P2|=0xf8; c=~(0x08< 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;i<4;i++) { P2|=0xf8; P2&=~(0x08< delay(1000); } for(i=0;i<4;i++) { P2|=0xf8; P2&=~(0x40>>i); 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日 程序撰写者: 邹康 *************************************/ #include sbitled0=P2^3; sbitled1=P2^4; sbitled2=P2^5; sbitled3=P2^6; unsignedcharmode=0; voiddelay(unsignedintt)//延时时间大约1ms { unsignedinta,b; for(a=0;a for(b=0;b<120;b++); } voidmode_1()//模式一根据开发板,LED循环右移,时间间隔1s左右 { unsignedchari=0,c=0; for(i=0;i<4;i++) { P2|=0xf8; c=~(0x08< 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;i<4;i++) { P2|=0xf8; P2&=~(0x08< delay(1000); } for(i=0;i<4;i++) { P2|=0xf8; P2&=~(0x40>>i); 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(mode>2) mode=0; }/****************************************** 实验题目要求: 采用外部中断的方式实现一个二进制减1计数器,按一次键,减1, 并用4个LED显示计数结果,减至0时,重新从15开始计数。 时间: 2012年12月22日 程序撰写者: 邹康 ******************************************/ #include sbitled0=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;i<4;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(number<0) number=15; }/************************************ 实验题目要求: 采用外部中断的方式实现用1个按键控制LED的显示,要求显示3种以上的不同模式。 时间: 2012年12月22日 程序撰写者: 邹康 *************************************/ #include sbitled0=P2^3; sbitled1=P2^4; sbitled2=P2^5; sbitled3=P2^6; unsignedcharmode=0; voiddelay(unsignedintt)//延时时间大约1ms { unsignedinta,b; for(a=0;a for(b=0;b<120;b++); } voidmode_1()//模式一根据开发板,LED循环右移,时间间隔1s左右 { unsignedchari=0,c=0; for(i=0;i<4;i++) { P2|=0xf8; c=~(0x08< 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;i<4;i++) { P2|=0xf8; P2&=~(0x08< delay(1000); } for(i=0;i<4;i++) { P2|=0xf8; P2&=~(0x40>>i); 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(mode>2) mode=0; }/**************************************** 实验题目要求: 设计1个秒计数器,每秒计1次数,在LED上显示出来,计至16清零后重新计数 时间: 2012年12月22日 程序撰写者: 邹康 ******************************************/ #include unsignedintk=0; charnumber=0; unsignedcharnum[4]; sbitled0=P2^3; sbitled1=P2^4; sbitled2=P2^5; sbitled3=P2^6; voidinit() { EA=1; ET0=1; TMOD=0X01; TH0=(65536-50000)/256; TL0=(65536-50000)%256; TR0=1; } voidnum_change() { unsignedchari=0,n=0; n=number; for(i=0;i<4;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(); } } voidtime0()interrupt1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; k++; if(k>=20) { k=0; number++; if(number>15) number=0; } }/******************************************** 实验题目要求: 在上题基础上用按键控制秒计数器的启停,按一次键开始计数,按2次停止计数,按3次又开始计数…。 时间: 2012年12月22日 程序撰写者: 邹康 ********************************************/ #include sbitled0=P2^3; sbitled1=P2^4; sbitled2=P2^5; sbitled3=P2^6; sbitkeyz=P2^0; unsignedcharflag=0; unsignedchark=0,number=0; unsignedcharnum[4]; voidinit() { EA=1; ET0=1; TH0=(65536-50000)%256; TL0=(65536-50000)/256; } voidkey() { unsignedintm=0; if(keyz==0) { m++; if(m>=30) { flag=! flag; m=0; } } } voidnum_change() { unsignedchari=0,n=0; n=number; for(i=0;i<4;i++) { num[i]=n%2; n=n/2; } led0=! num[0]; led1=! num[1]; led2=! num[2]; led3=! num[3]; } voidmain() { init(); while (1) { key(); if(flag==0) TR0=1; else TR0=0; num_change(); } } voidtime0()interrupt1 { TH0=(65536-50000)%256; TL0=(65536-50000)/256; k++; if(k>19) { number++; if(number>15) number=0; k=0; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 期末考试 编程 资料