单片机应用项目式教程——基于Keil和Proteus第2版习题答案第5章思考和练习解答.docx

上传人:李司机 文档编号:6893109 上传时间:2024-03-15 格式:DOCX 页数:9 大小:93.98KB
返回 下载 相关 举报
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第5章思考和练习解答.docx_第1页
第1页 / 共9页
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第5章思考和练习解答.docx_第2页
第2页 / 共9页
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第5章思考和练习解答.docx_第3页
第3页 / 共9页
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第5章思考和练习解答.docx_第4页
第4页 / 共9页
单片机应用项目式教程——基于Keil和Proteus第2版习题答案第5章思考和练习解答.docx_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《单片机应用项目式教程——基于Keil和Proteus第2版习题答案第5章思考和练习解答.docx》由会员分享,可在线阅读,更多相关《单片机应用项目式教程——基于Keil和Proteus第2版习题答案第5章思考和练习解答.docx(9页珍藏版)》请在三一办公上搜索。

1、第5章思考和练习解答5.1 简述LED数码管的结构和分类。LED正向压降、额定电流和最大电流各是多少?答:参阅教材书P143。5.2 什么叫静态显示方式和动态显示方式?各有什么特点?答:参阅教材书P.14414505.3 动态扫描显示电路如何连线?对数码管的驱动电流有什么要求?5.4 答:参阅教材书P.14414505.5 1.CDI602能显示多少字符?能显示汉字吗?答:LCD1602液晶显示屏能显示2行共32个字符。1602不能显示汉字(12864可显示汉字)。并且只能显示其内部已经固化了的160个57点阵字符和32个5x10点阵字符(参阅教材书图5-22点阵字符表).其中,标点符号、阿拉

2、伯数字和英文大小写字母等字符为ASCn码。若需显示自定义字符,有64字节RAM,可自定义8个5X8点阵字符或4个5X11点阵字符。5.6 按键开关为什么有去抖动问题?如何消除?答:参阅教材书P.14814905.7 试述矩阵式键盘判别键闭合的方法,有什麽问题?答:矩阵式键盘的I/O端线分为行线和列线,按键跨接在行线和列线上。按键按下时,行线与列线发生短路。根据这一特点,可按下列步骤操作:置列线为输入态,从行线输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合;置行线为输入态,从列线输出低电平,读入行线数据,若某一行线为低电平,则该行线上有键闭合;综合、两步的结果,可确定按键编号。

3、矩阵式键盘电路在许多单片机教材和技术资料中被介绍,但实际上该电路连接存在问题,当同一行有多键同时按下,且该行其中一键所在列又有多键同时按下时,会发生信号传递路径出错。因此,这种矩阵式键盘电路适用于无锁按键并使用中断处理时相对合理。5.8 什么叫BCD码?与二进制数有何区别?答:BCD码(BinaryCodedDeCimaICOde)也称为二-十进制数,属十进制数,即逢十进位。但每一数位采用二进制码对十进制数字编码,这种编码方式的特点是保留了十进制的权,数字则用二进制码表示。BCD码既适应了人们逢十进位的习惯,又适应了计算机对输入输出数据的要求。BCD码与二进制数都用二进制码表示,但是有区别的。

4、BCD码是以4位二进制码表示一位十进制数,每4位以内按二进制进位;4位与4位之间按十进制进位。例如:二进制码01100111B=i03,01100111BCD=67显然两者是不一样的。5.9 什么是ASen码?答:参阅教材书P.151。5.10 将项目6模拟交通灯的绿灯加上限行显示时间,P2口驱动横向绿灯限行时间,P3口驱动纵向绿灯限行时间,电路如图5-27所示。原换灯时间分别改为:绿灯9秒(最后2秒快闪),黄灯3秒,红灯12秒,反复循环。试编制程序,画出ProteUSISlS虚拟电路,并仿真调试。解:可仿照任务6.1程序,加入显示语句,显示字段码直接从P2、P3口输出。include sbt

5、t GA=12;sbt GB=P15;unsigned char code c10=包含访问由库函数reg51h定义横向绿灯为PlaT定义纵向绿灯为PL5“,定义共阳字段码数组,并域值OXco,0x0,0x3,0Xbo,0x99,0x92,0x82,0xf8,0x8Q0x90Wvoid mam() unsigned char tj; Xinsigned long P2=0xP3xff;Whfle(I) Pl=0;for(f=9; r10; i) P3=cK;iK2)fbr(t=O;K=22000;l);WSe tf(i=2),(i=l)GA-! GA;f主函数jf定义循环变里I、定义长整型延时

