单片机上机操作考试题部分答案Word格式文档下载.docx
《单片机上机操作考试题部分答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机上机操作考试题部分答案Word格式文档下载.docx(35页珍藏版)》请在冰豆网上搜索。
2.完成下面电路所示的功能,K1,K2对应两个开关按键。
P1口对应发光二极管的状态
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
K1=0,K2=0
○
K1=0,K2=1
●
K1=1,K2=0
K1=1,K2=1
#defineuintunsignedint
sbitk1=P3^2;
sbitk2=P3^3;
//延时
voiddelay(uintx)
uchari;
while(--x)
for(i=0;
i<
120;
i++);
while
(1)
if((k1==0)&
&
(k2==0))//K1、K2同时按下
{
P1=0x00;
delay(10);
}
elseif((k1==0)&
(k2==1))//K1按下,K2不按
P1=0xcc;
elseif((k1==1)&
(k2==0))//K2按下,K1不按
P1=0xf0;
else
P1=0xff;
3.在一个数码管上循环显示“H”“E”“L”“L”“O”,循环的时间为1s。
ucharcodetab[]={0xf6,0xf9,0xb8,0xb8,0xbf};
uchari=1;
voidt0Proc()interrupt1
TH0=0x3c;
TL0=0xb0;
if(++T_count==10)
P0=tab[i];
i=(i+1)%5;
TMOD=1;
P0=tab[0];
//初始化P0口
4.在6个数码管上分别显示自己学号的后六位数字。
ucharcodetab[]={};
//学号自己设置
while(x--)
100;
uchark;
ucharwei=0x01;
P0=~tab[0];
P2=0x01;
delay(1000);
for(k=1;
k<
6;
k++)
wei=wei<
<
1;
P0=~tab[k];
//发送数字段码
P2=wei;
//发送位码
delay(1000);
5.做一个简易30s的倒计时秒表,秒表的显示通过8个发光二极管显示出来。
voiddelay1s()
for(i=0;
10;
i++)
TH1=0x3c;
TL1=0xb0;
TR1=1;
//启动T1
while(!
TF1);
//判断T1有无请求
TF1=0;
uchart;
TMOD=0x10;
//选择T1计时
for(i=30;
i>
0;
i--)
t=(((i/10)<
4)|(i%10));
//高四位显示十位,低四位显示个位
P1=~t;
delay1s();
6.使用外中断0来控制,去实现下列功能。
其中K1为按键,P1口对应8个发光二极管的状态
无按键按下(循环)
有按键按下
ucharcodetab[]={0xcc,0x30};
voidint0Proc()interrupt0
P1=0xf0;
ucharj;
EX0=1;
IE0=1;
if(k1==1)//未按下
for(j=0;
j<
2;
j++)
{
P1=tab[j];
delay(500);
}
8.采用定时器方式1使得8个发光二极管按如下方式点亮,循环的时间为2s
ucharcodetab[]={0x0f,0xf0,0xcc,0x00};
if(++T_count==20)
i=(i+1)%4;
}
9.在一个数码管上循环显示“0”“1”“5”3个数字,循环的时间为1s。
ucharcodetab[]={0xbf,0x86,0xed};
voidintoProc()interrupt1
i=(i+1)%3;
10.在4个数码管上稳定显示出“A”“C”“E”“P”四个字符。
P0=0xf7;
//A
P2=0xb9;
//C
P3=0xf9;
//E
P1=0xf3;
//P
delay(500);
12.做一个20s的简易秒表,当按键K1按下时,秒表暂停计数,K2按下时,开始计数。
uchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchari=0;
voiddelay(intx)
//恢复定时器0初值
if(++T_count==10)//100ms*10=1s转换状态
i++;
P0=tab[i/10];
P2=tab[i%10];
if(i==20)
i=0;
{
P0=tab[i];
P2=tab[i];
TMOD=0x01;
if(k1==0&
k2==1)
EA=0;
ET0=0;
TR0=0;
break;
elseif(k1==1&
k2==0)
EA=1;
ET0=1;
TR0=1;
14.使用外中断1来控制,当无按键按下时8个发光二极管循环点亮,循环点亮的时间为1s,有按键按下时,8个发光二极管全部熄灭。
ucharcodetab[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
//T0定时
voidT0Proc()interrupt1
P1=~tab[i];
i=(i+1)%8;
//INT1中断函数
voidInt1Proc()interrupt2
P1=0xff;
EA=0;
EX1=0;
IT1=0;
ET0=0;
TR0=0;
//主程序
EX1=1;
IT1=1;
P1=0xfe;
16.完成下面电路所示的功能,K1,K2对应两个开关按键。
if((k1==1)&
(k2==1))//都未按下0:
未按下,1:
按下
(k2==0))//k2按下,k1未按下
(k2==1))//k1按下,k2未按下
P1=0xcf;
(k2==0))//都按下
P1=0x55;
17.完成下面电路的功能,P1口对应发光二极管的状态,状态1显示的时间为1s,状态2显示的时间为2s,状态3显示的时间为3s,如此循环
状态1
状态2
状态3
ucharcodetab[]={0x05,0x06,0x03};
ucharState=0;
switch(State)
case0:
if(++T_count==10)
P1=~tab[i];
i=(i+1)%3;
T_count=0;
State=1;
break;
case1:
if(++T_count==20)
State=2;
case2:
if(++T_count==30)
i=1;
State=0;
P1=~tab[0];
18.彩灯系统,实现8个发光二极管从左到右点亮,每个发光二极管点亮的时间为2s,然后从右到左亮,每个发光二极管点亮的时间为1.5s.
ucharcodetab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
ucharcodetab1[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
P2=tab[i];
i=(i+1)%8;
if(i==7)
State=1;
}
if(++T_count==15)
P2=tab1[i];
State=0;
i=1;
P2=tab[0];
19.在4个数码管上显示出当天的日期。
ucharcodetab[]={0x06,0x5b,0x06,0x6f};
P2=tab[1];
P3=tab[2];
P1=tab[3];
delay(500);
20.完成下面电路的功能,P1口对应发光二极管的状态,状态1显示的时间为3s,状态2显示的时间为1s,状态3显示的时间为0.5s,状态4显示的时间为0.1s,如此循环
状态4
ucharcodetab[]={0x0c,0x0e,0x0f,0x00};
i=(i+1)%4;
if(++T_count==5)
State=3;
case3:
if(++T_count==1)
23.数码管数字显示控制程序设计。
控制要求:
用按键K1和K2分别控制数码管显示数字0~9的顺序,当按下K1键时按从0到9的顺序显示,当按下K2时按从9到0的顺序显示。
时间间隔均为1秒。
硬件电路如图所示。
ucharcodetab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodetab2[]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};
sbitk1=P1^0;
sbitk2=P1^1;
voidt0Proc