下载

1下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 初学单片机的40个实验

初学单片机的40个实验.doc

初学单片机的40个实验

糊涂Always
2010-10-20 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《初学单片机的40个实验doc》,可适用于IT/计算机领域

.闪烁灯. 实验任务如图所示:在P端口上接一个发光二极管L使L在不停地一亮一灭一亮一灭的时间间隔为秒。. 电路原理图图. 系统板上硬件连线把“单片机系统”区域中的P端口用导线连接到“八路发光二极管指示模块”区域中的L端口上。. 程序设计内容().延时程序的设计方法作为单片机的指令的执行的时间是很短数量大微秒级因此我们要求的闪烁时间间隔为秒相对于微秒来说相差太大所以我们在执行某一指令时插入延时程序来达到我们的要求但这样的延时程序是如何设计呢?下面具体介绍其原理:如图所示的石英晶体为MHz因此个机器周期为微秒机器周期微秒MOVR,#个机器周期 D:MOVR,#个机器周期        +×= ×DJNZR,$个机器周期 ×            DJNZR,D个机器周期   ×=         因此上面的延时程序时间为ms。由以上可知当R=、R=时延时msR=、R=时延时ms,以此为基本的计时单位。如本实验要求秒=msms×R=ms则R=延时子程序如下:DELAY:MOVR,#D:MOVR,#D:MOVR,#DJNZR,$DJNZR,DDJNZR,DRET().输出控制如图所示当P端口输出高电平即P=时根据发光二极管的单向导电性可知这时发光二极管L熄灭当P端口输出低电平即P=时发光二极管L亮我们可以使用SETB P指令使P端口输出高电平使用CLR P指令使P端口输出低电平。.程序框图  如图所示        图.汇编源程序ORGSTART:CLRPLCALLDELAYSETBPLCALLDELAYLJMPSTARTDELAY:MOVR,#延时子程序延时秒D:MOVR,#D:MOVR,#DJNZR,$DJNZR,DDJNZR,DRETEND.C语言源程序#include<ATXH>sbitL=P^voiddelays(void)延时秒子程序{unsignedchari,j,kfor(i=i>i)for(j=j>j)for(k=k>k)}voidmain(void){while(){L=delays()L=delays()}}.模拟开关灯.实验任务如图所示监视开关K(接在P端口上)用发光二极管L(接在单片机P端口上)显示开关状态如果开关合上L亮开关打开L熄灭。.电路原理图图.系统板上硬件连线().把“单片机系统”区域中的P端口用导线连接到“八路发光二极管指示模块”区域中的L端口上().把“单片机系统”区域中的P端口用导线连接到“四路拨动开关”区域中的K端口上.程序设计内容().开关状态的检测过程单片机对开关状态的检测相对于单片机来说是从单片机的P端口输入信号而输入的信号只有高电平和低电平两种当拨开开关K拨上去即输入高电平相当开关断开当拨动开关K拨下去即输入低电平相当开关闭合。单片机可以采用JB BITREL或者是JNB BITREL指令来完成对开关状态的检测即可。().输出控制如图所示当P端口输出高电平即P=时根据发光二极管的单向导电性可知这时发光二极管L熄灭当P端口输出低电平即P=时发光二极管L亮我们可以使用SETB P指令使P端口输出高电平使用CLR P指令使P端口输出低电平。.程序框图图.汇编源程序ORGHSTART:JBP,LIGCLRPSJMPSTARTLIG:SETBPSJMPSTARTEND.C语言源程序#include<ATXH>sbitK=P^sbitL=P^voidmain(void){while(){if(K==){L=灯亮}else{L=灯灭}}}.多路开关状态指示.实验任务如图所示ATS单片机的P-P接四个发光二极管L-LP-P接了四个开关K-K编程将开关的状态反映到发光二极管上。(开关闭合对应的灯亮开关断开对应的灯灭)。.电路原理图图.系统板上硬件连线(.把“单片机系统”区域中的P-P用导线连接到“八路发光二极管指示模块”区域中的L-L端口上(.把“单片机系统”区域中的P-P用导线连接到“四路拨动开关”区域中的K-K端口上.程序设计内容(.开关状态检测对于开关状态检测相对单片机来说是输入关系我们可轮流检测每个开关状态根据每个开关的状态让相应的发光二极管指示可以采用JB PXREL或JNB PXREL指令来完成也可以一次性检测四路开关状态然后让其指示可以采用MOV AP指令一次把P端口的状态全部读入然后取高位的状态来指示。(.输出控制根据开关的状态由发光二极管L-L来指示我们可以用SETB PX和CLR PX指令来完成也可以采用MOV P#XXXXB方法一次指示。.程序框图 读P口数据到ACC中ACC内容右移次ACC内容与FH相或ACC内容送入P口<!endif>图.方法一(汇编源程序)ORGHSTART:MOVA,PANLA,#FHRRARRARRARRAORlA,#FHMOVP,ASJMPSTARTEND.方法一(C语言源程序)#include<ATXH>unsignedchartempvoidmain(void){while(){temp=P>>temp=temp|xfP=temp}}.方法二(汇编源程序)ORGHSTART:JBP,NEXTCLRPSJMPNEXNEXT:SETBPNEX:JBP,NEXTCLRPSJMPNEXNEXT:SETBPNEX:JBP,NEXTCLRPSJMPNEXNEXT:SETBPNEX:JBP,NEXTCLRPSJMPNEXNEXT:SETBPNEX:SJMPSTARTEND.方法二(C语言源程序)#include<ATXH>voidmain(void){while(){if(P==){P=}else{P=}if(P==){P=}else{P=}if(P==){P=}else{P=}if(P==){P=}else{P=}}}.广告灯的左移右移.实验任务做单一灯的左移右移硬件电路如图所示八个发光二极管L-L分别接在单片机的P-P接口上输出“”时发光二极管亮开始时P→P→P→P→┅→P→P→┅→P亮重复循环。.电路原理图图.系统板上硬件连线把“单片机系统”区域中的P-P用芯排线连接到“八路发光二极管指示模块”区域中的L-L端口上要求:P对应着LP对应着L……P对应着L。.程序设计内容我们可以运用输出端口指令MOV PA或MOV P#DATA只要给累加器值或常数值然后执行上述的指令即可达到输出控制的动作。每次送出的数据是不同具体的数据如下表所示:PPPPPPPP说明LLLLLLLL L亮L亮L亮L亮L亮L亮L亮L亮表.程序框图      图.汇编源程序ORGSTART:MOVR,#MOVA,#FEHSETBCLOOP:MOVP,ALCALLDELAYRLCADJNZR,LOOPMOVR,#LOOP:MOVP,ALCALLDELAYRRCADJNZR,LOOPLJMPSTARTDELAY:MOVR,#D:MOVR,#D:MOVR,#DJNZR,$DJNZR,DDJNZR,DRETEND.C语言源程序#include<ATXH>unsignedchariunsignedchartempunsignedchara,bvoiddelay(void){unsignedcharm,n,sfor(m=m>m)for(n=n>n)for(s=s>s)}voidmain(void){while(){temp=xfeP=tempdelay()for(i=i<i){a=temp<<ib=temp>>(i)P=a|bdelay()}for(i=i<i){a=temp>>ib=temp<<(i)P=a|bdelay()}}}.广告灯(利用取表方式).实验任务利用取表的方法使端口P做单一灯的变化:左移次右移次闪烁次(延时的时间秒)。.电路原理图图.系统板上硬件连线  把“单片机系统”区域中的P-P用芯排线连接到“八路发光二极管指示模块”区域中的L-L端口上要求:P对应着LP对应着L……P对应着L。.程序设计内容在用表格进行程序设计的时候要用以下的指令来完成().利用MOV DPTR#DATA的指令来使数据指针寄存器指到表的开头。().利用MOVC A@A+DPTR的指令根据累加器的值再加上DPTR的值就可以使程序计数器PC指到表格内所要取出的数据。因此只要把控制码建成一个表而利用MOVC A@A+DPTR做取码的操作就可方便地处理一些复杂的控制动作取表过程如下图所示:.程序框图           图.汇编源程序ORGSTART:MOVDPTR,#TABLELOOP:CLRAMOVCA,ADPTRCJNEA,#H,LOOPJMPSTARTLOOP:MOVP,AMOVR,#LCALLDELAYINCDPTRJMPLOOPDELAY:MOVR,#D:MOVR,#DJNZR,$DJNZR,DDJNZR,DELAYRETTABLE:DBFEH,FDH,FBH,FHDBEFH,DFH,BFH,FHDBFEH,FDH,FBH,FHDBEFH,DFH,BFH,FHDBFH,BFH,DFH,EFHDBFH,FBH,FDH,FEHDBFH,BFH,DFH,EFHDBFH,FBH,FDH,FEHDBH,FFH,H,FFHDBHEND.C语言源程序#include<ATXH>unsignedcharcodetable={xfe,xfd,xfb,xf,xef,xdf,xbf,xf,xfe,xfd,xfb,xf,xef,xdf,xbf,xf,xf,xbf,xdf,xef,xf,xfb,xfd,xfe,xf,xbf,xdf,xef,xf,xfb,xfd,xfe,x,xff,x,xff,x}unsignedcharivoiddelay(void){unsignedcharm,n,sfor(m=m>m)for(n=n>n)for(s=s>s)}voidmain(void){while(){if(tablei!=x){P=tableiidelay()}else{i=}}}.报警产生器.实验任务用P输出KHz和Hz的音频信号驱动扬声器作报警信号要求KHz信号响msHz信号响ms,交替进行P接一开关进行控制当开关合上响报警信号当开关断开告警信号停止编出程序。.电路原理图图.系统板上硬件连线(.把“单片机系统”区域中的P端口用导线连接到“音频放大模块”区域中的SPKIN端口上(.在“音频放大模块”区域中的SPKOUT端口上接上一个欧的或者是欧的喇叭(.把“单片机系统”区域中的PRD端口用导线连接到“四路拨动开关”区域中的K端口上.程序设计内容(.信号产生的方法Hz信号周期为ms信号电平为每ms变反次KHz的信号周期为ms信号电平每us变反次 .程序框图图.汇编源程序FLAGBITHORGHSTART:JBP,STARTJNBFLAG,NEXTMOVR,#DV:CPLPLCALLDELYLCALLDELYDJNZR,DVCPLFLAGNEXT:MOVR,#DV:CPLPLCALLDELYDJNZR,DVCPLFLAGSJMPSTARTDELY:MOVR,#LOOP:NOPDJNZR,LOOPRETEND.C语言源程序#include<ATXH>#include<INTRINSH>bitflagunsignedcharcountvoiddely(void){unsignedcharifor(i=i>i){nop()}}voidmain(void){while(){if(P==){for(count=count>count){P=~Pdely()}for(count=count>count){P=~Pdely()dely()}}}.IO并行口直接驱动LED显示实验任务如图所示利用ATS单片机的P端口的P-P连接到一个共阴数码管的a-h的笔段上数码管的公共端接地。在数码管上循环显示-数字时间间隔秒。电路原理图图系统板上硬件连线把“单片机系统”区域中的PAD-PAD端口用芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上要求:PAD与a相连PAD与b相连PAD与c相连……PAD与h相连。程序设计内容(.LED数码显示原理七段LED显示器内部由七个条形发光二极管和一个小圆点发光二极管组成根据各管的极管的接线形式可分成共阴极型和共阳极型。LED数码管的g~a七个发光二极管因加正电压而发亮因加零电压而不以发亮不同亮暗的组合就能形成不同的字形这种组合称之为字形码下面给出共阴极的字形码见表“”FH “”FH “”H “”FH “”BH “A”H “”FH “b”CH “”H “C”H “”DH “d”EH “”DH “E”H “”H “F”H (.由于显示的数字-的字形码没有规律可循只能采用查表的方式来完成我们所需的要求了。这样我们按着数字-的顺序把每个数字的笔段代码按顺序排好!建立的表格如下所示:TABLE DB FHHBHFHHDHDHHFHFH.程序框图        图.汇编源程序ORGSTART:MOVR,#HNEXT:MOVA,RMOVDPTR,#TABLEMOVCA,ADPTRMOVP,ALCALLDELAYINCRCJNER,#,NEXTLJMPSTARTDELAY:MOVR,#D:MOVR,#D:MOVR,#DJNZR,$DJNZR,DDJNZR,DRETTABLE:DBFH,H,BH,FH,H,DH,DH,H,FH,FHEND.C语言源程序#include<ATXH>unsignedcharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf}unsignedchardispcountvoiddelays(void){unsignedchari,j,kfor(i=i>i)for(j=j>j)for(k=k>k)}voidmain(void){while(){for(dispcount=dispcount<dispcount){P=tabledispcountdelays()}}}.按键识别方法之一.实验任务每按下一次开关SP计数值加通过ATS单片机的P端口的P到P显示出其的二进制计数值。.电路原理图图.系统板上硬件连线(.把“单片机系统”区域中的PRD端口连接到“独立式键盘”区域中的SP端口上(.把“单片机系统”区域中的P-P端口用芯排线连接到“八路发光二极管指示模块”区域中的“L-L”端口上要求P连接到LP连接到LP连接到LP连接到L上。.程序设计方法(.其实作为一个按键从没有按下到按下以及释放是一个完整的过程也就是说当我们按下一个按键时总希望某个命令只执行一次而在按键按下的过程中不要有干扰进来因为在按下的过程中一旦有干扰过来可能造成误触发过程这并不是我们所想要的。因此在按键按下的时候, 图要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉一般情况下我们可以采用电容来滤除掉这些干扰信号但实际上会增加硬件成本及硬件电路的体积这是我们不希望总得有个办法解决这个问题因此我们可以采用软件滤波的方法去除这些干扰信号一般情况下一个按键按下的时候总是在按下的时刻存在着一定的干扰信号按下之后就基本上进入了稳定的状态。具体的一个按键从按下到释放的全过程的信号图如上图所示:从图中可以看出我们在程序设计时从按键被识别按下之后延时ms以上从而避开了干扰信号区域我们再来检测一次看按键是否真得已经按下若真得已经按下这时肯定输出为低电平若这时检测到的是高电平证明刚才是由于干扰信号引起的误触发CPU就认为是误触发信号而舍弃这次的按键识别过程。从而提高了系统的可靠性。由于要求每按下一次命令被执行一次直到下一次再按下的时候再执行一次命令因此从按键被识别出来之后我们就可以执行这次的命令所以要有一个等待按键释放的过程显然释放的过程就是使其恢复成高电平状态。(.对于按键识别的指令我们依然选择如下指令JB BITREL指令是用来检测BIT是否为高电平若BIT=则程序转向REL处执行程序否则就继续向下执行程序。或者是 JNB BITREL指令是用来检测BIT是否为低电平若BIT=则程序转向REL处执行程序否则就继续向下执行程序。(.但对程序设计过程中按键识别过程的框图如右图所示:                 图.程序框图图.汇编源程序ORGSTART:MOVR,#H初始化R为表示从开始计数MOVA,RCPLA取反指令MOVP,A送出P端口由发光二极管显示REL:JNBP,REL判断SP是否按下LCALLDELAYMS若按下则延时ms左右JNBP,REL再判断SP是否真得按下INCR若真得按下则进行按键处理使MOVA,R计数内容加并送出P端口由CPLA发光二极管显示MOVP,AJNBP,$等待SP释放SJMPREL继续对K按键扫描DELAYMS:MOVR,#延时ms子程序L:MOVR,#DJNZR,$DJNZR,LRETEND.C语言源程序#include<ATXH>unsignedcharcountvoiddelayms(void){unsignedchari,jfor(i=i>i)for(j=j>j)}voidmain(void){while(){if(P==){delayms()if(P==){countif(count==){count=}P=~countwhile(P==)}}}}.一键多功能按键识别技术.实验任务如图所示开关SP接在PRD管脚上在ATS单片机的P端口接有四个发光二极管上电的时候L接在P管脚上的发光二极管在闪烁当每一次按下开关SP的时候L接在P管脚上的发光二极管在闪烁再按下开关SP的时候L接在P管脚上的发光二极管在闪烁再按下开关SP的时候L接在P管脚上的发光二极管在闪烁再按下开关SP的时候又轮到L在闪烁了如此轮流下去。.电路原理图图.系统板上硬件连线(.把“单片机系统”区域中的PRD端口连接到“独立式键盘”区域中的SP端口上(.把“单片机系统”区域中的P-P端口用芯排线连接到“八路发光二极管指示模块”区域中的“L-L”端口上要求P连接到LP连接到LP连接到LP连接到L上。.程序设计方法(.设计思想由来在我们生活中我们很容易通过这个叫张三那个叫李四另外一个是王五那是因为每个人有不同的名子我们就很快认出同样对于要通过一个按键来识别每种不同的功能我们给每个不同的功能模块用不同的ID号标识这样每按下一次按键ID的值是不相同的所以单片机就很容易识别不同功能的身份了。(.设计方法从上面的要求我们可以看出L到L发光二极管在每个时刻的闪烁的时间是受开关SP来控制我们给L到L闪烁的时段定义出不同的ID号当L在闪烁时ID=当L在闪烁时ID=当L在闪烁时ID=当L在闪烁时ID=很显然只要每次按下开关K时分别给出不同的ID号我们就能够完成上面的任务了。下面给出有关程序设计的框图。.程序框图           图.汇编源程序IDEQUHSPBITPLBITPLBITPLBITPLBITPORGMOVID,#HSTART:JBK,RELLCALLDELAYMSJBK,RELINCIDMOVA,IDCJNEA,#,RELMOVID,#HREL:JNBK,$MOVA,IDCJNEA,#H,ISCPLLLCALLDELAYSJMPSTARTIS:CJNEA,#H,ISCPLLLCALLDELAYSJMPSTARTIS:CJNEA,#H,ISCPLLLCALLDELAYSJMPSTARTIS:CJNEA,#H,ISCPLLLCALLDELAYSJMPSTARTIS:LJMPSTARTDELAYMS:MOVR,#LOOP:MOVR,#DJNZR,$DJNZR,LOOPRETDELAY:MOVR,#LOOP:LCALLDELAYMSDJNZR,LOOPRETEND.C语言源程序#include<ATXH>unsignedcharIDvoiddelayms(void){unsignedchari,jfor(i=i>i)for(j=j>j)}voiddelays(void){unsignedcharifor(i=i>i){delayms()}}voidmain(void){while(){if(P==){delayms()if(P==){IDif(ID==){ID=}while(P==)}}switch(ID){case:P=~Pdelays()breakcase:P=~Pdelays()breakcase:P=~Pdelays()breakcase:P=~Pdelays()break}}}.-计数器.实验任务利用ATS单片机来制作一个手动计数器在ATS单片机的P管脚接一个轻触开关作为手动计数的按钮用单片机的P-P接一个共阴数码管作为-计数的个位数显示用单片机的P-P接一个共阴数码管作为-计数的十位数显示硬件电路图如图所示。.电路原理图图.系统板上硬件连线(.把“单片机系统”区域中的PAD-PAD端口用芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上要求:PAD对应着aPAD对应着b……PAD对应着h。(.把“单片机系统”区域中的PA-PA端口用芯排线连接到“四路静态数码显示模块”区域中的任一个数码管的a-h端口上(.把“单片机系统”区域中的PRD端口用导线连接到“独立式键盘”区域中的SP端口上.程序设计内容(.单片机对按键的识别的过程处理(.单片机对正确识别的按键进行计数计数满时又从零开始计数(.单片机对计的数值要进行数码显示计得的数是十进数含有十位和个位我们要把十位和个位拆开分别送出这样的十位和个位数值到对应的数码管上显示。如何拆开十位和个位我们可以把所计得的数值对求余即可得个位数字对整除即可得到十位数字了。(.通过查表方式分别显示出个位和十位数字。.程序框图       图.汇编源程序CountEQUHSPBITPORGSTART:MOVCount,#HNEXT:MOVA,CountMOVB,#DIVABMOVDPTR,#TABLEMOVCA,ADPTRMOVP,AMOVA,BMOVCA,ADPTRMOVP,AWT:JNBSP,WTWAIT:JBSP,WAITLCALLDELYMSJBSP,WAITINCCountMOVA,CountCJNEA,#,NEXTLJMPSTARTDELYMS:MOVR,#D:MOVR,#DJNZR,$DJNZR,DRETTABLE:DBFH,H,BH,FH,H,DH,DH,H,FH,FHEND.C语言源程序#include<ATXH>unsignedcharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf}unsignedcharCountvoiddelayms(void){unsignedchari,jfor(i=i>i)for(j=j>j)}voidmain(void){Count=P=tableCountP=tableCountwhile(){if(P==){delayms()if(P==){Countif(Count==){Count=}P=tableCountP=tableCountwhile(P==)}}}}.-秒计时器(利用软件延时).实验任务  如下图所示在ATS单片机的P和P端口分别接有两个共阴数码管P口驱动显示秒时间的十位而P口驱动显示秒时间的个位。.电路原理图图.系统板上硬件连线(.把“单片机系统”区域中的PAD-PAD端口用芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上要求:PAD对应着aPAD对应着b……PAD对应着h。(.把“单片机系统”区域中的PA-PA端口用芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上要求:PA对应着aPA对应着b……PA对应着h。.程序设计内容(.在设计过程中我们用一个存储单元作为秒计数单元当一秒钟到来时就让秒计数单元加当秒计数达到时就自动返回到重新秒计数。(.对于秒计数单元中的数据要把它十位数和个数分开方法仍采用对整除和对求余。(.在数码上显示仍通过查表的方式完成。(.一秒时间的产生在这里我们采用软件精确延时的方法来完成经过精确计算得到秒时间为秒。DELYS:MOVR,#D:MOVR,#D:MOVR,#DJNZR,$DJNZR,DDJNZR,DRET.程序框图        图.汇编源程序SecondEQUHORGSTART:MOVSecond,#HNEXT:MOVA,SecondMOVB,#DIVABMOVDPTR,#TABLEMOVCA,ADPTRMOVP,AMOVA,BMOVCA,ADPTRMOVP,ALCALLDELYSINCSecondMOVA,SecondCJNEA,#,NEXTLJMPSTARTDELYS:MOVR,#D:MOVR,#D:MOVR,#DJNZR,$DJNZR,DDJNZR,DRETTABLE:DBFH,H,BH,FH,H,DH,DH,H,FH,FHEND.C语言源程序#include<ATXH>unsignedcharcodetable={xf,x,xb,xf,x,xd,xd,x,xf,xf}unsignedcharSecondvoiddelays(void){unsignedchari,j,kfor(k=k>k)for(i=i>i)for(j=j>j)}voidmain(void){Second=P=tableSecondP=tableSecondwhile(){delays()Secondif(Second==){Second=}P=tableSecondP=tableSecond}}.可预置可逆位计数器.实验任务利用ATS单片机的P-P接四个发光二极管L-L用来指示当前计数的数据用P-P作为预置数据的输入端接四个拨动开关K-K用PWR和PRD端口接两个轻触开关用来作加计数和减计数开关。具体的电路原理图如下图所示.电路原理图图.系统板上硬件连线(.把“单片机系统”区域中的P-P端口用芯排线连接到“八路发光二极管指示模块”区域中的L-L上要求:P对应着LP对应着LP对应着LP对应着L(.把“单片机系统”区域中的PRXDPTXDPINTPINT用导线连接到“四路拨动开关”区域中的K-K上(.把“单片机系统”区域中的PWRPRD用导线连接到“独立式键盘”区域中的SP和SP上.程序设计内容(.两个独立式按键识别的处理过程(.预置初值读取的问题(.LED输出指示.程序框图            图.汇编源程序COUNTEQUHORGHSTART:MOVA,PANLA,#FHMOVCOUNT,AMOVP,ASK:JBP,SKLCALLDELYMSJBP,SKINCCOUNTMOVA,COUNTCJNEA,#,NEXTMOVA,PANLA,#FHMOVCOUNT,ANEXT:MOVP,AWAIT:JNBP,WAITLJMPSKSK:JBP,SKLCALLDELYMSJBP,SKDECCOUNTMOVA,COUNTCJNEA,#FFH,NEXMOVA,PANLA,#FHMOVCOUNT,ANEX:MOVP,AWAIT:JNBP,WAITLJMPSKDELYMS:MOVR,#MOVR,#D:DJNZR,$DJNZR,DRETEND.C语言源程序#include<ATXH>unsignedcharcurcountvoiddelayms(void){unsignedchari,jfor(i=i>i)for(j=j>j)}voidmain(void){curcount=PxfP=~curcountwhile(){if(P==){delayms()if(P==){if(curcount>=){curcount=}else{curcount}P=~curcountwhile(P==)}}if(P==){delayms()if(P==){if(curcount<=){curcount=}else{curcount}P=~curcountwhile(P==)}}}}.动态数码显示技术.实验任务如图所示P端口接动态数码管的字形码笔段P端口接动态数码管的数位选择端P接一个开关当开关接高电平时显示“”字样当开关接低电平时显示“HELLO”字样。.电路原理图图.系统板上硬件连线(.把“单片机系统”区域中的PAD-PAD用芯排线连接到“动态数码显示”区域中的a-h端口上(.把“单片机系统”区域中的PA-PA用芯排线连接到“动态数码显示”区域中的S-S端口上(.把“单片机系统”区域中的P端口用导线连接到“独立式键盘”区域中的SP端口上.程序设计内容(.动态扫描方法动态接口采用各数码管循环轮流显示的方法当循环显示频率较高时利用人眼的暂留特性看不出闪烁显示现象这种显示需要一个接口完成字形码的输出(字形选择)另一接口完成各数码管的轮流点亮(数位选择)。(.在进行数码显示的时候要对显示单元开辟个显示缓冲区每个显示缓冲区装有显示的不同数据即可。(.对于显示的字形码数据我们采用查表方法来完成。.程序框图图.汇编源程序ORGHSTART:JBP,DIRMOVDPTR,#TABLESJMPDIRDIR:MOVDPTR,#TABLEDIR:MOVR,#HMOVR,#HNEXT:MOVA,RMOVCA,ADPTRMOVP,AMOVA,RMOVP,ALCALLDAYINCRRLAMOVR,ACJNER,#DFH,NEXTSJMPSTARTDAY:MOVR,#D:MOVR,#DJNZR,$DJNZR,DRETTABLE:DBH,BH,FH,H,DHTABLE:DBH,H,H,H,FHEND.C语言源程序#include<ATXH>unsignedcharcodetable={x,xb,xf,x,xd}unsignedcharcodetable={x,x,x,x,xf}unsignedchariunsignedchara,bunsignedchartempvoidmain(void){while(){temp=xfefor(i=i<i){if(P==){P=tablei}else{P=tablei}P=tempa=temp<<(i)b=temp>>(i)temp=a|b     for(a=a>a)for(b=b>b)}}.×矩阵式键盘识别技术.实验任务如图所示用ATS的并行口P接×矩阵键盘以P-P作输入线以P-P作输出线在数码管上显示每个按键的“-F”序号。对应的按键的序号排列如图所示图.硬件电路原理图图.系统板上硬件连线(.把“单片机系统“区域中的P-P端口用芯排线连接到“X行列式键盘”区域中的C-C R-R端口上(.把“单片机系统”区域中的PAD-PAD端口用芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上要求:PAD对应着aPAD对应着b……PAD对应着h。.程序设计内容(.×矩阵键盘识别处理(.每个按键有它的行值和列值 行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU通信。每个按键的状态同样需变成数字量“”和“”开关的一端(列线)通过电阻接VCC而接地是通过程序输出数字“”实现的。键盘处理程序的任务是:确定有无键按下判断哪一个键按下键的功能是什么还要消除按键在闭合或断开时的抖动。两个并行口中一个输出扫描码使按键逐行动态接地另一个并行口输入按键状态由行扫描值和回馈信号共同形成键编码而识别按键通过软件查表查出该键的功能。.程序框图图.汇编源程序KEYBUFEQUHORGHSTART:MOVKEYBUF,#WAIT:MOVP,#FFHCLRPMOVA,PANLA,#FHXRLA,#FHJZNOKEYLCALLDELYMSMOVA,PANLA,#FHXRLA,#FHJZNOKEYMOVA,PANLA,#FHCJNEA,#EH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#DH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#BH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#H,NKMOVKEYBUF,#LJMPDKNK:NOPDK:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,ADPTRMOVP,ADKA:MOVA,PANLA,#FHXRLA,#FHJNZDKANOKEY:MOVP,#FFHCLRPMOVA,PANLA,#FHXRLA,#FHJZNOKEYLCALLDELYMSMOVA,PANLA,#FHXRLA,#FHJZNOKEYMOVA,PANLA,#FHCJNEA,#EH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#DH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#BH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#H,NKMOVKEYBUF,#LJMPDKNK:NOPDK:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,ADPTRMOVP,ADKA:MOVA,PANLA,#FHXRLA,#FHJNZDKANOKEY:MOVP,#FFHCLRPMOVA,PANLA,#FHXRLA,#FHJZNOKEYLCALLDELYMSMOVA,PANLA,#FHXRLA,#FHJZNOKEYMOVA,PANLA,#FHCJNEA,#EH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#DH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#BH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#H,NKMOVKEYBUF,#LJMPDKNK:NOPDK:MOVA,KEYBUFMOVDPTR,#TABLEMOVCA,ADPTRMOVP,ADKA:MOVA,PANLA,#FHXRLA,#FHJNZDKANOKEY:MOVP,#FFHCLRPMOVA,PANLA,#FHXRLA,#FHJZNOKEYLCALLDELYMSMOVA,PANLA,#FHXRLA,#FHJZNOKEYMOVA,PANLA,#FHCJNEA,#EH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#DH,NKMOVKEYBUF,#LJMPDKNK:CJNEA,#BH,NKMOVKEYBU

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/206

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利