77范文网 - 专业文章范例文档资料分享平台

毕业设计11说明书(8)

来源:网络收集 时间:2019-04-01 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

毕 业 论 文(设 计)用 纸

sccode=0xfe;

while{{sccode&0x10}!=0} {

P1=sccode;

if{(P1 &0xf0)! =0xf0} /*输出行扫描码*I {

ecode=(P1&0xf0)!=0x0f; /*本行有键按下*/ return((~sccode)+(~recode)); /*返回特征字节码*/ }

ecse sccode=({sccodee<<1)10x01 /*行扫描码左移一位*/ return(0); /*无键按下,返回值为0*/ }

此程序对于行列式键盘而言是一种通用的键盘扫描要稍作改动,即可适用于不同的使用场合。

3.4 键盘的软件去抖

1. 作用

当按下一个键时,往往会出现所按键在闭合位置和断开位置之间跳-几下才稳定到闭合状态的情况。在释放一个键时,也会出现类似的情况,这就是键抖动,抖动得持续时间不一.通常不会大于10ms若抖动问题不解决,就会引起对闭合键的多次读入,从而引起系统对输入状态的判断失误,所以很有必要进行按键的消抖。

2.技术方案

在单片机控制系统中,按键处理儿乎存在于每个实际设计中。目前,有两种方法可以对按键进行消抖,一种是通过使用RS触发器构成的硬件电路消除按键的抖动,而另一种则是本设计中需要说明的软件消抖方法。

软件消抖的方法也有所不同,一种是通过延时的方法消抖,这是一种常用的消抖方法。判断有键后延时10~20ms再次读键判断,以便达到每次按键操作只产生一次有效信号供单片机处理。由于键被按下的时间持续上百ms,延时后再扫描也不迟。

佳木斯大学教务处 第 32 页

毕 业 论 文(设 计)用 纸

另一种方法则是以软件方式实现类似于可重复触发单稳态脉冲的硬件消抖电路。实现原理是将读入的按键字节与软件产生的控制字节进行逻辑操作后再处理,而控制字节在每次按键的第一个抖动沿就置为FFH,并保持0.5s在此后的多次抖动因为逻辑或操作而被屏蔽掉,当屏蔽时间到达后,控制字节清为00H,从而可以接受下一次按键响应,0.5s的屏蔽时间适合多数操作者的反应速度,实际情况可以短至0.3s,再短会增加操作者在控制键盘输入上的难度。

3.具体实现

在本设计中,采用的键盘消抖方法是常用的软件延时方法,在键盘输入的扫描过程中嵌入如下的程序段,则能方便的实现键盘输出的消抖功能。