6、参数W限行显示时间暗无限循环,横向绿灯真,纵向红灯高+横向绿灯循环U横向绿灯显示限行时间-若限行时间2秒T限行显示04间一秒刷新a若限行时间2秒,带闪烁PT闪烁循环“横向绿灯闪烁,纵向红灯保持戛forgo;02200;t)ib闪烁间隔0.1秒.elsefor(t=0;K=5000;LA若限行时间=0,05秒后暗P3=0xffJPl0;for (t0: t66000: t+ );Pl=Oxde;fbr(i=9; t10; i-) P2c;岭2)fbr(t=0;t=22000;tH-);dse if(i=2)(i=l) for(j=0jj10jj+)GB-! GB;横向探灯限行显示时间暗-横向黄灯

7、真,纵向红灯仍保持亮,黄灯延时3秒纵向绿灯莫,横向红灯亮、黄灯灭.纵向绿灯循环,纵向绿灯显示限行时间,T若限行时间2秒+T限行显示0寸同一秒刷新*,若限行时间42秒,常闪烁T闪烁循环”-纵向绿灯闪烁,横向红灯保持宴,foKt=0;=2200;tX,闪烁间隔0.1秒dsefor(t=0;t=5000;t-若限行时间=0,05秒后暗“P2=0xffJ纵向绿灯限行显示时间暗“Pl三0xee;T纵向黄灯更,横向红灯仍保持亮,for(t=0;三66000;廿+);黄灯延时3秒/WinCIUde sbit P10=P10;unsigned char code c(10=void chag3 (unsign

8、ed int unsigned char i;y0=100;yl=(x%100)10;y2=jt%10;for(i=0; i3; i+)yi=cyiBJvoid main ()unsigned char i;Uisigncd int a=809;unsigned char b3;SCON=Ox(X);ES=O;Chag3 (a, b);P10=0;fbr(i=2;i3;i-)SBUF=bi;while (TI=O);TI=0;P10=l;vhile(l);)5.11 已知CC4094串行扩展3位静态显示电路如图5-28所示,3位显示字段码己分别存在32H3OH内RAM中(设为809),小数点固

9、定在第二位,试编制程序,画出ProteUSISIS虚拟电路,并仿真调试。解:C51编程如下:头文件包含访问血库函数reg51.h定义位标识符PIO为PLO.定义共阳逆序(a是高位)小数点暗字段码数组0x03.0x9f.0x25.0x0d.0x99.0x49.0x41.0x1f.x1.0x09;x.unsignedchary)3位字段码转换子函数演g定义无符号字符型变量i(循环字数)显示数除以100,产生百位显示数字(除以100后的余数)除以10,产生十位显示数字除以10后的余数就是个位显示数字循环转换显示字段码无类型主函数定义无符号字符型变量i(循环字数)定义无符号整型变量a(显示数),并赋值

10、809定义无符号字符型数组b(4位显示字段码),置串口方式0串口禁中调用4位字段码转换子函数Chag4关闭4094并行输出循环串行发送显示效等待一字节串行发送完毕一字节串行发送完毕,清发送中断标志3字节串行发送完毕,开启4094并行输出原地等待KeilC51软件调试:编译连接并进入调试状态后,打开串行口对话框,单步结合过程单步运行,可观察到串行口对话框中SBUF寄存器依次被输入908(先发送低位)转换后的共阳显示字段码:09、03、Ol0改变变量a或32H30H中的数值(注意999),重新运行,转换结果随之改变。5.11 已知由PNP型三极管与74377组成的共阳型3位LED数码管动态扫描显示

11、电路如图5-29所示,显示字段码存在以40H(低位)为首址的3字节内RAM中,试编制3位动态扫描显示程序,画出PrOteUSlSIS虚拟电路,并仿真调试。解:按图5-29电路,P1.0P1.2分别输出低电平时,VT0VT2分别导通,选通相应显示位。PO口输出的字段码也是低电平有效。输出高电平与输出低电平时的驱动能力不一样,输出高电平时,拉电流较小;控制。C51编程如下:输出低电平时,灌电流较大,因此,通常采用低电平有效输出includeincludeSbitPlo=PlAO;头文件包含访问第L库函数reg5Lh头文件包含绝对地址访问库函数absacc.h定义位标识符Plo为PLosbitP11

12、=P11;SbitP12=P12;定义位标识符PIl为PLl定义位标识符P12为P12voidmain()unsignedintt:DBYTE0x42=0xa4;DBYTE(0x41=0xb0;无类型主函数定义无符号整型变量t(延时参数)绝对地址0x42赋值(百位显示数2的显示字段码)绝对地址0x41赋值(十位显示数3的显示字段码)DBYTE0x40=0x99:P1O=P11=P12=1;for(;)绝对地址0x40赋值(个位显示数4的显示字段四)个位、十位、百位停显示无限循环显示XBYTE0xbfff=DBYTE0x40;出个位显示字段码PlO=O;for(t=0;K1000;计+);PlO

13、=I;/个位显示延时约5ms个位停显示XBYTEOxbffl=DBYTE0x41”输出十位显示字段码Pll=O;for(t=0;t1000;t+);Pll=I;十位显示延时约5ms十位停显示XBYTEOxbffl=DBYTE0x42;输出百位显示字段码P12=0;for(t=0:t1000;t+);P12=k百位显示延时约5ms百位停显示5.12 己知4位共阴型LED动态显示电路如图5-30所示,显示字段码存在以30H为首址的内RAM中,试编制循环扫描显示程序,画出ProteUSlSIS虚拟电路,并仿真调试。解:C51编程如下:includeincludeSbitP10=P10;头文件包含访问

14、血库函数reg51,h头文件包含绝对地址访问库函数absacc.h定义位标识符PIo为PLOSbitP11=P11;定义位标识符PU为PLlsbitP12=P12;voidmain()unsignedintt;DBYTE0x42=0xa4;DBYTE(0x41=0xb0;DBYTE0x40=0x99;P1O=P11=P12=1;for(;)定义位标识符P12为P12无类型主函数定义无符号整型变量t(延时参数)绝对地址0x42赋值(百位显示数2的显示字段码)绝对地址0x41赋值(十位显示数3的显示字段码)绝对地址0x40赋值(个位显示数4的显示字段码)个位、十位、百位停显示无限循环显示XBYTE

15、(0xbfff=DBYTE(0x40;出个位显示字段码PlO=O;for(t=0;K1000;t+);PlO=I;个位显示延时约5ms个位停显示XBYTExbf11=DBYTE0x41;输出十位显示字段码Pll=O;for(t=0;t1000;t+);Pll=I;十位显示延时约5ms十位停显示XBYTEOxbffl=DBYTE0x42;输出百位显示字段码P12=0;for(t=0:t1000;t+);P12=k百位显示/延时约5ms百位停显示5.13 已知8位共阴型LED动态显示电路如图5-31所示,位码驱动由74LS138译码,段码驱动由74LS377并行输出,8位显示数字存在数组a中,试编

16、制循环扫描显示程序,画出ProteUSISIS虚拟电路,并仿真调试。解:C51编程如下:#include#includeunsignedcharcodec10=头文件包含访问逆V库函数reg5Lh头文件包含绝对施加访问库函数absacc.h定义共阴字段码表数组,存在ROM中0x3f.0x06.0x5b.0x40x66.0x6d.0x7d,0x07.0x7f.0x6f);voidmain()unsignedcharij;unsignedintt;无类型主函数定义无符号字符型变量i、j(循环序数)定义无符号整型变量t(延时参数)unsignedchara8=0.12.3.4.5.6.7:定义显示数

17、组,并赋值forG=0;j100;j+)fbr(i=O;i8;i+)Pl=0xf8:循环显示100次/8位依次输出置显示译码片选初值Pl+=i;修改译码片选并输出XBYTE0x7ffi=cai;/编出显示字段码for(t=0:t1000;t+);延时约5msWhile(I);)原地等待5.14 已知8位共阴型LED动态显示电路如图5-32所示,位码驱动由74LS138译码,段码驱动由74LSl64“串入并出”,8位显示数字存在数组d中,试编制循环扫描显示程序,画出ProteusISIS虚拟电路,并仿真调试。解:要求循环扫描显示数组d8=2,0,1,3,9,876中的8位显示数字。C51编程如下

18、:include包含访问Sfr库函数reg5Lhinchde/包含绝对地址访问库函数absacc.h*junsignedcharcodec10=定义共阴逆序(a是高位)字段码数组,0xfc.0x60.0xda.0x2.0x66.0xb6.0xbe.0xe0.0xfe.0xf6);voidmain()主函数Unsignedchari;/定义无符号字符型变量i(循环序数)Unsignedintt;定义整型变量t(用于显示扫描延时)-Unsignedchard8=2,0,l,3,9,&7,6;一定义显示数字数组,并赋值.SCON=OxOO;一置串口方式0“ES=O;-串口禁中“while(l)无限循

19、环“fbr(i=0;i8;i+)8位依次扫描输出一Pl=0xf8+i;输出位码(i由138译码)SBUF=cd(i;T串行发送段码.Whik(TI=O);f等待一字节串行发送完也TI=O;一字节串行发送完毕,清发送中断标志,for(t=0:t“I/O-POrt”-uPortl,)o其中,上面一行(标记“Px)为I/O口输出变量,下面一行(标记“Pins)为模拟I/O引脚输入信号。“为“空白”为“0”,左键点击可修改。(5)打开串行口对话窗口(主菜单Peripherals”“Serial),弹出串行口对话窗口,以便观察串行缓冲寄存器SBUF中的数据。(6)单步运行,显示数组d赋值后,看到存储器窗

20、口0x08及其后续7个单元已依次赋值数组d中的显示数字。继续单步运行,至输出位码Pl=0xfB+i;”语句行后,Pl对话窗口输出数值变为“1111IOo0(“w为“1”,“空白”为0”),表明PL2P1.0输出“000”,138将译码驱动第0位显示。继续单步运行,至串行发送段码SBUF=cdi;”语句行后,串行对话窗口SBUF中数据变为“OxDA”,表明串行发送共阴逆序“2”的字段编码“OxDA”。(9)继续单步运行(串行发送过程需单步8次),执行延时语句“for(t=0;t74LS164在TTL74LSSerieS库中;8位显示屏在OPtOeIeCtrOniCSf7-SegmentDispl

21、ays库中,选共阴型8位7段LED数码管7SEG-MPX8-CC-BLUE。(2)鼠标左键双击图5-32a所示电路中AT89C51,装入在KeilC51编译调试时自动生成的HeX文件。全速运行后,虚拟电路中数码管显示屏会显示赋值显示数。(3)改变程序中显示赋值,重新Keil编译,生成并装入HeX文件,全速运行后,显示随之改变。0I39B1&Ul AJ8C51SaWSod Xss 豆 mod9 WZd fn U ZLSS! 二Wmzd OMNZd W 1205 UWeed xlc0. Qxi 图5-32aPrOteUS虚拟仿真138位码选通+164段码串行传送的8位LED动态显示电路(运行中)5

22、.15 已知LCD1602显示电路如图5-15所示,要求显示屏上第一行显示“AT89C51-LCD1602”,第二行显示“Test-Program-,试编制显示程序。解:C51程序如下:mdudesbRS-PINSbitRW11;头文件包含访问世库函数reg51h定义位标识符RS(寄存器选择)为PI.2。定义位标识符RW(读写控制)为PlUE=Plevoidout(u&simeddarx)Unstenedchari;RW-O;PO三x;forSO;MIO;i+);E=l;for(i=0;t10;i+);E=OJvoidinitl602()RS=O;。定义位标识符E(便能片选)为P1.0。并行数

23、据输出子函数。形号X(输出数据)定义无符号字符型变嵬M延时参数)。写1602有效输出写入1602的数据延时稳定使能端E有效窕时稳定使能端E下降沿角蛾1602初始化设置子函数写指令寄存器out(0x38);设置显示模式:16x2显示,5x7点陈,S位数据Out(OX00;out(OxOc);out(0x03);设置输入模式:AC加1,整屏显示不动设置显示开关模式:开显示,无光标,不闪烁清屏,初始化结束voidwrl602(ms三edchard111a)写1602子函数。形参d11(写入数据),a(写为地址)unsignedCharUnsignedintt;RS=O;定义无符号字符型变里*(循环序

24、数)定义无符号整型变里t(延时教()写指令寄存器,准备输入显示地址out(a);fbr(t=0;t300;t+);RS=I;输入显示地址:X行第一列延时约1.6ms(12MHz)写数据寄存器,准蓊输入显示数据fbf(i=0;t16;r+)ut(di);for(t=0;t300;t+);)voidmam()循环写入16个显示数据依次写入显示数据(在数组d中)窕时约1.6ms(12MHz)无类型主函数皿IgnedChMx16-AT89C51-LCD1602;淀义第Ti显示数组XUnstsnedchary(16-Test-Program);定义第二行显示数组yE-0;mitl602();wrl602

25、(x,0x8Q);ul602(y,0xc0);wh三e(i)使能端E低电平,1602准备1602初始化设置舄1602第一怫据写1602第二锄据原地等待5.16 已知电路如图5-33所示,10kC8和0.1F8为RC滤波消抖电路,ybsc=6MHz,要求Tl每隔IoOmS中断,定时描描按键状态,并将键信号存入内RAM30H,试编制程序,画出ProteusISIS虚拟电路,解:C51程序如下:并仿真调试。includeincludevoidmain()TMD=0xl0;THl=0x3c:TLl=OxbO;IP=0x08:头文件包含访问血库函数reg5Lh头文件包含绝对地址访问库函数absacc.h

26、无类型主函数/TMOD=00010000B.置Tl定时器方式1/置Tl定时IOomS初值(应.=6MHZ)IP=00001000B,置Tl高优先级IE=0x88;TRl=I;while(l);)/IE=100OK)O0B,Tl开中/Tl运行无限循环,等待Tl中断,主函数结束voidtl()interrupt3using1/Tl中断函数THl=0x3c;TLl=OxbO;/重置Tl定时100mS初值DBYTE0x30=XBYTE0x7fJ/獭入并存储键信号数据5.17 已知3x3矩阵式键盘中断扫描接口电路如图5-34所示,PI.4、P1.3另有他用,不能改变其端口状态(输入态),且其输入状态不定

27、。要求即时判断闭合键序号,并送P2口显示。试编制程序,画出PrOIeUSlSIS虚拟电路,并仿真调试。解:C51程序如下:include-包含访问Sfr库函数reg51.hinclude*包含访问内联库函数intrins.hUnsignedcharcodec10=/定义共阳字段码数组(08及无键闭合状态标志)0xc0.0xf9,0xa4.0xb0.0x99,0x92,0x82,0xf8.0x80,0x3f;unsignedcharcodek9=-定义键闭合状态码数组(用于查找闭合键对应序号).Oxde.Oxdd,Oxdb.Oxbc.Oxbd.Oxbb.0x7e.0x7d,0x7b卡Unsign

28、edintt:T定义无符号整型变量t(延时参数)“Unsignedcharkey_scan()键扫描子函数,返回值j(闭合键序号)UnsignedcharS=Oxdf:定义行扫描玛,并置初始值,Pl.4先置低电平-unsignedcharij;一定义变量i(行扫描序数),j(闭合键序号)for(i=0;i3;i+)/行循环扫描“Pl=s;f/瑜出行扫描码,以下列扫描if(Pl&0x07)!=0x07)T若本行有键闭合,则:,for(j=0;j9;j+)循环查找对应键序号“if(Pl=kj)returnj;“符合对应值,返回闭合键序号elses=_crol_(s.l):若本行无键闭合,行扫描码左

29、移一位,voidmain()主函数.P2=c9;-/号遇出显示无键闭合状态标志,ITO=I;f而边沿触发“IP=OxOl:-/INTO高优先级JIE=0x81;而开中,while(l)/无限循环,Pl=PLfeOxlf;T发出键状态搜索信号:置行线低电平、列线高电平for(t=0;t2000;t+);/延时IOmS(替代其他功能子函数),并等待而中断.voidint()intemt0外中断0中断函数(有键闭合中断),for(t=0;t2000;t+);T延时约IomS消抖.Pl=PlfeOxlf:一再发键状态搜索信号:置行线低电平,列线高电平if(Plfc0x07)!=Ox07)|J若列线电平仍有变化.确认有键闭合,P2=ckey_scan();一调用键扫描子函数,并P2输出显示闭合键序号.,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号