单片机上机考试习题.docx
《单片机上机考试习题.docx》由会员分享,可在线阅读,更多相关《单片机上机考试习题.docx(14页珍藏版)》请在冰豆网上搜索。
单片机上机考试习题
实验二流水灯
问题1四灯四键
#include
voidmain()
{
unsignedchari;
P0=0xff;
while
(1)
{i=P1;P0=i;}
}
问题2走马灯
#include
voidmain(void)
{
inti,j,k;
P0=0xfe;
while
(1)
{
i=0xfe;
for(k=0;k<8;k++)
{
P0=i;
i<<=1;
i++;
for(j=0;j<20000;j++);
}
}
}
实验三外部中断
问题1两中断分高低优先级
#include
sbitP15=P1^5;
unsignedinti;
voidmain()
{
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
PX1=1;
P0=0X55;
P15=0;
while
(1)
{
P0=0X55;
}
}
voidxx0(void)interrupt0
{
for(i=0;i<60000;i++)P0=0x0f;
}
voidxx1(void)interrupt2
{
P0=0x00;
P15=1;
for(i=0;i<10000;i++);
P15=0;
}
问题2一键八灯中断实现+1
#include
sbitP10=P1^0;
chari;
voidmain(void)
{
i=0;
EA=1;
EX0=1;
IT0=1;
while
(1);
}
voidxt0(void)interrupt0
{
i++;
P0=~i;
}
实验四定时器中断
问题1定时器三灯亮灭
#include
sbitP01=P0^1;
sbitP02=P0^2;
sbitP00=P0^0;
chari,j;
main()
{
i=0;
j=0;
TMOD=0X01;
TH0=0Xec;
TL0=0X78;
EA=1;
ET0=1;
TR0=1;
while
(1);
}
voidxx0(void)interrupt1
{
TH0=0Xec;
TL0=0X78;
i++;
if(i==25)
{
i=0;
j++;
if(j==1)
P02=!
P02;
elseif(j==2)
{
P01=!
P01;
P02=!
P02;
}
elseif(j==3)
{
P02=!
P02;
}
elseif(j==4)
{
P00=!
P00;
P01=!
P01;
P02=!
P02;
j=0;
}
}
}
问题2定时器一秒闪一次
#include
sbitP00=P0^0;
chari;
main()
{
i=0;
TMOD=0X01;
TH0=0Xd8;
TL0=0Xf0;
EA=1;
ET0=1;
TR0=1;
P0=0xff;
while
(1);
}
voidxx0(void)interrupt1
{
TH0=0Xd8;
TL0=0Xf0;
i++;
if(i==50)
{i=0;P00=!
P00;}
}
问题3数码管定时器
#include
unsignedcharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedchari,j,k,m,n,dbbuf[2];
voiddesplay()
{
P1=03;
P0=dbbuf[0];
P1=0x02;
for(n=0;n<200;n++);
P1=03;
P0=dbbuf[1];
P1=0x01;
for(n=0;n<200;n++);
}
voidmain()
{
i=0;
j=0;
TMOD=0X01;
TH0=0Xd8;
TL0=0Xf0;
EA=1;
ET0=1;
TR0=1;
while
(1)
{
desplay();
}
}
voidxx0(void)interrupt1
{
TH0=0Xd8;
TL0=0Xf0;
i++;
if(i==100)
{
i=0;
j++;
j=j%100;
k=j/10;
m=j%10;
dbbuf[0]=tab[k];
dbbuf[1]=tab[m];
}
}
实验五串口通信
问题1双机接发
#include
sbitP10=P1^0;
voidmain()
{
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
SCON=0X50;
while
(1)
{
while(!
RI);
RI=0;
P0=SBUF;
}
}
问题2虚拟
#include
sbitP10=P1^0;
voidmain()
{
TMOD=0X20;
TH1=0XFD;
TL1=0XFD;
TR1=1;
SCON=0X50;
while
(1)
{
while(!
RI);
RI=0;
P0=SBUF;
SBUF=P0;
while(!
TI);
TI=0;
}
}
问题六步进电机
问题1测量步距角约0.17°不用软件仿真直接连硬件
#include
unsignedinti,j;
voidmain()
{
while
(1)
{
for(j=0;j<200;j++)
{
P1=0xfe;
for(i=0;i<300;i++);
P1=0xfd;
for(i=0;i<300;i++);
P1=0xfb;
for(i=0;i<300;i++);
P1=0xf7;
for(i=0;i<300;i++);
}
while
(1);
}
}
问题2使步进电机转180°不用软件仿真直接连硬件
#include
unsignedinti,j;
voidmain()
{
while
(1)
{
for(j=0;j<267;j++)
{
P1=0xfe;
for(i=0;i<300;i++);
P1=0xfd;
for(i=0;i<300;i++);
P1=0xfb;
for(i=0;i<300;i++);
P1=0xf7;
for(i=0;i<300;i++);
}
while
(1);
}
}
问题3使步进电机转起来
#include
unsignedinti;
voidmain()
{
while
(1)
{
P1=0xfe;
for(i=0;i<20000;i++);
P1=0xfd;
for(i=0;i<20000;i++);
P1=0xfb;
for(i=0;i<20000;i++);
P1=0xf7;
for(i=0;i<20000;i++);
}
}
实验7电子琴
#include
chark;
sbitP00=P0^0;
sbitP10=P1^0;
sbitP11=P1^1;
sbitP12=P1^2;
sbitP13=P1^3;
sbitP14=P1^4;
sbitP15=P1^5;
sbitP16=P1^6;
unsignedintcodetab[]={0xfc44,0xfcac,0xfd09,0xfd34,0xfd82,0xfdc8,0xfe06};
voidmain()
{TMOD=0X01;
EA=1;
ET0=1;
P00=0;
while
(1)
{
if(P10==0)
{
k=0;
TH0=tab[0]/256;
TL0=tab[0]%256;
TR0=1;
while(P10==0);
TR0=0;
P00=0;
}
elseif(P11==0)
{
k=1;
TH0=tab[1]/256;
TL0=tab[1]%256;
TR0=1;
while(P11==0);
TR0=0;
P00=0;
}
elseif(P12==0)
{
k=2;
TH0=tab[2]/256;
TL0=tab[2]%256;
TR0=1;
while(P12==0);
TR0=0;
P00=0;
}
elseif(P13==0)
{
k=3;
TH0=tab[3]/256;
TL0=tab[3]%256;
TR0=1;
while(P13==0);
TR0=0;
P00=0;
}
elseif(P14==0)
{
k=4;
TH0=tab[4]/256;
TL0=tab[4]%256;
TR0=1;
while(P14==0);
TR0=0;
P00=0;
}
elseif(P15==0)
{
k=5;
TH0=tab[5]/256;
TL0=tab[5]%256;
TR0=1;
while(P15==0);
TR0=0;
P00=0;
}
elseif(P16==0)
{
k=6;
TH0=tab[6]/256;
TL0=tab[6]%256;
TR0=1;
while(P16==0);
TR0=0;
P00=0;
}
}
}
voidxx0(void)interrupt1
{
TH0=tab[k]/256;
TL0=tab[k]%256;
P00=!
P00;
}