void main(void) {

uchar key; while(1) {

key=kbscan() //键盘扫描程序

delays(); //键的消抖延时函数 void delays(void) { uchar

for(i=300;i>0;i--);

上述程序中的delays()就是单片机的延时子函数,由于采用的晶振频率不同,采用的延时函数的循环次数也不相同,需要用户根据实际情况自己定义。

3.5 C51和汇编的混合编程

1.作用

C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并可以调用汇编语言的子程序或子函数。

FranklinC51是一种专门针对51系列微处理器的C开发工具,它提供了丰富的库

佳木斯大学教务处 第 33 页

毕 业 论 文(设 计)用 纸

函数,具有很强的数据处理能力,编程中对8051寄存器和存储器的分配均由编译器自动管理,因而,通常用C51来编写主程序。然而,有时也需要在C程序中调用一些用汇编A51编写的子程序。例如,以前用汇编语言编写的子程序、要求较高的处理速度而必须用更简练的汇编语言编写的特殊函数或因时序要求严格而不得不使用灵活性更强的汇编语言编写的某些接口程序等等。另一方面,在以汇编语言为主体的程序开发过程中,如果涉及到复杂的数学运算,往往需要借助C语言工具所提供的运算库函数和强大的数据处理能力,这就要求在汇编中调用C函数。

2.技术方案

(1)函数名的转换和命名

本章前面的模块为同一种语言的模块化编程。下面是模块以不同语言编写的模块化编程,即混合编程。混合编程必须指定参数的传递规则。函数名的转换如表3-5。

表3-5函数名的转换

说明 void func(void)

符号名 FUNC

解释

无参数传递或不含寄存器参数的函数名不作改变转入目标文件中,名

字只是简单地转为大写形式

void func(char) _FUNC

带寄存器参数的函数名加入“_”字符以示区别,它表明这类函数包含

寄存器内的参数传递

voidfunc(void) _?FUNC reentrant

对于重入函数加上“_?”字符串前以示区别,它表明该函数包含栈内

的参数传递

当组合在一起的程序部分以不同语言编写时,大多数是用汇编语言编写硬件有关的程序。编译器由于历史原因不能有效使用内部寄存器。编译器也可把中间结果放到片外RAM中。通常情况下以高级语言C编写主程序,这样程序易编写。几个字节的外部代码仅用一次,时间消耗很少,但循环重复使用这些字节消耗很大。好的方法是以高级语言编写而在经常用到的函数处调用相关的子函数,不论该函数用何种语言编写。

佳木斯大学教务处 第 34 页

毕 业 论 文(设 计)用 纸

所有程序运行通过后,返回来优化有缺陷的程序。一些C编译器可以很容易的生成汇编语言源程序,必须汇编后才得到最后程序;一些编译器允许单行的汇编程序,也可把汇编程序集中在同一文件中。参数通常是通过固定的CPU寄存器传给汇编程序的。当使用#progmaNORFG PARMS”时,则通过固定的存贮器位置传递参数,在这就给Franklin C51之间提供了一个非常简洁的接口,且返回值在CPU寄存器中。

(2)C51函数的参数传递规则

C和汇编接口的关键在于要弄清C函数的参数传递规则,Franklin C51具有特定的参数传递规则,这就为二者的接口提供了条件。FranklinC51函数最多可通过CPU寄存器传递3个参数,这种传递技术的优点是可产生与汇编语言相比的高效代码。表3-6是利用寄存器传递参数的规则。如果参数较多而使寄存器不够用时,部分参数将在固定的存储区内传送,这种混合的情况有时会在弄清每一个参数的传递方式时发生困难。如果在源程序程序中选择了编译控制命令“#pragma NOREG PARMS”,则所有参数传递都发生在固定存储区域,所使用的地址空间依赖于所选择的存储器模式。这种参数传递技术的优点是传递途径非常清晰,缺点是代码效率不高,速度较慢。当函数具有返回值时,也需传递参数,这种返回值参数的传递均是通过CPU内部寄存器完成。

FranklinC编译器可使用寄存器传递参数,也可用固定存贮器位置或使用堆栈,这些只是选项。通过堆栈传递参数,总的来说对C更协调并支持重入。若一函数调用自己,堆栈加深而不是改写变量。尽管这种方法更通用,但对8051无效,这是因为要保证有大的堆栈才能存取外部RAM。所有操作必须用一对指令,每次要设置和保存数据指针。编译器可使用通常的内部堆栈,但对数学库函数不实用,它可能要耗用现有128或256字节中的100个字节,而其他软件也需要内部RAM。

CPU寄存器中最多传递3个函数。这种参数传递技术产生高效代码,可与汇编程序相媲美。参数传递的寄存器选择如表3-6所示。

参数类型 第1个参数 第2个参数

char R7 R5

int R4~R7 R4~R7

long,float R4~R7 R4~R7

一般指针 R1,R2,R3 R1,R2,R3

佳木斯大学教务处 第 35 页

毕 业 论 文(设 计)用 纸

第3个参数

R3

R1,R2,R3

下面提供了几个说明参数传递规则的例子。 //“a”是第一个参数,在R6, R7中传递。 funcl(int a)

//\”在R6,R7中传递、“n”在R4,R5中传递,“P”在R1, R2 ,R3中传递 func2 (int i, int n, int*p)

//“m”在R4~R7中传递,“f”不能在寄存器中使用,只能在参数传递段中传递 func3(long m, long f )

//“1”在RA~R7中传递,“j”,不能在寄存器中传递,必须在参数传递段中传递 func4(float 1,chat j)

参数传递段给出汇编在程序中使用的置定存储区,就像参数传递给C函数一样,参数传递段的首址通过名为“?函数名?BYTE”的PUBLIC符号确定。当传递位值时,使用名为“?函数名?BYTE”的PUBLIC符号。所有传递的参数放在以首地址开始递增的存储区内,函数返回值放入CPU寄存器,如表3-7所示。这样,C51程序与汇编语言的接口相当直观。

表3-7 参数传递的定义

返回值 bit (unsigned) char (unsigned) int (unsigned) long

float 指针

寄存器 C R7 R6,R7 R4~R7 R4~R7

进位标志

高位在R6,低位在R7 高位在R4,低位在R7

32位IEEE格式,指数和符号在R7

说明

R1,R2,R3 R3放存贮器类型,高位在R2,低位在

R1

在汇编子程序中,当前选择的寄存器组及寄存器ACC,B,DPTR和PSW都可能改变。当被C函数调用时,必须无条件地假定这些寄存器的内容已被破坏。如果在连接/定位程序时选择了覆盖,那么每个汇编子程序包含一个单独的程序段是必要的,因为在覆盖过程中,函数间参量通过于程序各自的段参量计算。

佳木斯大学教务处 第 36 页

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库毕业设计11说明书(8)在线全文阅读。

毕业设计11说明书(8).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/561336.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: