单片机课后答案9Word文档下载推荐.docx
- 文档编号:8220280
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:10
- 大小:108.47KB
单片机课后答案9Word文档下载推荐.docx
《单片机课后答案9Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《单片机课后答案9Word文档下载推荐.docx(10页珍藏版)》请在冰点文库上搜索。
3.8255A有几种工作方式?
如何进行选择?
8255A共有三种工作方式,用方式控制字来选择。
4.现有一片AT89C51单片机,扩展了一片8255A,若把8255A的B口用作输入,每一位接一个开关,A口用作输出,每一位接一个发光二极管,请用proteus软件画出电路原理图,并编写出B口某一位开关接低电平时,A口相应位发光二极管被点亮的程序。
电路如下图:
程序如下:
#include<
reg51.h>
absacc.h>
intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
//PA,PB,PC及命令端口地址定义
#definePAXBYTE[0x0000]
#definePBXBYTE[0x0001]
#definePCXBYTE[0x0002]
#defineCOMXBYTE[0x0003]
voidmain()
{
uchark;
COM=0x82;
//控制字
while
(1)
{
k=PB;
PA=k;
}
}
5.按照图9-18所示8255与AT89C52的连接图,用8255C口的PC3引脚向外输出连续的正方波信号,频率为500Hz。
试编程,并用proteus仿真验证。
利用定时器0,每1ms中断一次,在中断服务程序中改变PC3的状态。
reg52.h>
Absacc.h>
#definePA8255XBYTE[0xe000]/*定义8255A口地址*/
#definePB8255XBYTE[0xe001]/*定义8255B口地址*/
#definePC8255XBYTE[0xe002]/*定义8255C口地址*/
#defineCOM8255XBYTE[0xe003]/*定义8255控制寄存器地址*/
voidtimer0init();
bitk;
unsignedcharaa;
voidinit8255(void);
voidmain(void)
timer0init();
init8255();
COM8255=0x07;
/*PC3置1*/
k=0;
while
(1);
voidinit8255(void){
COM8255=0x80;
/*工作方式选择字送入8255控制寄存器,设置A、B、C口为基本I/O输出方式*/
voidtimer0init()
{
TMOD=0x01;
//设置T0为定时器模式,工作在方式1
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
//开总中断
ET0=1;
//允许T0中断
TR0=1;
//启动T0
voidtimer0()interrupt1//定时器0每1ms中断一次
if(k==0)
{
COM8255=0x06;
/*PC3清0*/
k=~k;
else
/*PC3置1*/
6.为什么要进行按键消抖?
按键消抖的方法有几种?
按键是利用机械触点的合、断来实现键的闭合与释放,由于弹性作用,机械触点在闭合及断开瞬间会有抖动的过程,从而使键输入电压的信号也存在抖动现象。
去除抖动的方法一般有硬件和软件两种。
硬件方法就是在按键输出通道上添加去抖动电路,从根本上避免电压抖动的产生,去抖动电路可以是单稳态电路或者滤波电路。
软件方法通常是在检测到有键按下时延迟10~20ms的时间,待抖动期过去后,再次检测按键的状态,如果仍然为闭合状态,才认为是有键按下,否则认为是一个扰动信号。
按键释放的过程与此相同,都要利用延时进行消抖处理。
由于人的按键速度与单片机的运行速度相比要慢很多,所以,软件延时的方法简单可行,而且不需要增加硬件电路,成本低,因而被广泛采用。
7.按键输入程序应具备哪些功能?
具有下列功能:
(1)确定键是否闭合;
(2)按键消抖处理;
(3)确定闭合键的位置;
(4)确定按键是否上访;
(5)对按键进行处理。
8.利用LED显示器设计一个统计按键次数的系统,能够实时将当前按键次数以十进制形式显示在2位LED显示器上。
(1)所设计的Proteus仿真电路如图5-13所示。
图5-13计数器的仿真电路与效果图
两位数码管与单片机相连时,可以采用静态显示方式,也可以采用动态显示方式。
这里采用动态显示方式,将两个数码管的段码连接到单片机的P0口,P0口通过470Ω的上拉电阻接+5V,两个数码管的位选由P2.6和P2.7选中。
图5-13中数码管是共阴极的。
(2)程序设计如下:
#include<
sbitkey=P3^0;
sbitge=P2^7;
sbitshi=P2^6;
uchardd;
//dd为显示的数字
ucharf0;
//f0为键按下过的标志
uchartime=0,count=0;
ucharcodedis[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//段码
/*************延时程序*************/
voiddelay(ucharN)
uchari,j;
for(i=0;
i<
N;
i++)
for(j=0;
j<
125;
j++);
/***************显示程序*************/
voiddisplay(void)
P0=dis[dd%10];
//显示个位
ge=0;
delay(3);
ge=1;
P0=dis[dd/10];
//显示十位
shi=0;
shi=1;
/****************主程序***************/
dd=0;
//开始显示的数字为0
f0=1;
//f0为按下过键的标志位,如果按下过键,f0=0,否则f0=1
while(key==1)//键未按下,显示
{
display();
if(f0==0)
{
dd=dd+1;
f0=1;
}
}
while(key==0)//键按下,显示,标志f0=0
display();
f0=0;
}
(3)仿真效果
0~99计数器的仿真效果图如图5-13所示,图中显示的是23。
9.LCD1602与AT89C52单片机连接的仿真电路如图9-36所示。
用C语言编程,实现第一行从右侧移入“Helloeveryone”,同时第二行从右侧移入“Welcometohere!
”,移入速度自定,然后停留在屏幕上。
程序设计如下:
ucharcodetable[]="
Helloeveryone"
;
ucharcodetable1[]="
Welcometohere!
"
sbitlcden=P3^4;
//液晶使能端
sbitlcdrs=P3^5;
//液晶数据命令选择端
ucharnum;
voiddelay(uintz)//延时子程序
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
voidwrite_com(ucharcom)//写命令函数
lcdrs=0;
//选择写命令模式
P0=com;
//将要写的命令字送到数据总线上
delay(5);
//稍微做延时以待数据稳定
lcden=1;
//使能端给一个高脉冲,因为初始化函数中已将lcden置为0
//稍做延时
lcden=0;
//将使能端置0以完成高脉冲
voidwrite_data(uchardate)
lcdrs=1;
P0=date;
voidinit()
write_com(0x38);
//设置16×
2显示,5×
7点阵,8位数据接口
write_com(0x0f);
//设置开显示,不显示光标
write_com(0x06);
//写一个字符后地址指针加1
write_com(0x01);
//显示清0,数据指针清0
init();
write_com(0x80+0x10);
//先将数据指针定位到第一行第一个字处
for(num=0;
num<
15;
num++)//做简短延时
write_data(table[num]);
write_com(0x80+0x50);
//写第二行时重新定位数据指针
16;
num++)
write_data(table1[num]);
delay(20);
for(num=0;
write_com(0x1c);
delay(100);
while
(1);
(专业文档资料素材和资料部分来自网络,供参考。
可复制、编制,期待你的好评与关注)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课后 答案