第07章 单片机应用系统中的按键与显示 习题解答Word文档下载推荐.docx
- 文档编号:6607464
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:19
- 大小:219.14KB
第07章 单片机应用系统中的按键与显示 习题解答Word文档下载推荐.docx
《第07章 单片机应用系统中的按键与显示 习题解答Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《第07章 单片机应用系统中的按键与显示 习题解答Word文档下载推荐.docx(19页珍藏版)》请在冰点文库上搜索。
个位
MOVSCON,#00H;
初始化串行口方式0
START:
MOVDPTR,#TAB;
字形表的入口地址
MOVR0,#30H;
显示数的初始地址
LOOP:
MOVA,@R0;
取待显示数据
MOVCA,@A+DPTR;
查表获取字型码
MOVSBUF,A;
送串口显示
JNBTI,$;
等待发送完毕
CLRTI;
清发送标志
INCR0;
地址加一,准备取下一个待显示数
CJNER0,#33H,LOOP;
判断3个数据是否显示完
SJMP$;
显示结束
TAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;
段码表
;
0123456789对应内容
END;
程序结束
C语言参考答案:
#include<
reg51.h>
//预处理命令,定义SFR的头文件
charcodeTAB[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//段码表
unsignedcodedis_code[3]={0x5,0x4,0x3};
//待显示数据
main()
{
inti,dis;
//定义变量i,dis
SCON=0x00;
//初始化串行口方式0
for(i=2;
i>
=0;
i--)//3位显示循环
{
dis=dis_code[i];
//取待显示位数
SBUF=TAB[dis];
//取待显示数的字型码
while(TI==0);
//等待发送完毕
TI=0;
//清发送标志
}
while
(1);
//显示结束
Proteus仿真图如下所示:
4.设有一个LED数码管动态显示电路如图7-23所示。
已知显示代码存储在内部RAM30H开始的8个单元中,编写程序,动态显示给定的信息。
图7-23简答题4的图
汇编语言参考答案:
(用Proteus仿真画图的时候,P0口需接上拉电阻)
MOV30H,#00H;
给内部RAM30H开始的8个单元内容赋值
MOV31H,#01H
MOV32H,#02H
MOV33H,#03H
MOV34H,#04H
MOV35H,#05H
MOV36H,#06H
MOV37H,#07H
共阴字形表的入口地址
MOVR0,#30H;
待显示数的首地址
MOVR1,#00H;
控制位选信号
LOOP1:
MOVP1,R1;
送位选信号
取待显示数
取待显示数据的字型码
CLRP2.7;
选通74LS377允许控制端
MOVP0,A;
送字形
LCALLDELAY;
调用延时
INCR1;
选通下一位
INCR0;
CJNER0,#38H,LOOP1;
判断8个数据是偶显示完
SJMPLOOP;
重新开始显示
DELAY:
MOVR5,#10;
延时程序,给R5赋值
DEL0:
MOVR6,#1;
给R6赋值
DEL1:
MOVR7,#20;
给R7赋值
DEL2:
DJNZR7,DEL2;
R7减1不等于0继续执行该行
DJNZR6,DEL1;
R6减1不等于0跳到DEL1处
DJNZR5,DEL0;
R5减1不等于0跳到DEL0处
RET;
子程序返回
DB3FH,06H,05BH,04FH,66H,6DH,7DH,07H;
01234567对应内容
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
89ABCDEF
END
//预处理命令,定义SFR的头文件
sbitP2_7=P2^7;
charcodeTAB[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71};
//段码表
unsignedcodedis_code[8]={0x0,0x1,0x2,0x3,0x4,0x5,0x6,0x7};
voiddelay1ms(void)//延时1ms函数
unsignedchartemp=249;
//声明变量temp,并赋值249
while(--temp);
//temp是否减到0,否则继续执行该行
temp=249;
//给变量temp赋值
//temp是否减到0,否则继续执行该行
}
voidmain(void)//主函数
{
//定义变量i的数据类型
do{//dowhile组成循环
unsignedchardsSe1=0x00;
//定义变量dsSe1,并赋值0
for(i=0;
i<
8;
i++)//8位显示循环
{
P1=dsSe1;
//送字位
dis=dis_code[i];
//取待显示数
P2_7=0;
//选通74LS377允许控制端
P0=TAB[dis];
//取待显示数的字形
delay1ms();
//延时1ms
dsSe1++;
//字位加1,选送下一位
}
5.有一个单片机显示电路如图7-24所示。
图中4511是BCD码锁存/七段LED译码器/驱动器,当其输入为BCD码时,输出为七段LED数码管显示代码。
设要显示的BCD码数据存储在内部RAM30H~32H中。
编写程序,实现指定数据的静态显示。
图7-24简答题5的图
MOV31H,#4;
MOV30H,#3;
个位
MOVA,30H;
取个位
ORLA,#0E0H;
清P1.4位,选通个位显示
MOVP1,A;
送个位显示
MOVA,31H;
取十位
ORLA,#0D0H;
清P1.5位,选通十位显示
送十位显示
MOVA,32H;
取百位
ORLA,#0B0H;
清P1.6位,选通白位显示
送百位显示
等待
C语言参考答案:
voidmain(void)//主函数
P1=dis_code[2]|0xe0;
//显示个位
P1=dis_code[1]|0xd0;
//显示十位
P1=dis_code[0]|0xb0;
//显示百位
三、Proteus仿真
1.在Proteus下,仿真实现7.7节内容。
全自动洗衣机洗衣流程Proteus仿真
设洗衣机洗衣流程有三道程序:
进水、洗涤、甩干。
按下“启动”键,开始洗衣流程。
首先进水,“进水”指示灯亮,用LED发光二极管指示;
定时10秒,用2位LED数码管显示。
然后洗涤,“洗涤”指示灯亮,定时10秒。
最后甩干,“甩干”指示灯亮,定时10秒。
洗衣流程结束后,扬声器发声提示。
电路如图7-20所示。
图7-20洗衣流程控制原理
汇编语言参考程序如下:
ORG0000H;
LJMPMAIN;
ORG000BH;
定时/计数器T0的中断入口地址
LJMPTime0;
转到定时/计数器T0的中断服务程序Time0
ORG0100H;
主程序从0100H开始
JBP1.7,MAIN;
判按键是否按下,为0即按下,顺序执行,否则等待。
LCALLDISPLAY;
有键按下,延时去抖动
再判有键按下
MOVP1,#0EH;
确定键按下,A灯亮,开始放水定时
MOVR0,#00H;
R0放3个阶段的工作标志
MOVR1,#00H;
R1放定时器的中断计数
SETBEA;
开中断总开关
SETBET0;
开定时/计数器T0
MOVTMOD,#01H;
设定时/计数器T0工作方式1
MOVTH0,#3CH;
定时50ms高8位初值
MOVTL0,#0B0H;
定时50ms低8位初值
SETBTR0;
启动定时/计数器T0
SJMP$;
等待定时
;
定时/计数器T0中断服务程序
Time0:
CJNER0,#00H,L1;
R0的内容为标志,若R0=0,执行第1阶段定时(放水功能)
INCR1;
R1内容加1
MOVA,R1;
R1的内容送到A
MOVB,#20;
B寄存器送立即数20
DIVAB;
计算时间秒
MOVB,#10;
B寄存器送立即数10
DIVAB;
秒分成个位和十位
MOVDPTR,#DTAB;
字形表头地址送DPTR
MOVCA,@A+DPTR;
秒十位查字形码
MOVP0,A;
十位字形送P0口显示
MOVA,B;
秒个位送A寄存器
秒个位查字形码
MOVP2,A;
个位字形送P2口显示
CJNER1,#200,L4;
若累计满200次,即计时满10s
MOVP1,#0DH;
A灯灭,结束放水,B灯亮,开始洗涤
R1内容清0,重新从0开始计数
INCR0;
R0内容加1,准备第2阶段的定时
SJMPL4;
转L4,送初值,中断返回
L1:
CJNER0,#01H,L2;
若R0=1,执行第2阶段定时(洗涤功能)
INCR1;
MOVA,R1;
MOVB,#20;
MOVB,#10;
DIVAB;
MOVCA,@A+DPTR;
CJNER1,#200,L4;
MOVP1,#0BH;
B灯灭,结束洗涤,C灯亮,开始甩干
R0内容加1,准备第3阶段的定时
SJMPL4;
L2:
CJNER0,#02H,L3;
若R0=2,执行第3阶段定时(甩干功能)
INCR1;
MOVDPTR,#DTAB;
MOVP0,A;
MOVP2,A;
CJNER1,#200,L4;
MOVR1,#00H;
将Countor清0,重新从0开始计数
R0内容加1,准备第4阶段的工作
L3:
MOVP1,#07H;
灯全灭,洗衣机结束工作
CPLP3.7;
扬声器提醒
MOVP2,#0C0H;
个位显示清零
MOVP0,#0C0H;
十位显示清零
L4:
MOVTH0,#3CH;
初值寄存器的高8位重新赋初值
MOVTL0,#0B0H;
初值寄存器的低8位重新赋初值
RETI;
中断返回
DISPLAY:
MOVR7,#10;
延时子程序,送外循环时间常数
D1:
MOVR6,#255;
送内循环时间常数
DJNZR6,$;
内循环接送判断
DJNZR7,D1;
外循环接送判断
RET;
DTAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,;
数码管字形码
DB80H,90H,88H,83H,0C6H,0A1H,86H,8EH
END;
汇编结束
C语言参考程序如下:
//包含51单片机寄存器定义的头文件
#defineucharunsignedchar//定义缩写字符uchar
sbitP17=P1^7;
//将P17位定义为P1.7引脚
sbitP37=P3^7;
//将P37位定义为P3.7引脚
unsignedcharCountor,temp;
//设置全局变量,储存定时器T0中断次数
unsignedcharf=0;
//设置全局变量,作为区分不同阶段的定时
ucharcodeledvalue[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
voiddelay1()//延时函数
intq;
//定义变量q
for(q=0;
q<
500;
q++);
//循环500次
voidmain(void)//主函数
{
if(P17==0)//若P1.7=0,说明键按下,执行语句,否则一直等待。
delay1();
//有键按下,延时去抖动
if(P17==0)//再判有键按下
P1=0x0e;
//A灯亮,开始放水定时
EA=1;
//开总中断
ET0=1;
//定时器T0中断允许
TMOD=0x01;
//使用定时器T0的模式1
TH0=(65536-46083)/256;
//定时器T0的高8位赋初值,定时50ms
TL0=(65536-46083)%256;
//定时器T0的低8位赋初值
TR0=1;
//启动定时器T0
while
(1);
//无限循环等待中断
voidTime0(void)interrupt1using1//"
interrupt"
声明函数为中断服务函数
{TL0=(65536-46083)%256;
//定时器T0的低8位重新赋初值
TH0=(65536-46083)/256;
//定时器T0的高8位重新赋初值
if(f==0)//f为标志变量,若f=0,执行第1阶段定时(放水功能)
Countor++;
//Countor加1
temp=Countor/20;
//计算秒
P2=ledvalue[temp%10];
//显示秒个位
P0=ledvalue[temp/10];
//显示秒十位
if(Countor==200)//若累计满200次,即计时满10s
{
P1=0x0d;
//A灯灭,结束放水,B灯亮,开始洗涤
Countor=0;
//将Countor清0,重新从0开始计数
f++;
//f加1,准备第2阶段的定时
}
}
if(f==1)//若f=1,执行第2阶段定时(洗涤功能)
if(Countor==200)//若累计满200次,即计时满10S
P1=0x0B;
//B灯灭,结束洗涤,C灯亮,开始甩干
f++;
//f加1,准备第3阶段的定时
if(f==2)//若f=2,执行第3阶段定时(甩干功能)
Countor++;
//Countor加1
if(Countor==200)//若累计满200次,即计时满10S
P1=0x07;
//灯全灭,洗衣机结束工作
//f加1,准备进入第4阶段。
if(f==3)//若f=3,执行进入第4阶段工作(扬声器提醒)
P1=0x07;
//灯全灭,洗衣机结束工作
P37=~P37;
//扬声器提醒
Countor=0;
//将Countor清0,重新从0开始计数
P2=ledvalue[0];
//秒个位清零
P0=ledvalue[0];
//秒十位清零
}
2.在Proteus下,仿真实现简答题第4题内容。
参见第4题答案
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第07章 单片机应用系统中的按键与显示 习题解答 07 单片机 应用 系统 中的 按键 显示 习题 解答
![提示](https://static.bingdoc.com/images/bang_tan.gif)