单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第3章 单片机输出显示控制习题答案_第1页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第3章 单片机输出显示控制习题答案_第2页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第3章 单片机输出显示控制习题答案_第3页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第3章 单片机输出显示控制习题答案_第4页
单片机原理与应用(C51编程+Proteus仿真) 习题及答案 刘霞 第3章 单片机输出显示控制习题答案_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章单片机输出显示控制习题答案一、填空题1.AT89S52单片机的I/O引脚采用电平输出可获得较大的驱动能力。答:低2.采用_crol_函数需要包含头文件。答:intrins.h3.temp=0x80;temp=temp<<1;则(temp)=。答:0x004.temp=0x80;temp=_crol_(temp,1);则(temp)=。答:0x015.unsignedcharcodeseg[]={0xc0,0xf9},数组seg存在存储器。答:程序6.“8”字型的LED数码管有和两种。答:共阳,共阴7.对于共阴极带有小数点段的数码管,显示字符“0.”(a段对应段码的最低位)的段码为,对于共阳极带有小数点段的数码管,显示字符“0.”的段码为。答:0xBF,0x408.当显示LED数码管位数较多时,一般采用显示方式,这样减少I/O口的使用数目。答:动态9.16*16点阵显示器是由个8*8点阵显示器组成。答:410.LCD1602是型液晶显示模块,在其显示字符时,只需将待显示字符的码由单片机写入LCD1602的显示数据DDRAM,内部控制电路就可将字符在LCD上显示出来。可显示行,每行显示个字符。答:字符,2,16二、单项选择题1.关于52单片机的P0口,下列说法不正确的是。A、P0口作为输出口需要外接上拉电阻B、P0口作为输入口需要先写1C、P0口作为输出口不需要外接上拉电阻D、P0口可作为地址/数据总线使用答:C2.下列说法不正确的是。A.

P0口可作为地址总线低8位使用

B.

P0口可作为数据总线使用C.

P2口可作为地址总线高8位使用D.

P0~P3口的驱动能力是相同的答:D3.共阳数码管采用动态显示方式时,其公共端可接。A.地B.电源C.单片机I/O口D.悬空答:C4.共阳数码管采用动态显示方式时,其段码端可接。A.地B.电源C.单片机I/O口D.悬空答:C5.在LCD1602显示上显示数字0,不正确的是。A.write_data(0);B.write_data(‘0’);C.write_data(0x00+0x30);D.write_data(0x00+48);答:A三、简答题1.简述单片机I/O口的驱动能力。答:P0口作为通用I/O使用,每位可驱动8个LSTTL输入,当P0口的某位为高电平时,可提供400μA的拉电流;当P0口某位为低电平

(0.45V)时,可提供3.

2mA的灌电流,由于漏极开路,需要外接上拉电阻;而P1

~P3口内部有30kΩ左右的上拉电阻,P1

~P3口每一位的驱动能力,只有P0口的一半。如果高电平输出,则从P1、P2和P3口输出的拉电流仅为数百微安,如果低电平输出,能使灌电流从单片机的外部流入内部,则将大大增加流过的灌电流值。所以,AT89S52单片机任何一个端口要想获得较大的驱动能力,要采用低电平输出。2.LED数码管的静态显示方式与动态显示方式有何区别?各有什么优缺点?答:静态显示时,欲显示的数据是分开送到每一位LED上的。而动态显示则是数据是同时送到每一个LED上,再根据位选线来确定是哪一位LED被显示。静态显示亮度很高,但口线占用较多。动态显示口线占用较少,但是需要编程进行动态扫描,适合用在显示位数较多的场合。3.简要说明数码管动态显示方式时的扫描刷新时间的确定方法。答:由于数码管余辉和人眼的“视觉暂留”作用,只要控制好每个数码管显示时间,则可造成“多位同时亮”的假象,达到同时显示效果。因此,动态显示占用口线少,但有闪烁,扫描占用CPU大量的时间。只要扫描(刷新)率大于100Hz,即整体扫描时间小于10ms,就可以做到无闪烁。根据“整体扫描时间=单个数码管点亮时间*数码管个数”就可以计算单个数码管点亮时间。4.简要说明数码管动态显示方式为什么要加消隐语句?答:数码管动态显示时,有时会出现数码管不应该亮的段,似乎有微微的发亮。这种现象主要是数码管在切换时,输出位选和段选的瞬态造成的。在刚送完段码数据后,输出段码端口仍然保持着上次的段码数据,再执行下一位数码管的送位选数据指令后,原来保持在段码端口的段码数据将直接加在数码管上,接下来才是再次通过段码端口给送段码数据,虽然这个过程非常短暂,但是在数码管高速显示状态下,仍然可以看见数码管出现显示重影的现象。因此需要入消隐语句。四、仿真练习1.设计要求:以单片机为核心,设计一个彩灯控制器。在ProteusISIS中绘制出原理电路,并编写软件调试通过。基本要求:在单片机的P1接8个发光二极管,按照P1.0~P1.7以及P1.7~P1.0顺序依次流水点亮。答:1.硬件电路设计2.软件设计#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharuintcodetable1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};uintcodetable2[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};voiddelay(uinti) //延时函数{ uintx,y; for(x=110;x>0;x--) for(y=i;y>0;y--);}voida1() //P1.0-P1.7流水点亮{uintq; for(q=0;q<8;q++) { P1=table1[q]; delay(300); } }voida2() //P1.7-P1.0流水点亮{uintq; for(q=0;q<8;q++) { P1=table2[q]; delay(300); } }voidmain(){while(1){a1(); a2();}}扩展要求:在P0~P3口分别接8个LED,排成一定的形状(自定义),自行设计点亮效果。答:1.硬件电路设计软件设计#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedcharucharcodetable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};ucharcodetable1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};voiddelay(uintz) //延时函数{ uintx,y; for(x=110;x>0;x--) for(y=z;y>0;y--);}voidmain(void){ ucharq; while(1) { for(q=0;q<8;q++) { P0=0Xff; //P0全熄灭 P1=table[q];//P1流水点亮 delay(300); } for(q=0;q<8;q++) { P1=0xff; //P1全熄灭 P3=table[q];//P3流水点亮 delay(300); } for(q=0;q<8;q++) { P3=0xff; //P3全熄灭 P2=table1[q];//P2流水点亮 delay(300); } for(q=0;q<8;q++) { P2=0xff; //P2全熄灭 P0=table1[q];//P0流水点亮 delay(300); } }}2.设计要求:用单片机控制4位LED数码管动态显示。在ProteusISIS中绘制出原理电路,并编写软件调试通过。基本要求:显示“班级-学号”,例如:2班3号(2-03)。稳定显示。答:1.硬件电路设计2.软件设计#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodeseg_scan[]={0x08,0x04,0x02,0x01};//数码管位选码ucharcodeseg[]={0xa4,0xbf,0xc0,0xb0};//2-03段码表voiddelay(uintxms)//1ms延时函数{uinti,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);}voidmain(){uchark;while(1){ P2=0x00;////清位选端for(k=0;k<4;k++) { P2=seg_scan[k];//给P2口低四位送位选信号 P0=seg[k];//送段码 delay(2);//延时 P0=0xff;//消隐 }}}3.仿真运行扩展要求:显示“班级-学号”[例如:2班3号(2-03)]的效果为依次点亮数码管,每次只看到一个数字。然后稳定显示。答:1.硬件电路设计2.软件设计#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintucharcodeseg_scan[]={0x08,0x04,0x02,0x01};//数码管位选码ucharcodeseg[]={0xa4,0xbf,0xc0,0xb0};//2-03段码表voiddelay(uintxms)//1ms延时函数{uinti,j;for(i=0;i<xms;i++)for(j=0;j<120;j++);}voidmain(){uchark,m=1000;while(1){ P2=0x00;////清位选端for(k=0;k<4;k++) { P2=seg_scan[k];//给P2口低四位送位选信号 P0=seg[k];//送段码 delay(m);//延时 P0=0xff;//消隐 if(k==3) { m=2; }}}}3.仿真运行3.设计要求:用单片机控制字符型液晶显示器LCD1602显示字符,在Proteus

