单片机期末考试编程题资料.docx
《单片机期末考试编程题资料.docx》由会员分享,可在线阅读,更多相关《单片机期末考试编程题资料.docx(25页珍藏版)》请在冰豆网上搜索。
单片机期末考试编程题资料
/***************************************
实验题目要求:
P23-P26口做输出口,接发光二极管,编写并调试程序,使其闪烁。
时间:
2012年12月21日
程序撰写者:
邹康
*****************************************/
#include
voiddelay(unsignedintt)//软延时大致时间为1ms
{
unsignedinta,b;
for(a=0;afor(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;afor(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;afor(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;afor(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;afor(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;afor(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;
}
}