单片机上机操作考试题部分答案.docx

上传人:b****6 文档编号:7541498 上传时间:2023-05-11 格式:DOCX 页数:26 大小:19.44KB
下载 相关 举报
单片机上机操作考试题部分答案.docx_第1页
第1页 / 共26页
单片机上机操作考试题部分答案.docx_第2页
第2页 / 共26页
单片机上机操作考试题部分答案.docx_第3页
第3页 / 共26页
单片机上机操作考试题部分答案.docx_第4页
第4页 / 共26页
单片机上机操作考试题部分答案.docx_第5页
第5页 / 共26页
单片机上机操作考试题部分答案.docx_第6页
第6页 / 共26页
单片机上机操作考试题部分答案.docx_第7页
第7页 / 共26页
单片机上机操作考试题部分答案.docx_第8页
第8页 / 共26页
单片机上机操作考试题部分答案.docx_第9页
第9页 / 共26页
单片机上机操作考试题部分答案.docx_第10页
第10页 / 共26页
单片机上机操作考试题部分答案.docx_第11页
第11页 / 共26页
单片机上机操作考试题部分答案.docx_第12页
第12页 / 共26页
单片机上机操作考试题部分答案.docx_第13页
第13页 / 共26页
单片机上机操作考试题部分答案.docx_第14页
第14页 / 共26页
单片机上机操作考试题部分答案.docx_第15页
第15页 / 共26页
单片机上机操作考试题部分答案.docx_第16页
第16页 / 共26页
单片机上机操作考试题部分答案.docx_第17页
第17页 / 共26页
单片机上机操作考试题部分答案.docx_第18页
第18页 / 共26页
单片机上机操作考试题部分答案.docx_第19页
第19页 / 共26页
单片机上机操作考试题部分答案.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机上机操作考试题部分答案.docx

《单片机上机操作考试题部分答案.docx》由会员分享,可在线阅读,更多相关《单片机上机操作考试题部分答案.docx(26页珍藏版)》请在冰点文库上搜索。

单片机上机操作考试题部分答案.docx

单片机上机操作考试题部分答案

1.使得8个发光二极管循环点亮,采用定时器方式0使得每个发光二极管点亮的时间为。

#include<>

#include<>

#defineucharunsignedchar

ucharT_count=0;

成下面电路所示的功能,K1,K2对应两个开关按键。

P1口对应发光二极管的状态

K1=0,K2=0

K1=0,K2=1

K1=1,K2=0

K1=1,K2=1

#include<>

#defineuintunsignedint

#defineucharunsignedchar

sbitk1=P3^2;

sbitk2=P3^3;

一个数码管上循环显示“H”“E”“L”“L”“O”,循环的时间为1s。

#include<>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab[]={0xf6,0xf9,0xb8,0xb8,0xbf};

ucharT_count=0;

uchari=1;

voidt0Proc()interrupt1

{

TH0=0x3c;

TL0=0xb0;

if(++T_count==10)

{

P0=tab[i];

i=(i+1)%5;

T_count=0;

}

}

voidmain()