ISIS中绘制出原理电路,并编写软件调试通过。基本要求:第一行显示“Helloworld”,第二行显示“学号+姓名(汉语拼音)”。答:1.硬件电路设计2.软件设计#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineoutP2sbitlcdrs=P3^0;//液晶的RS端接P3.0口sbitlcdrw=P3^1;//液晶的RW端接P3.1sbitlcden=P3^2;//液晶的EN使能端接P3.2口ucharnum=0;/********************延时函数,延时一毫秒************************/voiddelay(uintz){ uintx,y; for(x=112;x>0;x--) for(y=z;y>0;y--);}/**********************检查忙标志函数************************/voidcheck_busy(void){uchardt; do { dt=0xff; lcden=0; lcdrs=0; lcdrw=1; lcden=1; dt=out; }while(dt&0x80); lcden=0;}/**************************1602显示****************************/voidwrite_cmd(charcmd)//写指令函数{ check_busy(); lcden=0;//再把EN拉低 lcdrs=0; lcdrw=0;//先将RW拉低 out=cmd; lcden=1; delay(1); lcden=0; delay(1);}voidwrite_data(uchardat)//写数据函数{ check_busy(); lcden=0;//再把EN拉低 lcdrs=1; lcdrw=0;//先将RW拉低 out=dat; lcden=1; delay(1); lcden=0; delay(1);}voidwrite_str(uchar*str)//写字符串函数{ while(*str!='\0') { write_data(*str++); delay(5); }}/***************************初始化******************************/voidlcd_init()//初始化1602{ write_cmd(0x38);//显示模式设置 write_cmd(0x0c);//显示开关,光标没有闪烁 write_cmd(0x06);//显示光标移动设置 write_cmd(0x01);//清除屏幕 delay(1);}/************************主函数******************************/voidmain(){ lcd_init(); while(1) { write_cmd(0x80+0x03);//把光标移到第一行待显示区 write_str("HelloWorld"); write_cmd(0x80+0x40);//把光标移到第二行待显示区 write_str("123456zhangsan"); }}3.仿真运行扩展要求:要求上述信息分别从LCD1602右侧第1行、第2行滚动移入,然后从左侧滚动移出,反复循环显示。答:1.硬件电路设计2.软件设计#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineoutP2sbitlcdrs=P3^0;//液晶的RS端接P3.0口sbitlcdrw=P3^1;//液晶的RW端接P3.1sbitlcden=P3^2;//液晶的EN使能端接P3.2口ucharnum=0;/********************延时函数,延时一毫秒************************/voiddelay(uintz){ uintx,y; for(x=112;x>0;x--) for(y=z;y>0;y--);}/**********************检查忙标志函数************************/voidcheck_busy(void){uchardt; do { dt=0xff; lcden=0; lcdrs=0; lcdrw=1; lcden=1; dt=out; }while(dt&0x80); lcden=0;}/**************************1602显示****************************/voidwrite_cmd(charcmd)//写指令函数{ check_busy(); lcden=0;//再把EN拉低 lcdrs=0; lcdrw=0;//先将RW拉低 out=cmd; lcden=1; delay(1); lcden=0; de

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论