




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
矩阵形式的经典力学方程(完整版)实用资料(可以直接使用,可编辑完整版实用资料,欢迎下载)
矩阵形式的经典力学方程(完整版)实用资料(可以直接使用,可编辑完整版实用资料,欢迎下载)矩阵形式的经典力学方程卢新平(闽江学院物理学与电子信息工程系,福建福州350108)摘要:本文探讨矩阵在力学中的运用,给出矩阵形式的经典力学方程:[A|F>=[A|>,该方程形式简单,计算方便,用途广泛。关键词:矩阵;位形空间;广义坐标。中图分类号:O316文献标识码:A文章编号:ClassicalMechanicsEquationviatheMatrixLuXin-ping(PhysicsandElectronicsInformationEngineeringDepartmentofMinjiangUniversity,FuzhouFujian350108)Abstract:Inthispaper,wedevelopanewclassicalmechanicsequationviathematrix:[A|F>=[A|>.Theresultsshowedthatthisequationissimple,convenientanduseful.KeyWords:Matrix;Configurationspace;Generalizedcoordinate.物理学是优美的,它的美表现在基本物理规律的简洁性和普适性。然而,物理学的简洁性是隐蔽的,它具有深奥而含蓄的内在美。不懂得它的语言,是很难领会到的。用矩阵语言表述力学方程,不仅在形式上具有极大的简洁性,而且计算方便。当前科学计算中,几乎无处不用矩阵运算。MATLAB(“矩阵实验室”的缩写)是集数值计算、符号运算以及图形处理等强大功能于一体的优秀的计算机计算软件,它是以矩阵运算为基础的交互式程序语言。在MATLAB中,每一个变量代表一个矩阵;所有的运算都对矩阵有效,包括加减乘除和函数运算,而且只要键入算式,立即就得到结果,颇为方便。基于上述考虑,本文研究矩阵在经典力学中的运用,试图探讨与欣赏理想约束系统运动方程的简洁之美。1.矩阵符号约定当某一矢量用惯性参考系中的直角坐标基矢i1、i2、…展开时,可以省略基矢符号,记为左矢行矩阵<|形式,也可以记为右矢列矩阵|>形式;当空格中符号相同时,它们是互为转置矩阵。投影方向矢记为(|;左乘投影矩阵记为[|。我们采用计算机软件MATLAB语言:矩阵的值写在方括号内,n行m列矩阵的所有元素也可在一个方括号内一字排开,同一行各元素之间用逗号分开,不同的行则以分号隔开。例如,三维空间中质点位形矢可表为<x|=[x1,x2,x2]或:|x>=[x1,x2,x2]T=[x1;x2;x3]2.矩阵形式的动力学方程2.1.质点和质点系动力学方程在惯性系中质点系和质点(视为N=1的质点系)矢量式动力学方程为:收稿日期:2005-07-23基金项目:闽江学院力学教改与力学精品课程建设资助。作者简介:卢新平(1950~),男,福建闽侯人,闽江学院物理学与电子信息工程系副教授。|P>=|>=|F>+|R>(1)式中:|F>=[F1;…;F3N]为主动力,|R>为约束力;|P>=[p1;…;p3N]为质点系的动量。矢量方程(1)可沿任意方向(e|投影:(e||P>=(e|>=(e|F>+(e|R>(2)设N质点系统自由度为s,则系统在x-空间位形可用s个广义坐标q:q1,…,qs表出:<x|=[x1(q1,…,qs,t),…,x3N(q1,…,qs,t)]广义坐标qj的基向量可用x-空间坐标基矢表为:(qj|=<x|=[](3a)或(qj|=<|=[](3b)系统的s个广义坐标基向量(q1|,…,(qs|可合写为一个s行左乘投影矩阵:[A|=(4)传统的质点系统力学之所以能够得出一系列重要的结果,是因为寻找到了一个正确的出发点:把力区分为内力与外力。在此,我们为了得出另一些新的结果,也寻找到了另一个正确的出发点:把力区分为主动力与约束力。粗略地说,约束就是对质点系运动的限制;理想约束力是那些不做功的力,有(qj|R>=0(参见文献[1].),系统沿(qj|方向的投影方程可表为:(qj|>=(qj|F>(j=1,2,…,s)(5a)这s个独立方程可用一个矩阵方程简洁地表为:[A|>=[A|F>(5b)其中:|P>=[p1;…;p3N]为系统的用广义坐标q与广义速度表示的动量;主动力|F>中不包括约束作用力;系统x-空间的维数可根据实际情况减少,未必总是为3N.2.2.刚体平面运动动力学方程为了把方程(5)应用于平面运动的刚体,可以定义平面运动刚体的“位形矢”为:<x|=[xc,yc,],式中:xc与yc是质心坐标,为刚体绕质心轴转动的角坐标;定义平面运动刚体的“速度”为:<v|=[c,c,];定义平面平行运动刚体的“动量”为:<p|=(mc,mc,Ic),其中Ic为刚体对质心c轴的转动惯量;定义作用于刚体上的主动“力”为:<F|=[Fx,Fy,c],其中c为有功主动力对质心c的力矩。引入广义坐标q,按公式(3a)或(3b)求广义坐标基向量;则方程(5)就可作为刚体平面运动的动力学方程了。2.3.刚体一般运动动力学方程在某惯性系中,定义一般运动刚体的“速度”:<v|=[c,c,c,];定义其“动量”:<p|=[mc,mc,mc,IcxIcyy,IcZZ];定义作用于刚体上的主动“力”:<F|=[Fx,Fy,Fz,cx,cy,cz].引入广义坐标q,按公式(3b)求广义坐标基向量;则方程(5)也就可作为刚体一般运动的动力学方程了。至此小结一下:方程(5)把多种动力学问题统一起来,它可以适用于一般的质点和质点系统、刚体和刚体系统、质点和刚体混合系统,等等;它包含了受约束(理想约束,几何约束)的情况和不受约束的情况;同时也包含了直角坐标以及一般曲线坐标。方程(5)主要特点是:1)引入广义坐标,虚位移通过广义坐标表达,只考虑主动力不考虑理想约束力,使得方程简洁,解题方便;2)方程尤其适用于多自由度多广义坐标的比较复杂的完整约束系统;3)不管取什么为广义坐标,方程形式总是不变,解题步骤与格式也总是不变;4)适合采用计算机求解。3.矩阵形式的静力学平衡方程3.1.静力学问题的动力学方法静动法矩阵形式的动力学方程(5)同样适用于静力学。刚体或理想约束的质点系如果受力平衡,则运动状态不发生变化,方程(5)左边为为零。因此,受有理想约束的力学系统平衡的充要条件是:[A|F>=0或Qj=(qj|F>=0(j=1,…,s)(6)式中Qi是广义坐标基(qi|方向上的“广义力”。利用此方程求解理想约束的力学系统的平衡问题时,约束反力不出现于方程而自动消去,所以可以很简单地求出主动力在平衡位置时所应满足的平衡条件。3.2.动力学问题的静力学方法――动静法方程(6)是分析静力学中的基本方程。动力学方程(5)实际上也可以写成方程(6)的形式:令|F*>=|F>-|P>,则方程(5)即可写为:[A|F*>=0或Qj=(qj|F*>=0(j=1,…,s)(7)因此,可用用动力学方法求解静力学问题,也可以用静力学方法求解动力学问题。静力学与动力学问题可以用方程(5)统一起来。4.矩阵形式的拉格朗日方程作为理论应用,我们可以由方程(5)推导出分析力学中著名的拉格朗日方程,从而证明方程(5)就是矩阵形式的拉格朗日方程。显然,方程(5a)的右边就是广义力:(qj|F>=Fk=Qj(8)式中对重复下标k取和:k=1,…,3N,略写求和符号,以下遇到重复指标皆表取和。方程(5a)左边为:(qj|>=(qj||P>=[(qj|P>)-(j|P>(9)由公式(3b)可得:(qj|P>=mkvkvk=(mkvk2)=(10)由公式(j|=(qj|=<x|=<v|可得:(j|P>=mkvkvk=(mkvk2)=(11)式中T=mkk2=mkvk2为系统动能(其中m3k-2=m3k-1=m3k为第k个质点质量)综合(8)、(9)、(10)、(11)就得到基本形式的拉格朗日方程:-=Qj(j=1,2,……,s)(12)因此,笔者认为方程(5)与拉格朗日方程等价,是拉格朗日方程的矩阵形式。当前科学计算中,几乎无处不用矩阵运算,这使方程(5)的优势得到充分体现,该方程最适宜于引用MATLAB计算软件求解。5.算例例1.质量M=3kg半径为R=20cm的均质圆柱体C放在质量m=1kg的木板B上,木板放在光滑水平面上,木板受到一个水平拉力F=20N作用,已知圆柱体在木板上纯滚动。试求:木板的加速度a.解:选取圆柱体C和木板B为系统研究,其自由度s=2。如图所示,取木板移动的速度v和圆柱体转动的角速度为广义坐标(广义速度),则系统的“速度矢”为:.<V|=[vB,vC,]=[v,v-R,];广义坐标基向量:(v|=<V|=[1,1,0],(|=<V|=[0,-R,1];合写为2行左乘投影矩阵:[A|=;作用于系统的主动力:|F>=[F;0;0];系统“动量”:|P>=[mv;M(v-R);Ic]所以|>==,其中Ic==0.06(kg·m2)据方程(5b)得:=以上完成了“建模”,往下数值计算可以采用MATLAB软件。【MATLAB计算程序】clear,formatcompact%按A*B*X=A*F列写此系统的矩阵方程,其中X=[a;]。A=[1,1,0;0,-0.2,1];B=[1,0;3,-3*0.2;0,0.06];F=[20;0;0].C=A*B;D=A*F;X=C\D;%解出Xa=X(1)%显示要求的分量【程序运行结果】a=10答案:木板的加速度为10m/s2例2.长为2L的均质棒,右端A抵在光滑的墙壁上,而棒身则如图所示斜靠在与墙壁相距为d(d<Lcos)的光滑棱角上。求棒在平衡时与水平面所成的夹角解:棒在质心C处受竖直向下主动力mg(重力),以棒与棱角接触点为原点,竖直向上为oy轴建立坐标系,如图所示,则主动力为:|F>=[-mg];取q=角为广义坐标,则主动力作用点的位矢可表为<X|=[yc]=[(L-)sin]广义坐标基向量:(q|=<X|=[Lcos-d·sec2];据方程(6),棒的平衡方程(q|F>=0即:(Lcos-d·sec2)mg=0由此可得:=arccos()1/3.解毕.6.结论方程(5)把多种动力学问题统一起来,还把静力学问题与动力学统一起来。它是分析力学中拉格朗日方程的矩阵形式。当前科学计算中,几乎无处不用矩阵运算。方程(5)适宜于引用MATLAB计算软件求解。总之,矩阵形式的动力学方程(5)具有简单性、普遍性、方便性与实用性。参考文献:[1]卢新平.用Dirac符号表述的非自由质点系动力学方程[J].力学与实践,2005(1).[2]朱照宣,周起钊,殷金生.理论力学[M].北京:北京大学出版社,1982.[3]W.Hauser:IntroductiontothePrinciplesofMechanics[M].Addison-WeslesPublishingCompany.1987.第一章线性方程组与矩阵课程教案授课题目:第二节矩阵概念与矩阵的初等变换教学目的:1.掌握高斯消元法求解线性方程组.2.理解矩阵的概念、运算及其性质,掌握矩阵的初等行变换.教学重点:本章以课堂教学为主,使学生掌握矩阵的初等行变换,提高学生的逻辑思维能力和计算能力.教学难点:初等行变换的运用.课时安排:2学时.授课方式:多媒体与板书结合.教学基本内容:§1.2矩阵概念与矩阵的初等变换1.概念对线性方程组(1其系数可用表示.定义1个数排列成行(横向)、列(纵向)的矩形数表:
称为矩阵,简记为,其中为中第行第列的元素.如是3行4列的矩阵.这里,3×4是个记号,表明矩阵有3行4列的事实而不能取乘积“12”.2.一些特殊的矩阵1行矩阵——只有一行的矩阵.例.2列矩阵——只有一列的矩阵.例.3零矩阵——所有元素都等于0的矩阵.例.4同型矩阵——行数相同、列数也相同.例与同型.5当时称为阶方阵;所在的对角线称为方阵的主对角线.6主对角线下(上)方的元素全为零的方阵称为上(下)三角阵.例为上三角阵;为下三角阵.7主对角线以外的元素全为零的方阵称为对角阵,记为,简记为.8数量阵——对角阵中.例.9单位阵——数量阵中,记以或.例.注(1)只有1列或1行的矩阵分别称为列矩阵或行矩阵,也被称为列向量或行向量.这样,它们就有了矩阵和向量的双重“身份”.作为向量,常用小写黑体字母a、b、……等标记之,向量的元也称为分量,一个向量所含分量的个数称为维(是个数),如是个3维列向量,其实就是由3个数组成的一个有序数组.维向量是个数的一个有序数组,亦即是个的列矩阵或的行矩阵.列向量与行向量虽然只是写法上的不同,但我们还是与多数参考书一样约定:除非特别说明,说到向量一般均指列向量.行向量则被记作aT或a′等.(2)矩阵也称为阶方阵或阶矩阵,而1阶矩阵被约定当作“数”(即“元”本身)对待,当然“数”是不能当作1阶矩阵来对待的.对阶矩阵,后面要讨论其行列式、是否为可逆阵、转置伴随阵、及特征值与对角化等种种问题等.(3)单位阵、对角阵、三角阵是特别简单的一些方阵,在今后讨论的基本运算中,它们各表现出一些简单特性,这就使它们在形成或训练解决问题的矩阵方法中都将有重要作用.对线性方程组(1称为(1的系数矩阵,称为(1的增广矩阵.3.矩阵的行(列初等变换定义2
矩阵的行(列初等变换:
(1
对换矩阵的两行(列),用表示对换两行(列)的行(列)初等变换,即();
(2
用非零数乘矩阵的某一行(列),用表示以乘矩阵的第行(列)的行(列)初等变换,即;(3将矩阵的某行(列乘以数再加入另一行(列)中去,用表示乘矩阵的第行(列)后加到第行(列)的行(列)初等变换,即.4.矩阵的等价定义将矩阵的行经有限次初等变换化为,称与等价,记作.5.行阶梯形矩阵与最简形矩阵定义3若矩阵的零行(元素全为零的行)位于的下方,且各非零行(元素不全为零的行)的非零首元(第一个不为零的元素)的列标随行标的递增而严格增大,则称为行阶梯形矩阵.定义4若行阶梯形矩阵的各非零首元均为1,且各非零首元所在列的其余元素均为零,则称为最简形.6.用初等变换线性方程组的解1将(1的增广矩阵用行初等变换化为最简形;2由最简形对应的方程组得到解.例1求解下列齐次线性方程组:.解(1对系数矩阵实施行变换:,即得,故方程组的解为.例2求解下列非齐次线性方程组:(1(2解(1对系数的增广矩阵施初等行变换,有故方程组无解.(2对系数的增广矩阵施初等行变换:,即得,亦即.参考书目:1.贺铁山等,线性代数(第二版),中山大学出版社,2004年8月.2.吴赣昌,大学数学立体化教材:线性代数(经济类),中国人民大学出版社,2006年3月.3.同济大学应用数学系,工程数学(第四版),高等教育出版社,2003年7月.作业和思考题:Page27:1—4.课后小结:1能用矩阵的初等行变换并通过初等行变换将矩阵化为行阶梯形矩阵和行最简形矩阵.2熟练地能掌握用高斯消元法求解线性方程组的思想、方法和步骤.经典的矩阵键盘扫描程序查找哪个按键被按下的方法为:一个一个地查找。
先第一行输出0,检查列线是否非全高;
否则第二行输出0,检查列线是否非全高;
否则第三行输出0,检查列线是否非全高;
如果某行输出0时,查到列线非全高,则该行有按键按下;
根据第几行线输出0与第几列线读入为0,即可判断在具体什么位置的按键按下。下面是具体程序:voidCheck_Key(void
{
unsignedcharrow,col,tmp1,tmp2;
tmp1=0x10;
//tmp1用来设置P1口的输出,取反后使P1.4~P1.7中有一个为0
for(row=0;row<4;row++
//行检测
{
P1=0x0f;
//先将p1.4~P1.7置高
P1=~tmp1;
//使P1.4~p1.7中有一个为0
tmp1*=2;
//tmp1左移一位
if((P1&0x0f<0x0f
//检测P1.0~P1.3中是否有一位为0,只要有,则说明此行有键按下,进入列检测
{
tmp2=0x01;
//tmp2用于检测出哪一列为0
for(col=0;col<4;col++
//列检测
{
if((P1&tmp2==0x00
//该列如果为低电平则可以判定为该列
{
key_val=key_Map[row*4+col];
//获取键值,识别按键;key_Map为按键的定义表
return;
//退出循环
}
tmp2*=2;
//tmp2左移一位
}
}
}
}
//结束
这是一种比较经典的矩阵键盘识别方法,实现起来较为简单,程序短小精炼。4*4矩阵键盘扫描程序/*
设置行线为输入线,列线为输出线
*/
ucharKeyScan(;
//按键扫描子程序
voiddelay10ms(;
//延时程序
ucharkey_free(;
//等待按键释放程序
voidkey_deal(;
//键处理程序
//主程序
voidmain(
{
while(1
{
KeyScan(;
key_free(;
key_deal(;
}
}
//按键扫描子程序
ucharKyeScan()
{
unsignedcharkey,temp;
P1=0xF0;
if(P1&0xF0!=0xF0
{
delay10ms(;
//延时去抖动
if(P1&0xF0!=0xF0
{
P1=0xFE;
//扫描第一列
temp=P1;
temp=temp&0xF0;
if(temp!=0xF0
//如果本列有键按下
{
switch(temp
{
case0xE0:
//第一行有键按下
key=0;break;
case0xD0:
//第二行有键按下
key=4;break;
case0xB0:
//第三行有键按下
key=8;break;
case0x70:
//第四行有键按下
key=12;break;
}
}
P1=0xFD;
//扫描第二列
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
switch(temp
{
case0xE0:
//第一行有键按下
key=1;break;
case0xD0:
//第二行有键按下
key=5;break;
case0xB0:
//第三行有键按下
key=9;break;
case0x70:
//第四行有键按下
key=13;break;
}
}
P1=0xFb;
//扫描第三列
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
switch(temp
{
case0xE0:
//第一行有键按下
key=2;break;
case0xD0:
//第二行有键按下
key=6;break;
case0xB0:
//第三行有键按下
key=10;break;
case0x70:
//第四行有键按下
key=14;break;
}
}
P1=0xF7;
//扫描第四列
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
switch(temp
{
case0xE0:
//第一行有键按下
key=3;break;
case0xD0:
//第二行有键按下
key=7;break;
case0xB0:
//第三行有键按下
key=11;break;
case0x70:
//第四行有键按下
key=15;break;
}
}
}
return(key;
}
}
//延时程序
voiddelay10ms(
{
unsignedchari,j;
for(i=0;i<10;b++
for(j=0;j<120;j++//延时1ms
{
}
}
//等待按键释放程序
ucharkey_free(
{
key=key_scan(;
//取扫描到的键值
P1=0xF0;//置行线全为高电平,列线全为低电平
wheile(P1&0xF0!=0xF0
//如果仍有键按下
{
}
return(key;//返回键值
}51单片机矩阵键盘扫描、数码管显示键值实验/***********************************************
程序名称:矩阵键盘扫描显示键值
简要说明:P1口接矩阵键盘:低四位列,高四位行
使用共阳型数码管:
P0口输出数码管段码,P2口输出数码管位码
编
写:JiangX.net
***********************************************/
#include
#defineucharunsignedchar;
ucharkey_val=0;
//定义键值,初始默认为0
ucharcodeTAB[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xC6,0xa1,0x86,0x8e};
//0~F共阳数码管显示段码/*****按键扫描*****/
voidCheck_Key(void
{
unsignedcharrow,col,tmp1,tmp2;
tmp1=0x10;
//tmp1用来设置P1口的输出,取反后使P1.4~P1.7中有一个为0
for(row=0;row<4;row++
//行检测
{
P1=0x0f;
//先将p1.4~P1.7置高
P1=~tmp1;
//使P1.4~p1.7中有一个为0
tmp1*=2;
//tmp1左移一位
if((P1&0x0f<0x0f
//检测P1.0~P1.3中是否有一位为0,只要有,则说明此行有键按下,进入列检测
{
tmp2=0x01;
//tmp2用于检测出哪一列为0
for(col=0;col<4;col++
//列检测
{
if((P1&tmp2==0x00
//该列如果为低电平则可以判定为该列
{
key_val=row*4+col;//获取键值,识别按键
return;
//退出循环
}
tmp2*=2;
//tmp2左移一位
}
}
}
}
/*****主函数,显示键值*****/
voidmain(
{
P2=0x00;
//位码,这里全部置低,点亮8位数码管(见视频效果)
while(1
{
Check_Key(;
P0=TAB[key_val];
//显示
}
}实验7矩阵按键识别技术矩阵按键部分由16个轻触按键按照4行4列排列,连接到JP50端口。将行线所接的单片机的I/O口作为输出端,而列线所接的I/O口则作为输入。这样,当按键没有按下时,所有的输出端都是高电平,代表无键按下。行线输出是低电平,一旦有键按下,则输入线就会被拉低,这样,通过读入输入线的状态就可得知是否有键按下了。确定矩阵式键盘上何键被按下,介绍一种“行扫描法”。行扫描法行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法.
判断键盘中有无键按下:将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。
判断闭合键所在的位置:在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。下面给出一个具体的例子:8031单片机的P1口用作键盘I/O口,键盘的列线接到P1口的低4位,键盘的行线接到P1口的高4位。列线设置为输入线,行线设置为输出线。4根行线和4根列线形成16个相交点。1,检测当前是否有键被按下。检测的方法是输出全“0”,读取的状态,若为全“1”,则无键闭合,否则有键合。2,去除键抖动。当检测到有键按下后,延时一段时间再做下一步的检测判断。3.若有键被按下,应识别出是哪一个键闭合。方法是对键盘的行线进行扫描。P1.4-P1.7按下述4种组合依次输出:P1.71110P1.61101P1.51011P1.40111
在每组行输出时读取P1.0-P1.3,若全为“1”,则表示为“0”这一行没有键闭合,否则有键闭合。由此得到闭合键的行值和列值,然后可采用计算法或查表法将闭合键的行值和列值转换成所定义的键值。4,为了保证键每闭合一次CPU仅作一次处理,必须去除键释放时的抖动。实验目的:通过XL2000的16位矩阵按键,在数码管上分别显示09,A,B,C,D,E,F。接线方法:1,用一条8PIN数据排线,把矩阵按键部份的JP50,接到CPU部份的P1口JP44.
2,接8位数码管的数据线。将数码管部份的数据口JP5接到CPU部份的P0口JP51.
3,接8位数码管的显示位线。将数码管部份的显示位口JP8接到CPU部份的P2口JP52.参考程序:;本程序实现扫描按键显示功能.;分别按16个键盘显示分别显示数字123A456B789C*0#D;键盘口P1,数码管显示第二位p21,数码管段位p0口org0000hajmpmainorg0030hmain:movdptr,#tab
;将表头放入DPTRlcallkey;调用键盘扫描程序movca,@a+dptr;查表后将键值送入ACCmovp0,a;将Acc值送入P0口CLRP2.1;开显示ljmpmain;返回反复循环显示KEY:LCALLKS;调用检测按键子程序JNZK1;有键按下继续LCALLDELAY2;无键按调用延时去抖AJMPKEY;返回继续检测按键K1:LCALLDELAY2LCALLDELAY2;有键按下延时去抖动LCALLKS;再调用检测按键程序JNZK2;确认有按下进行下一步AJMPKEY;无键按下返回继续检测K2:MOVR2,#0EFH;将扫描值送入R2暂存MOVR4,#00H;将第一列值送入R4暂存K3:MOVP1,R2;将R2的值送入P1口L6:JBP1.0,L1;P1.0等于1跳转到L1MOVA,#00H;将第一行值送入ACCAJMPLK;跳转到键值处理程序L1:JBP1.1,L2;P1.1等于1跳转到L2MOVA,#04H;将第二行的行值送入ACCAJMPLK;跳转到键值理程序进行键值处理L2:JBP1.2,L3;P1.2等于1跳转到L3MOVA,#08H;将第三行的行值送入ACCAJMPLK;跳转到键值处理程序L3:JBP1.3,NEXT;P1.3等于1跳转到NEXT处MOVA,#0cH;将第四行的行值送入ACCLK:ADDA,R4;行值与列值相加后的键值送入APUSHACC;将A中的值送入堆栈暂存K4:LCALLDELAY2;调用延时去抖动程序LCALLKS;调用按键检测程序JNZK4;按键没有松开继续返回检测POPACC;将堆栈的值送入ACCRETNEXT:INCR4;将列值加一MOVA,R2;将R2的值送入AJNBACC.7,KEY;扫描完至KEY处进行下一扫描RLA;扫描未完将A中的值右移一位进行下一列的扫描MOVR2,A;将ACC的值送入R2暂存AJMPK3;跳转到K3继续KS:MOVP1,#0FH;将P1口高四位置0低四位值1MOVA,P1;读P1口XRLA,#0FH;将A中的值与A中的值相异或RET;子程序返回DELAY2:;40ms延时去抖动子程序MOVR5,#08HL7:MOVR6,#0FAHL8:DJNZR6,L8DJNZR5,L7RETtab:db28h,34h,28h,34h,0a9h,60h,20h,7ah,20h,21h,61h,74h,30h,62h,0a2h,7eh;0h0hc9878654a321轮流显示键盘因为无法表达*#就用H表示,B用8表示end矩阵按键与数码管显示的运行照片
3x4矩阵键盘的扫描程序(C语言3x4矩阵键盘的扫描程序(C语言
按相应的按键,数码管显示相应的数字,星号键和井号键分别显示为E和F
#include
unsignedcharcodetable[]={0xC0,0xF9,0xA4,0xB0,0x99,//0~4
0x92,0x82,0xF8,0x80,0x90,//5~9
0x88,0x83,0xA7,0xA1,0x86,0x8E};//A~F
voidKeyScan(;
voiddelay10ms(unsignedchartime;
voidDispaly(unsignedchark;
unsignedcharkey,temp;
voidmain(//主程序
{
while(1
{
KeyScan(;
}
}
voidKeyScan(//按键扫描子程序
{
P1=0xFF;
P1_3=0;
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
delay10ms(1;
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
temp=P1;
temp&=0xF0;
switch(temp
{
case0x70:
key=1;break;
case0xB0:
key=2;break;
case0xD0:
key=3;break;
}
Dispaly(key;
}
}
P1=0xFF;
P1_2=0;
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
delay10ms(1;
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
temp=P1;
temp&=0xF0;
switch(temp
{
case0x70:
key=4;break;
case0xB0:
key=5;break;
case0xD0:
key=6;break;
}
Dispaly(key;
}
}
P1=0xFF;
P1_1=0;
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
delay10ms(1;
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
temp=P1;
temp&=0xF0;
switch(temp
{
case0x70:
key=7;break;
case0xB0:
key=8;break;
case0xD0:
key=9;break;
}
Dispaly(key;
}
}
P1=0xFF;
P1_0=0;
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
delay10ms(1;
temp=P1;
temp&=0xF0;
if(temp!=0xF0
{
temp=P1;
temp&=0xF0;
switch(temp
{
case0x70:
key=14;break;
case0xB0:
key=0;break;
case0xD0:
key=15;break;
}
Dispaly(key;
}
}
}
//延时程序
voiddelay10ms(unsignedchartime
{
unsignedchara,b,c;
for(a=0;a
for(b=0;b<10;b++
for(c=0;c<120;c++
;
}
voidDispaly(unsignedchark//显示程序
{
P0=table[k];
P2_1=0;
}
C51矩阵键盘扫描程序代码实例/**************************************************************************
*p1.3p1.2p1.1p1.0
*||||p1.4
*||||p1.5
*||||p1.6
*||||p1.7
*||||
*
*键值排列:
*15141312
*111098
*7654
*3210
****************************************************************************/
#defineucharunsignedchar
#include
ucharKeyScan(
{
ucharrow=0;//将行号置0
ucharcol=0;//将列号置0
ucharmask=0x7f;
ucharpic=0;
ucharkey0=255;
ucharShift_Count=0;
ucharcodeKey_value[]={0,1,2,3,5,6,7,8,9,10,
11,12,13,14,15,16};
/*抖动返回200,无键按下返回255*/
P1&=0x0f;
if((P1&0x0f==0x0f{key0=255;return(key0;}
Delay(50;//延时25mS去抖动
if((P1&0x0f==0x0f{key0=200;return(key0;}
/*有键按下,则分析键所在的列号*/
P1=mask;
while((P1&0x0f==0x0f&&Shift_Count<3
{
++col;++Shift_Count;
mask=_cror_(mask,1;//右移动一位
P1=mask;
}
/*有键按下,则分析键所在的行号*/
pic=P1&0x0f;
mask=0x01;
while(pic&mask
{
++row;
mask=_crol_(mask,1;//左移一位
}
/*得到键值*/
pic=row*4+col;
key0=Key_value[pic];
return(key0;
}
/************************************************************
*函数功能:延时程序0.5mS
*input:i
*output:NULL
*mcu:p89c51
*frequency:11.0592MHz
*period:f/6
************************************************************/
voidDelay(uinti
{
ucharj;
while(i--
{for(j=0;j<125;j++;}
}
/**************************************************************************
*p1.3p1.2p1.1p1.0
*||||p1.4
*||||p1.5
*||||p1.6
*||||p1.7
*||||
*
*键值排列:
*15141312
*111098
*7654
*3210
****************************************************************************/
#defineucharunsignedchar
#include
ucharKeyScan(
{
ucharrow=0;//将行号置0
ucharcol=0;//将列号置0
ucharmask=0x7f;
ucharpic=0;
ucharkey0=255;
ucharShift_Count=0;
ucharcodeKey_value[]={0,1,2,3,5,6,7,8,9,10,
11,12,13,14,15,16};
/*抖动返回200,无键按下返回255*/
P1&=0x0f;
if((P1&0x0f==0x0f{key0=255;return(key0;}
Delay(50;//延时25mS去抖动
if((P1&0x0f==0x0f{key0=200;return(key0;}
/*有键按下,则分析键所在的列号*/
P1=mask;
while((P1&0x0f==0x0f&&Shift_Count<3
{
++col;++Shift_Count;
mask=_cror_(mask,1;//右移动一位
P1=mask;
}
/*有键按下,则分析键所在的行号*/
pic=P1&0x0f;
mask=0x01;
while(pic&mask
{
++row;
mask=_crol_(mask,1;//左移一位
}
/*得到键值*/
pic=row*4+col;
key0=Key_value[pic];
return(key0;
}
/************************************************************
*函数功能:延时程序0.5mS
*input:i
*output:NULL
*mcu:p89c51
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度无人驾驶技术研发合伙人投资协议书
- 二零二五年度员工入股分红协议:股权分红与绩效考核挂钩
- 科技助力下的石墨制品质量检测与评估技术
- 二零二五年度农机租赁与农业废弃物资源化利用项目合作协议
- 2025至2030年中国绒毛浆数据监测研究报告
- 电商直播销售从策划到执行的全过程解析
- 二零二五年度企业食堂绿色餐饮承包协议
- 二零二五年度服务业企业绩效协议目标责任书模板
- 二零二五年度购房贷款保险合同
- 二零二五年度桶装水行业规范与自律合作协议
- 2024至2030年中国阻隔防爆橇装式加油装置行业投资前景及策略咨询研究报告
- DB34∕T 3247-2018 井采煤矿绿色矿山建设要求
- 2024至2030年中国小模数齿轮市场调查与行业前景预测专题研究报告
- DB32T-公路桥梁水下结构检测评定标准
- 小学语文教师读书笔记范文(5篇)
- 2023年部编人教版六年级道德与法治下册全册课件【全套】
- 《茉莉花》(课件)人音版音乐六年级上册
- 肌肉注射的常见并发症及预防处理措施
- 景观模型设计与制作:第7章 建筑模型制作基本技法
- 关爱妇女防治两癌讲座课件
- DL∕T 584-2017 3kV~110kV电网继电保护装置运行整定规程
评论
0/150
提交评论