内容正文:
《单片机的C语言程序设计及应用》(电工版第4版)
第3章 P0~P3口的C51编程 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1.在51单片机内部并行的I/O接口的数量是( )
A.2 B.4 C.8 D.32
答案:B
2.在51系列单片机的输入/输出端口中,哪个输入/输出端口执行输出功能时没有内部上拉电阻?( )
A.P0 B.P1 C.P2 D.P3
答案:A
3.若P0口外接LED,且LED阳极接电源,阴极接P0引脚,要使LED点亮,P0口应输出( )
A.高电平 B.低电平 C.高阻态 D.悬空
答案:A
4.P1口在8051单片机中通常用于:
A.地址/数据总线 B.通用I/O口 C.串口通信 D.外部中断
答案:B
5.若要使P1口所有引脚输出高电平,应执行:
A.P1=0x00; B.P1=0xFF; C.P1=1; D.P1=1;
答案:B
6.P3口的第二功能不包括:
A.串口通信(TXD/RXD) B.外部中断(INT0/INT1)
C.I2C通信(SDA/SCL) D.定时器输入(T0/T1)
答案:C
7.若P1口连接共阴极数码管,段选信号由P1输出,要使数码管显示“0”,P1应赋值为:
A.0xC0 B.0x3F C.0x00 D.0xFF
答案:B
8.以下可以翻转P1.7的电平的是( )
A.P1.7=~P1.7; B.P1^=0x80; C.P1.7=!P1.7; D.以上均可
答案:D
9.将P1口低4位设为高电平,高4位设为低电平的代码是( )
A.P1=0x0F; B.P1=0xF0; C.P1M1=0x0F; D.无法实现
答案:A
10.若要使共阳极连接的7段式数码管显示“0”,则数码管的7段码应该是( )
A.0xC0 B.0xF9 C.0xA4 D.0xB0
答案:A
二、判断题(本题共10小题,每题2分,共20分)
11. P0口作为通用I/O口使用时必须外接上拉电阻才能正常输出高电平。( )
答案:正确
12. P0口的所有引脚都可用作外部中断输入。( )
答案:错误
13. 访问外部存储器时,P0口先输出低8位地址后传输数数据( )
答案:正确
14. P2口在扩展外部存储器时用作高8位地址总线。( )
答案:正确
15. P2.5引脚的第二功能是定时器T0的外部输入。( )
答案:错误
16. P2口的输出级结构与P1口完全相同。( )
答案:正确
17. P3.2(INT0)和P3.3(INT1)引脚的第二功能是外部中断输入。( )
答案:正确
18. P3口的全部8个引脚都具有第二功能。( )
答案:正确
19. P3.6(WR)和P3.7(RD)用于外部RAM的读写控制。。( )
答案:正确
20. 所有I/O口在复位后都可以直接作为输入口使用。( )
答案:错误
三、填空题(本题共5小题,每题2分,共10分)
21. 单片机的双向口具有高电平、低电平和 3种状态。
答案:高组态
22. 将P0口设置为输入模式时,需要先向端口写入 。
答案:0xff
23. 在C51中,读取P1.4引脚状态的语法是:bit val=______。
答案:P1^4
24. 将P2口全部引脚设置为输出的C51语句是______。
答案:0x00
25. 若要使P1口低4位输出高电平,高4位输出低电平,应执行P1=______。
答案:0x0f
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共30分)
26. 下面程序的功能是实现P1.4所接的发光二极管亮、灭闪烁。请填空。
图3-1
#include<reg51.h>
【1】 LED3=P1^4;
void delay(unsigned int d)
{ while(【2】>0); }
void main( )
{ while(【3】)
{ LED3=0; delay(50000);
LED3=1; delay(50000); }}
答案:
【1】sbit
【2】--d
【3】1
解析:
【1】sbit 是 8051 单片机特有的关键字,用于定义可位寻址的特殊功能寄存器(SFR)中的位。
【2】while(- -d>0) 会持续循环直到 d 减为 0,每次循环消耗一定的机器周期,从而实现延时效果。
【3】while(1) 构成无限循环,使 LED 持续闪烁。
在循环中,LED3=0 点亮 LED(低电平有效),LED3=1 熄灭 LED,配合延时函数实现闪烁效果。
27. 已知发光二极管阳极接P2口,阴极接低电平。下面程序的功能是实现P2口所接的发光二极管亮、灭闪烁。请填空。
#include<reg51.h>
void 【1】 (unsigned int x)
{ unsigned int t1,t2;
for(t1=【2】;t1>0;t1--)
for(t2=110;t2>0;t2--);}
void main( )
{ while(1)
{ P2=【3】;
delay(500);
P2=0X00;
delay(500); }}
答案:
【1】delay
【2】x
【3】0xff
解析:
【1】延迟函数,因为在主函数中调用的延迟函数是 delay(500),所以延迟函数的函数名为delay
【2】外层循环计数器 t1 初始化为传入的参数 x,控制延时的基本单位。
【3】P2=0xff 将P2口所有引脚置为高电平,此时阳极为高电平,阴极为低电平,LED亮。P2=0x00 将P2口所有引脚置为低电平,此时阳极为低电平,阴极为低电平,LED灭。
28. 电路如图3-2所示,通过 AT89C51单片机的P1口、P3口作为两位共阳极数码管静态显示的控制口。编程实现显示“Ab”的程序。请填空。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar data dis_buf[2];
uchar code table[ ]={【1】,0x7c};
void display(【2】)
{ uchar segcode;
segcode=dis_buf[0];
segcode=table[segcode];
P1=segcode;
segcode=dis_buf[1];
segcode=table[segcode];
P3=segcode;
void main(void)
{ dis_buf[0]=0;
dis_buf[1]=1;
【3】( );
【4】(1);}
void display (【4】)
{ P1=table[dis_buf[0]];
P3=table[dis_buf[1]];}
【1】0x77
【2】void
【3】display
【4】while
解析:
【1】共阳极数码管中A的段码为0
【2】函数 display() 的参数列表应为 void,表示无参数。
【3】初始化后需立即调用 display()函数,将初始值dis_buf[0]=0 和 dis_buf[1]=1 对应的段码输出到P1和P3口。
【4】while(1) 构成无限循环,确保数码管持续显示。若无此循环,程序执行一次 display() 后将退出。
五、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处4分,共20分)
29. 如图3-3 P1口作为并行接口按键的输入口,用P3口接一共阳极LED显示器,编程显示按键的键号0~7。开始时显示8。程序中有五处错误,请改正。
图3-3
L1 #include<reg51.h>
L2 #define uchar unsigned char
L3 #define uint unsigned int
L4 uchar data keycode=6
L5 uchar data dir_buf=1;
L6 code uchar dirtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xbf};
L7 code uchar keytab[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
L8 void dl_xms(uint xms)
L9 { uint t1,t2;
L10 for(t1=8;t1>0;t1--)
L11 for(t2=110;t2>0;t2--);}
L12 void keyscan( )
L13 { uchar key1;
L14 P1=0x00; //
L15 key1=P1;
L16 if(key1!=0xff)
L17 { dl_xms(10);
L18 P1=0xff;
L19 key1=P1;
L20 if(key1!=0xff)
L21 { keycode=0;
L22 while(key1!=keytab[keycode])
L23 { keycode=keycode+1;
L24 if(keycode==8)
L25 break;}}}}
L26 void main( )
L27 { P3=dirtab[7];//
L28 while( )//
L29 { keyscan( );
L30 dir_buf=keycode;
L31 P3=dirtab[dir_buf];}}
答案:
【1】L4 uchar data keycode=8;
【2】L10 for(t1=xms;t1>0;t1--)
【3】L14 P1=0xff;
【4】L27 { P3=dirtab[8];
【5】L28 while(1)
解析:
【1】L4 因为数码管是0~7循环显示,一共是8个数。所以uchar data keycode=8;且代码后面应该以;结束。
【2】L10 for(t1=xms;t1>0;t1--) L10是固定的延迟值,用xms可以在调用时自己设定延迟的值
【3】L14 作为输入口时,P1 应先置高电平(读按键前需拉高)
【4】L27 初始应显示 8,对应dirtab[8]。
【5】L28 无限循环条件缺失。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$
《单片机的C语言程序设计及应用》(电工版第4版)
第3章 P0~P3口的C51编程 章节过关卷
考试时间:90分钟 满分:100分
姓名 班级 学号
1、 单项选择题(本题共20小题,每题2分,共40分)
1.在51单片机内部并行的I/O接口的数量是( )
A.2 B.4 C.8 D.32
2.在51系列单片机的输入/输出端口中,哪个输入/输出端口执行输出功能时没有内部上拉电阻?( )
A.P0 B.P1 C.P2 D.P3
3.若P0口外接LED,且LED阳极接电源,阴极接P0引脚,要使LED点亮,P0口应输出( )
A.高电平 B.低电平 C.高阻态 D.悬空
4.P1口在8051单片机中通常用于( )
A.地址/数据总线 B.通用I/O口 C.串口通信 D.外部中断
5.若要使P1口所有引脚输出高电平,应执行( )
A.P1=0x00; B.P1=0xFF; C.P1=1; D.P1=1;
6.P3口的第二功能不包括( )
A.串口通信(TXD/RXD) B.外部中断(INT0/INT1)
C.I2C通信(SDA/SCL) D.定时器输入(T0/T1)
7.若P1口连接共阴极数码管,段选信号由P1输出,要使数码管显示“0”,P1应赋值为( )
A.0xC0 B.0x3F C.0x00 D.0xFF
8.以下可以翻转P1.7的电平的是( )
A.P1.7=~P1.7; B.P1^=0x80; C.P1.7=!P1.7; D.以上均可
9.将P1口低4位设为高电平,高4位设为低电平的代码是( )
A.P1=0x0F; B.P1=0xF0; C.P1M1=0x0F; D.无法实现
10.若要使共阳极连接的7段式数码管显示“0”,则数码管的7段码应该是
A.0xC0 B.0xF9 C.0xA4 D.0xB0
二、判断题(本题共10小题,每题2分,共20分)
11. P0口作为通用I/O口使用时必须外接上拉电阻才能正常输出高电平。( )
12. P0口的所有引脚都可用作外部中断输入。( )
13. 访问外部存储器时,P0口先输出低8位地址后传输数数据。( )
14. P2口在扩展外部存储器时用作高8位地址总线。( )
15. P2.5引脚的第二功能是定时器T0的外部输入。( )
16. P2口的输出级结构与P1口完全相同。( )
17. P3.2(INT0)和P3.3(INT1)引脚的第二功能是外部中断输入。( )
18. P3口的全部8个引脚都具有第二功能。( )
19. P3.6(WR)和P3.7(RD)用于外部RAM的读写控制。( )
20. 所有I/O口在复位后都可以直接作为输入口使用。( )
三、填空题(本题共5小题,每题2分,共10分)
21. 单片机的双向口具有高电平、低电平和 3种状态。
22. 将P0口设置为输入模式时,需要先向端口写入 。
23. 在C51中,读取P1.4引脚状态的语法是:bit val=______;
24. 将P2口全部引脚设置为输出的C51语句是______。
25. 若要使P1口低4位输出高电平,高4位输出低电平,应执行P1=______;
四、程序填空。按照题目要求,将正确的内容填入相应位置,使得程序完整(每空3分,共30分)
26. 下面程序的功能是实现P1.4所接的发光二极管亮、灭闪烁。请填空。
图3-1
#include<reg51.h>
【1】 LED3=P1^4;
void delay(unsigned int d)
{ while(【2】>0); }
void main( )
{ while(【3】)
{ LED3=0; delay(50000);
LED3=1; delay(50000); }}
27. 已知发光二极管阳极接P2口,阴极接低电平。下面程序的功能是实现P2口所接的发光二极管亮、灭闪烁。请填空。
#include<reg51.h>
void 【1】 (unsigned int x)
{ unsigned int t1,t2;
for(t1=【2】;t1>0;t1--)
for(t2=110;t2>0;t2--);}
void main( )
{ while(1)
{ P2=【3】;
delay(500);
P2=0X00;
delay(500); }}
28. 电路如图3-2所示,通过 AT89C51单片机的P1口、P3口作为两位共阳极数码管静态显示的控制口。编程实现显示“Ab”的程序。请填空。
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar data dis_buf[2];
uchar code table[ ]={【1】,0x7c};
void display(【2】)
{ uchar segcode;
segcode=dis_buf[0];
segcode=table[segcode];
P1=segcode;
segcode=dis_buf[1];
segcode=table[segcode];
P3=segcode;
void main(void)
{ dis_buf[0]=0;
dis_buf[1]=1;
【3】( );
【4】(1);}
五、阅读程序,修改程序中的错误,不得增行或删行,也不得更改程序结构。请指出错误代码所在的行号,并给出该行修改后的程序代码。(每处4分,共20分)
29. 如图3-3 P1口作为并行接口按键的输入口,用P3口接一共阳极LED显示器,编程显示按键的键号0~7。开始时显示8。程序中有五处错误,请改正。
图3-3
L1 #include<reg51.h>
L2 #define uchar unsigned char
L3 #define uint unsigned int
L4 uchar data keycode=6// 8;
L5 uchar data dir_buf=1;
L6 code uchar dirtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0xbf};
L7 code uchar keytab[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
L8 void dl_xms(uint xms)
L9 { uint t1,t2;
L10 for(t1=8;t1>0;t1--) //xms
L11 for(t2=110;t2>0;t2--);}
L12 void keyscan( )
L13 { uchar key1;
L14 P1=0x00; //
L15 key1=P1;
L16 if(key1!=0xff)
L17 { dl_xms(10);
L18 P1=0xff;
L19 key1=P1;
L20 if(key1!=0xff)
L21 { keycode=0;
L22 while(key1!=keytab[keycode])
L23 { keycode=keycode+1;
L24 if(keycode==8)
L25 break;}}}}
L26 void main( )
L27 { P3=dirtab[7];//
L28 while( )//
L29 { keyscan( );
L30 dir_buf=keycode;
L31 P3=dirtab[dir_buf];}}
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$