{

TMOD=1;

TH0=0x3c;

TL0=0xb0;

EA=1;

TR0=1;

ET0=1;

P0=tab[0];6个数码管上分别显示自己学号的后六位数字。

#include<>

#include<>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab[]={};一个简易30s的倒计时秒表,秒表的显示通过8个发光二极管显示出来。

#include<>

#defineucharunsignedchar

voiddelay1s()

{

uchari;

for(i=0;i<10;i++)

{

TH1=0x3c;

TL1=0xb0;

TR1=1;用外中断0来控制,去实现下列功能。

其中K1为按键,P1口对应8个发光二极管的状态

无按键按下(循环)

有按键按下

#include<>

#defineuintunsignedint

#defineucharunsignedchar

ucharcodetab[]={0xcc,0x30};

sbitk1=P3^2;

采用定时器方式1使得8个发光二极管按如下方式点亮,循环的时间为2s

#include<>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab[]={0x0f,0xf0,0xcc,0x00};

ucharT_count=0;

uchari=1;

voidt0Proc()interrupt1

{

TH0=0x3c;

TL0=0xb0;

if(++T_count==20)

{

P0=tab[i];

i=(i+1)%4;

T_count=0;

}

}

voidmain()

{

TMOD=1;

TH0=0x3c;

TL0=0xb0;

EA=1;

TR0=1;

ET0=1;

P0=tab[0];一个数码管上循环显示“0”“1”“5”3个数字,循环的时间为1s。

#include<>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab[]={0xbf,0x86,0xed};

ucharT_count=0;

uchari=1;

voidintoProc()interrupt1

{

TH0=0x3c;

TL0=0xb0;

if(++T_count==10)

{

P0=tab[i];

i=(i+1)%3;

T_count=0;

}

}

voidmain()

{

TMOD=1;

TH0=0x3c;

TL0=0xb0;

EA=1;

TR0=1;

ET0=1;

P0=tab[0];4个数码管上稳定显示出“A”“C”“E”“P”四个字符。

#include<>

#defineucharunsignedchar

#defineuintunsignedint

voiddelay(uintx)

{

uchari;

while(x--)

{

for(i=0;i<100;i++);

}

}

voidmain()

{

while

(1)

{

P0=0xf7;一个20s的简易秒表,当按键K1按下时,秒表暂停计数,K2按下时,开始计数。

#include<>

#defineuintunsignedint

#defineucharunsignedchar

uchartab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

sbitk1=P3^2;

sbitk2=P3^3;

ucharT_count=0;

uchari=0;

voiddelay(intx)

{

uchari;

while(x--)

{

for(i=0;i<100;i++);

}

}

voidt0Proc()interrupt1

{

TH0=0x3c;用外中断1来控制,当无按键按下时8个发光二极管循环点亮,循环点亮的时间为1s,有按键按下时,8个发光二极管全部熄灭。

#include<>

#include<>

#defineucharunsignedchar

#defineuintunsignedint

sbitk1=P3^2;

ucharcodetab[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};

ucharT_count=0;

uchari=1;

完成下面电路所示的功能,K1,K2对应两个开关按键。

P1口对应发光二极管的状态

K1=0,K2=0

K1=0,K2=1

K1=1,K2=0

K1=1,K2=1

#include<>

#defineuintunsignedint

#defineucharunsignedchar

sbitk1=P3^2;

sbitk2=P3^3;

成下面电路的功能,P1口对应发光二极管的状态,状态1显示的时间为1s,状态2显示的时间为2s,状态3显示的时间为3s,如此循环

状态1

状态2

状态3

#include<>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab[]={0x05,0x06,0x03};

ucharT_count=0;

ucharState=0;

uchari=1;

voidt0Proc()interrupt1

{

TH0=0x3c;

TL0=0xb0;

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)

{

P1=~tab[i];

i=(i+1)%3;

T_count=0;

State=2;

}

break;

case2:

if(++T_count==30)

{

P1=~tab[i];

i=(i+1)%3;

i=1;

T_count=0;

State=0;

}

break;

}

}

voidmain()

{

TMOD=1;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

P1=~tab[0];

while

(1);

}

18.彩灯系统,实现8个发光二极管从左到右点亮,每个发光二极管点亮的时间为2s,然后从右到左亮,每个发光二极管点亮的时间为.

#include<>

#include<>

#defineucharunsignedchar

ucharcodetab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};

ucharcodetab1[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

ucharState=0;

ucharT_count=0;

uchari=1;

voidt0Proc()interrupt1

{

TH0=0x3c;

TL0=0xb0;

switch(State)

{

case0:

if(++T_count==20)

{

P2=tab[i];

i=(i+1)%8;

if(i==7)

{

State=1;

}

T_count=0;

}

break;

case1:

if(++T_count==15)

{

i=(i+1)%8;

P2=tab1[i];

if(i==7)

{

State=0;

i=1;

}

T_count=0;

}

break;

}

}

voidmain()

{

TMOD=1;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

P2=tab[0];

while

(1);

}

19.在4个数码管上显示出当天的日期。

#include<>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab[]={0x06,0x5b,0x06,0x6f};

voiddelay(intx)

{

uchari;

while(x--)

{

for(i=0;i<120;i++);

}

}

voidmain()

{

P0=tab[0];

P2=tab[1];

P3=tab[2];

P1=tab[3];

delay(500);

}

20.完成下面电路的功能,P1口对应发光二极管的状态,状态1显示的时间为3s,状态2显示的时间为1s,状态3显示的时间为,状态4显示的时间为,如此循环

状态1

状态2

状态3

状态4

#include<>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab[]={0x0c,0x0e,0x0f,0x00};

ucharT_count=0;

ucharState=0;

uchari=1;

voidt0Proc()interrupt1

{

TH0=0x3c;

TL0=0xb0;

switch(State)

{

case0:

if(++T_count==30)

{

P1=~tab[i];

i=(i+1)%4;

T_count=0;

State=1;

}

break;

case1:

if(++T_count==10)

{

P1=~tab[i];

i=(i+1)%4;

T_count=0;

State=2;

}

break;

case2:

if(++T_count==5)

{

P1=~tab[i];

i=(i+1)%4;

T_count=0;

State=3;

}

break;

case3:

if(++T_count==1)

{

P1=~tab[i];

i=(i+1)%4;

T_count=0;

State=0;

}

break;

}

}

voidmain()

{

TMOD=1;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

P1=~tab[0];

while

(1);

}

23.数码管数字显示控制程序设计。

控制要求:

用按键K1和K2分别控制数码管显示数字0~9的顺序,当按下K1键时按从0到9的顺序显示,当按下K2时按从9到0的顺序显示。

时间间隔均为1秒。

硬件电路如图所示。

#include<>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab1[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

ucharcodetab2[]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};

ucharT_count=0;

sbitk1=P1^0;

sbitk2=P1^1;

uchari=0;

voidt0Proc()interrupt1

{

TH0=0x3c;

TL0=0xb0;

if(++T_count==10)

{

T_count=0;

i=(i+1)%10;

}

}

voidmain()

{

TMOD=1;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

P0=~0x3f;

while

(1)

{

if(k1==0&&k2==1)

{

P0=~tab1[i];

}elseif(k1==1&&k2==0)

{

P0=~tab2[i];

}

}

}

24.89C51与PC通过串口通信,单片机采用方式3串行通信,晶振都采用12MHz,波特率为1200Baud。

要求:

当单片机收到PC发来的数据“S”后,将30H-3FH的16个字节发送给乙机,当单片机收到“P”H时就发40H-5FH的32个字节数据。

#include<>

#include<>

char*startPoint;

char*endPoint;

voidsendData()

{

if(startPoint<=endPoint)

{

SBUF=*startPoint;

++startPoint;

}

}

voidstartSend(char*start,char*end)

{

startPoint=start;

endPoint=end;

sendData();

}

voidserialPorc()interrupt4

{

if(TI)

{

TI=0;

sendData();

}

else

{

RI=0;

if(0x53==SBUF)

{

startSend(0x30,0x3f);

}

elseif(0x50==SBUF)

{

startSend(0x40,0x5f);

}

}

}

voidmain()

{

TMOD=0x20;

TH1=0xe6;

TL1=0xe6;

TR1=1;

SCON=0xd0;

EA=1;

ES=1;

while

(1);

}

25.交通控制系统,如下图所示,是交叉路口,要求:

绿灯亮9秒后,黄灯闪3秒,后红灯亮9秒,两个数码管分别显视各种灯所剩余时间。

#include<>

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetab[]={0x6f,0x7f,0x07,0x7d,0x6d,0x66,0x4f,0x5b,0x06,0x3f};

ucharcodetab1[]={0x4f,0x5b,0x06,0x3f};

sbitRED_A=P0^0;

sbitYELLOW_A=P0^1;

sbitGREEN_A=P0^2;

sbitRED_B=P0^3;

sbitYELLOW_B=P0^4;

sbitGREEN_B=P0^5;

ucharOperation_Type=1;//操作类型变量

ucharT_count=0;

uchari=0;

voidt0Proc()interrupt1

{

TH0=0x3c;

TL0=0xb0;

switch(Operation_Type)

{

case1:

//红灯亮

RED_A=0;

YELLOW_A=1;

GREEN_A=1;

RED_B=0;

YELLOW_B=1;

GREEN_B=1;

if(++T_count==90)

{

T_count=0;

Operation_Type=2;

i=0;

}

if(T_count%10==0)

{

P3=~tab[i];

P1=~tab[i];

i=(i+1)%10;

}

break;

case2:

//黄灯闪

RED_A=1;

YELLOW_A=~YELLOW_A;

GREEN_A=1;

RED_B=1;

YELLOW_B=~YELLOW_B;

GREEN_B=1;

if(++T_count==30)

{

T_count=0;

Operation_Type=3;

i=0;

}

if(T_count%10==0)

{

P3=~tab1[i];

P1=~tab1[i];

i=(i+1)%3;

}

break;

case3:

//绿灯亮

RED_A=1;

YELLOW_A=1;

GREEN_A=0;

RED_B=1;

YELLOW_B=1;

GREEN_B=0;

if(++T_count==90)

{

T_count=0;

Operation_Type=1;

i=0;

}

if(T_count%10==0)

{

P3=~tab[i];

P1=~tab[i];

i=(i+1)%10;

}

break;

}

}

voidmain()

{

TMOD=1;

TH0=0x3c;

TL0=0xb0;

EA=1;

ET0=1;

TR0=1;

P1=~tab[0];

P3=~tab[0];

while

(1);

}

26用外部中断1实现加计数功能,并将计数值输出到数码管上显示。

#include<>

#defineucharunsignedchar

#defineuintunsignedint

//0~9的段码

ucharcodeDSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

//计数值分解后各个待显示的数位

ucharDSY_Buffer[]={0,0,0};

ucharCount=0;

sbitClear_Key=P3^6;

//数码管上显示计数值

voidShow_Count_ON_DSY()

{

DSY_Buffer[2]=Count/100;//获取3个数

DSY_Buffer[1]=Count%100/10;

DSY_Buffer[0]=Count%10;

if(DSY_Buffer[2]==0)//高位为0时不显示

{

DSY_Buffer[2]=0x0a;

if(DSY_Buffer[1]==0)//高位为0,若第二位为0同样不显示

{

DSY_Buffer[1]=0x0a;

}

}

P0=DSY_CODE[DSY_Buffer[0]];

P1=DSY_CODE[DSY_Buffer[1]];

P2=DSY_CODE[DSY_Buffer[2]];

}

//主程序

voidmain()

{

P0=0x00;

P1=0x00;

P2=0x00;

EA=1;

EX1=1;

IT1=1;//下降沿触发

while

(1)

{

if(Clear_Key==0)

{

Count=0;//清0

}

Show_Count_ON_DSY();

}

}

//INT1中断函数

voidEX_INT1()interr

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2