单片机原理及应用7Word下载.docx
- 文档编号:17576970
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:12
- 大小:37.18KB
单片机原理及应用7Word下载.docx
《单片机原理及应用7Word下载.docx》由会员分享,可在线阅读,更多相关《单片机原理及应用7Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
无键按下等待,转键检测
KEY0:
LCALLDELAY10;
调10mS延时取抖
MOVA,P1
ANLA,#0FH
CJNEA,#0FH,KEY1;
不是抖动转键值判断
是抖动到键检测
KEY1:
MOVP1,#11101111B;
第一列键被按下判断
CJNEA,#0FH,KEYC1;
第一列键被按下转KEYC1处理
MOVP1,#11011111B;
第二列键被按下判断
CJNEA,#0FH,KEYC2;
第二列键被按下转KEYC2处理
LJMPKEY;
均不是转到键检测
KEYC1:
读键值键值处理
JBE0H,KEYC11
LCALLK1;
K1键处理
SJMPFANH
KEYC11:
LCALLK3;
K3键处理
KEYC2:
JBE0H,KEYC21
LCALLK2;
K2键处理
KEYC21:
LCALLK4;
K4键处理
FANH:
RET
C程序如下:
/***********************************************************************/
//按键函数扫描有键按下否(返回值不等于0,说明有键按下)
ucharkeysearch()
{
uchark;
P1=0x0f;
k=P1;
k=~k;
k=k&
0x0f;
returnk;
}
//按键函数(返回值:
等于0xff,说明没有键按下)
ucharkey()
uchara,c,kr,keynumb;
a=keysearch();
if(a==0)
return0xff;
else
delay(10);
//延时去抖动
else
{
a=0xef;
for(kr=0;
kr<
2;
kr++)
{
P1=a;
c=P1;
if((c&
0x01)==0)keynumb=kr+0x00;
0x02)==0)keynumb=kr+0x02;
a=_crol_(a,1);
//循环左移函数,需要intrins.h头文件支持
}
}
do{//按键释放检测
a=keysearch();
}while(a!
=0);
returnkeynumb;
//返回按键的编码键值
//按键的键值处理函数
voidkeybranch(uchark)
switch(k)
case0x00:
//添加需要执行的功能;
break;
case0x01:
case0x02:
case0x03:
default:
break;
5.请在图7-1的基础上,设计一个以中断方式工作的开关式键盘,并编写其中断键处理程序。
中断键处理程序:
KINT:
SJMPFANH;
是抖动返回
KEY1:
JB0E0H,KEY2
KEY2:
JB0E1H,KEY3
KEY3:
JNB0E2H,KEY4
LCALLK3;
KEY4:
FANH:
RETI
voidint_key()interrupt0
delay(10);
//delay10ms
temp=P1;
if((temp&
0x0f)==0x0f)
break;
if((temp&
0x0f)==0x0e)
//key1处理函数
0x0f)==0x0d)
//key2处理函数
0x0f)==0x0b)
//key3处理函数
0x0f)==0x07)
//key4处理函数
6.状态或数码显示时,对LED的驱动可采用低电平驱动,也可以采用高电平驱动,二者各有什么特点?
高电平驱动要采用共阴极数码管,必须外接上拉电阻;
低电平驱动要采用共阳极数码管,电源效率相对较高。
7.用DAC0832进行D/A转换时,当输出电压的范围在0~5V时,每变化一个二进制数其输出电压跳变约20mV,即输出是锯齿状的,采取何种措施可使输出信号比较平滑?
两种方法:
(1)可以计算移动平均值;
(2)可以设计滤波器的办法。
8.当系统的主频为6MHz时,请计算图7-17中DAC0832产生锯齿波信号的周期。
T=2μs×
8×
256=4096μs
9.编写图7-17中用DAC0832产生三角波的应用程序。
START:
MOVDPTR,#7FFFH
MOVA,#00H
LOOP:
MOVX@DPTR,A
INCA
CJNEA,#0FFH,L1
L2:
DECA
MOVX@DPTR,A
CJNEA,#00H,L2
L1:
AJMPLOOP
/***************************************************************************
程序功能:
连续访问外部DAC寄存器,产生锯齿波
***************************************************************************/
#include<
reg52.h>
//头文件包含
absacc.h>
#defineucharunsignedchar//宏定义
#defineuintunsignedint
延时函数
voiddelay()
uinti,j;
for(i=0;
i<
1;
i++)
for(j=0;
j<
120;
j++);
/**************************************************************************
主函数
voidmain()
unsignedchara=0;
//控制波形累加深度
while
(1)
XBYTE[0x7FFF]=a;
a++;
delay();
//加入延时函数,控制其周期
}
10.对图7-24的A/D转换电路,若采用中断方式,编写相应程序。
在硬件电路上,应当将EOC引脚接到单片机的外部中断引脚上面,如
;
初始化程序:
MAIN:
SETBIT1
SETBEA
SETBEX1
MOVR1,#data;
R1指向数据存储区首地址
MOVDPTR,#7FF8H;
DPTR指向通道0
MOVR7,#08H;
通道数8
MOVX@DPTR,A;
启动A/D转换
SJMP$
;
中断服务程序:
PINT1:
MOVXA,@DPTR;
转换结果读入累加器A
MOV@R1,A;
存储数据
INCDPTR;
修改指针
INCR1
RETI
/**************************************************************************/
//程序功能:
对8路模拟信号轮流采样,并把结果依次存到数组中;
//头文件定义
unsignedchara[8];
unsignedchari;
主程序
**************************************************************************/
EA=1;
IT1=1;
EX1=1;
XBYTE[0x7FF8]=a[0];
voidint_adc()interrupt0
a[i]=XBYTE[0x7FF8+i];
i++;
if(i>
7)
i=0;
11.当图7-24的ADC0809对8路模拟信号进行A/D转换时,编写用查询方式工作的采样程序,8路采样值存放在30H~37H单元。
MOVR1,#30H
MOVDPTR,#7FF8H
MOVR7,#08H
MOVX@DPTR,A
MOVR6,#0AH
DELAY:
NOP
NOP
DJNZR6,DELAY
MOVXA,@DPTR
MOV@R1,A
INCDPTR
DJNZR7,LOOP
END
对8路模拟信号轮流采样一次,并把结果依次存放在30H~37H单元;
unsignedcharp;
voiddelay(unsignedcharm)
unsignedchari,j;
m;
123;
unsignedchari;
p=0x30;
8;
a[i]=XBYTE[0x7FF8+i];
*[p++]=a[i];
while
(1);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 原理 应用