第3章 P0~P3口的C51编程 《单片机的C语言程序设计及应用》(电工版第4版)章节过关卷

2025-07-29
| 2份
| 13页
| 105人阅读
| 2人下载

内容正文:

《单片机的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];}} 原创精品资源学科网独家享有版权,侵权必究! 学科网(北京)股份有限公司 $$

资源预览图

第3章 P0~P3口的C51编程 《单片机的C语言程序设计及应用》(电工版第4版)章节过关卷
1
第3章 P0~P3口的C51编程 《单片机的C语言程序设计及应用》(电工版第4版)章节过关卷
2
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。