单片机实验报告DOC_第1页
单片机实验报告DOC_第2页
单片机实验报告DOC_第3页
单片机实验报告DOC_第4页
单片机实验报告DOC_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一I/O口输入输出实验一、实验目的掌握单片机P1口、P3口的使用方法。二、实验内容以P1口为输出口,接八位逻辑电平显示,LED显示跑马灯效果。以P3口为输入口,接八位逻辑电平输出,用来控制跑马灯的方向。三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。四、实验步骤1)系统各跳线器处在初始设置状态。用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);用8位数据线连接八位逻辑电平显示模块的JD4B到CPU模块JD8(P1口)。2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。3)观察发光二极管显示跑马灯效果,拨动K0可改变跑马灯的方向。五、实验参考程序;//******************************************************************;文件名:PortforMCU51;功能:I/O口输入、输出实验;接线:用导线连接八位逻辑电平输出模块的K0到CPU模块的RXD(P3.0口);;用8位数据线连接八位逻辑电平显示模块的JD2B到CPU模块的JD8(P1口)。;//******************************************************************DIRBITP3.0ORG0000HLJMPSTARTORG0100HSTART:OUTPUT1:MOVA,#0FEHMOVR5,#8LOOP1:CLRCMOVC,DIRJCOUTPUT2MOVP1,ARLAACALLDELAYDJNZR5,LOOP1SJMPOUTPUT1OUTPUT2:MOVA,#07FHMOVR5,#8LOOP2:CLRCMOVC,DIRJNCOUTPUT1MOVP1,ARRAACALLDELAYDJNZR5,LOOP2SJMPOUTPUT2DELAY:MOVR6,#0DELAYLOOP1:MOVR7,#0DELAYLOOP2:NOPNOPDJNZR7,DELAYLOOP2DJNZR6,DELAYLOOP1RETEND实验结果当八位逻辑电平的K0拨到上方,即输出高电平时,实验箱B5区的八个LED灯从左至右循环点亮,当K0拨到下方,即输出低电平时,八个LED灯从右至左循环点亮。结果分析程序通过查询方式不断检测P3.0口的输入状态,当P3.0输入为0时,由P1口通过左移指令RL轮流输出低电平驱动LED发光,在左移时通过软件延时控制LED亮的时间;当P3.0输入为1时,由P1口通过右移指令RR轮流输出低电平驱动LED发光,在右移时同样通过软件延时控制LED亮的时间,如此循环扫描查询,便可实现流水灯的效果。实验二外部中断实验一、实验目的学习外部中断技术的基本使用方法。二、实验内容INT0端接单次脉冲发生器。按一次脉冲产生一次中断,CPU使P1.0状态发生一次反转,P1.0接LED灯,以查看信号反转。三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。四、实验步骤1)系统各跳线器处在初始设置状态,用导线连接单次脉冲模块的输出端到CPU模块的P32;CPU模块的P10接八位逻辑电平显示模块的灯。2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。3)连续按动单次脉冲产生电路的按键,发光二极管L0每按一次状态取反,即隔一次点亮。五、实验参考程序;//*************************************************;文件名:EXintforMCU51;功能:外部中断实验;接线:导线连接单次脉冲模块的输出端到CPU模块的P32,;CPU模块的P10接八位逻辑电平显示模块的L0灯。;//*************************************************LEDBITP1.0LEDBUFBIT20HORG0LJMPSTARTORG3INTERRUPT0:PUSHPSW;保护现场CPLLEDBUF;取反LEDMOVC,LEDBUFMOVLED,CPOPPSW;恢复现场RETISTART:CLRLEDBUFCLRLEDMOVTCON,#01H;外部中断0下降沿触发MOVIE,#81H;打开外部中断允许位(EX0)及总中断允许位(EA)OK:LJMPOKEND六、实验结果每按下E3区的单次脉冲触发按钮时,B5区的发光二极管状态取反一次,即原来是亮按下时灭,原来是灭则按下时亮。结果分析程序由外部中断0实现,外部中断0由下降沿触发,外部输入由单次脉冲触发器输入,每次按下按钮时会触发单次脉冲,产生一个下降沿,从而使程序产生中断,在中断服务函数的程序里面对P1.0取反,由P1.0驱动LED,就可实现本实验的功能。实验三定时/计数器实验一、实验目的学习MCS-51内部计数器的使用和编程方法。二、实验内容使用MCS-51内部定时/计数器,定时一秒钟,CPU运用定时中断方式,实现每一秒钟输出状态发生一次反转,即发光管每隔一秒钟亮一次。三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。实验步骤1)系统各跳线器处在初始设置状态,用导线连接CPU模块P10到八位逻辑电平显示模块的L0。2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。3)运行程序观察发光二极管隔一秒点亮一次,点亮时间为一秒。五、实验参考程序;//*************************************************;文件名:TIMERFORMCU51;功能:定时/计数器实验;接线:导线连接CPU模块P10到八位逻辑电平显示模块的L0.;//*************************************************TICKEQU10000;10000X100US=1ST100USEQU156;100US时间常数(6M)C100USEQU30H;100US记数单元LEDBUFBIT20HORG0LJMPSTARTORG000BHT0INT:PUSHPSWMOVA,C100US+1JNZGOONDECC100USGOON:DECC100US+1MOVA,C100USORLA,C100US+1JNZEXIT;100US记数器不为0,返回MOVC100US,#27H;#HIGH(TICK)MOVC100US+1,#10H;#LOW(TICK)CPLLEDBUF;100US记数器为0,重置记数器;取反LEDEXIT:POPPSWRETISTART:MOVTMOD,#02H;方式2,定时器MOVTH0,#T100USMOVTL0,#T100USMOVIE,#10000010B;EA=1,IT0=1SETBTR0;开始定时CLRLEDBUFCLRP1.0MOVC100US,#27H;#HIGH(TICK)MOVC100US+1,#10H;#LOW(TICK)LOOP:MOVC,LEDBUFMOVP1.0,CLJMPLOOPEND实验结果运行程序之后,B5区的发光二极管L0隔一秒点亮一次,每次点亮时间为一秒。七、结果分析本实验通过定时器0的方式2实现精确定时,但定时器的最长定时时间达不到一秒,所以通过一个时间变量实现,总的定时时间等于定时器定时时间乘以时间变量初值,这样就可实现一秒的定时,程序通过扫描不断检测时间变量的值,当定时时间一秒到时,对P1.0的状态取反,实现L0每隔一秒亮一次。实验四交通灯控制实验一、实验目的掌握十字路口交通灯控制方法。二、实验内容利用系统提供的双色LED显示电路,和四位静态数码管显示电路模拟十字路口交通信号灯。4位LED数码管显示时间,LED显示红绿灯状态。三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。四、实验步骤1)系统各跳线器处在初始设置状态。P10同时接G1、G3;P11同时接R1、R3;P1.2同时接G2、G4;P1.3同时接R2、R4;P1.6、P1.7分别接静态数码显示的DIN、CLK。2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。3)观察十字路口交通灯效果。五、实验参考程序;//*******************************************************************;文件名:交通灯程序FORMCU51;功能:双色LED模拟交通灯信号,并通过调用静态数码显示状态时间。;接线:P1.0同时接G1、G3,P1.1接R1、R3,P1.2接G2、G4,P1.3同时接R2、R4,;P1.6、P1.7接静态数码显示的DIN、CLK。;//*******************************************************************SECOND1EQU30H;东西秒寄存器SECOND2EQU31H;南北秒寄存器DBUFEQU40H;显示缓冲1TEMPEQU44H;显示缓冲2LED_G1BITP1.0;东西绿灯LED_R1BITP1.1;东西红灯LED_G2BITP1.2;南北绿灯LED_R2BITP1.3;南北红灯DINBITP1.6;串行显示数据CLKBITP1.7;串行显示时钟ORG0000HLJMPSTARTORG0100HSTART:LCALLSTATE0;调用状态0LCALLDELAY;调用延时MOVTMOD,#01H;置T0工作方式1MOVTH0,#3CH;置T0定时初值50MSMOVTL0,#0B0HSETBTR0;启动T0CLREALOOP:MOVR2,#20;置1S计数初值50MS*20=1SMOVR3,#20;红灯20SMOVSECOND1,#25;东西秒显示初值25SMOVSECOND2,#25;南北秒显示初值25SLCALLDISPLAYLCALLSTATE1;调用状态1WAIT1:JNBTF0,WAIT1;查询50MS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值50MSMOVTL0,#0B0HSETBTR0;启动T0DJNZR2,WAIT1;判1S到否?未到继续状态1MOVR2,#20;置50MS计数初值DECSECOND1;东西秒显示减一DECSECOND2;南北秒显示减一LCALLDISPLAYDJNZR3,WAIT1;状态1维持20SMOVR2,#5;置50MS计数初值5*4=20MOVR3,#3;绿灯闪3SMOVR4,#4;闪烁间隔200MSMOVSECOND1,#5;东西秒显示初值5SMOVSECOND2,#5;南北秒显示初值5SLCALLDISPLAYWAIT2:LCALLSTATE2;调用状态2JNBTF0,WAIT2;查询50MS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值50MSMOVTL0,#0B0HDJNZR4,WAIT2;判200MS到否?未到继续状态2CPLLED_G1;东西绿灯闪MOVR4,#4;闪烁间隔200MSDJNZR2,WAIT2;判1S到否?未到继续状态2MOVR2,#5;置50MS计数初值DECSECOND1;东西秒显示减一DECSECOND2;南北秒显示减一LCALLDISPLAYDJNZR3,WAIT2;状态2维持3SMOVR2,#20;置50MS计数初值MOVR3,#2;黄灯2SMOVSECOND1,#2;东西秒显示初值2SMOVSECOND2,#2;南北秒显示初值2SLCALLDISPLAYWAIT3:LCALLSTATE3;调用状态3JNBTF0,WAIT3;查询30MS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值50MSMOVTL0,#0B0HDJNZR2,WAIT3;判1S到否?未到继续状态3MOVR2,#20;置50MS计数初值DECSECOND1;东西秒显示减一DECSECOND2;南北秒显示减一LCALLDISPLAYDJNZR3,WAIT3;状态3维持2SMOVR2,#20;置50MS计数初值MOVR3,#20;红灯20SMOVSECOND1,#25;东西秒显示初值25SMOVSECOND2,#25;南北秒显示初值25SLCALLDISPLAYWAIT4:LCALLSTATE4;调用状态4JNBTF0,WAIT4;查询50MS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值50MSMOVTL0,#0B0HDJNZR2,WAIT4;判1S到否?未到继续状态4MOVR2,#20;置50MS计数初值DECSECOND1;东西秒显示减一DECSECOND2;南北秒显示减一LCALLDISPLAYDJNZR3,WAIT4;状态4维持20SMOVR2,#5;置50MS计数初值5*4=20MOVR4,#4;闪烁间隔200MSMOVR3,#3;绿灯闪3SMOVSECOND1,#5;东西秒显示初值5SMOVSECOND2,#5;南北秒显示初值5SLCALLDISPLAYWAIT5:LCALLSTATE5;调用状态5JNBTF0,WAIT5;查询50MS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值100MSMOVTL0,#0B0HDJNZR4,WAIT5;判200MS到否?未到继续状态5CPLLED_G2;南北绿灯闪MOVR4,#4;闪烁200MSDJNZR2,WAIT5;判1S到否?未到继续状态5MOVR2,#5;置100MS计数初值DECSECOND1;东西秒显示减一DECSECOND2;南北秒显示减一LCALLDISPLAYDJNZR3,WAIT5;状态5维持3SMOVR2,#20;置50MS计数初值MOVR3,#2;黄灯2SMOVSECOND1,#2;东西秒显示初值2SMOVSECOND2,#2;南北秒显示初值2SLCALLDISPLAYWAIT6:LCALLSTATE6;调用状态6JNBTF0,WAIT6;查询100MS到否CLRTF0MOVTH0,#3CH;恢复T0定时初值100MSMOVTL0,#0B0HDJNZR2,WAIT6;判1S到否?未到继续状态6MOVR2,#20;置100MS计数初值DECSECOND1;东西秒显示减一DECSECOND2;南北秒显示减一LCALLDISPLAYDJNZR3,WAIT6;状态6维持2SLJMPLOOP;大循环STATE0:;状态0MOVP1,#0CLRLED_G1SETBLED_R1;东西红灯亮CLRLED_G2SETBLED_R2;南北红灯亮RETSTATE1:;状态1SETBLED_G1;东西绿灯亮CLRLED_R1CLRLED_G2SETBLED_R2;南北红灯亮RETSTATE2:;状态2CLRLED_R1CLRLED_G2SETBLED_R2;南北红灯亮RETSTATE3:;状态3SETBLED_G1SETBLED_R1;东西黄灯亮CLRLED_G2SETBLED_R2;南北红灯亮RETSTATE4:;状态4CLRLED_G1SETBLED_R1;东西红灯亮SETBLED_G2;南北绿灯亮CLRLED_R2RETSTATE5:;状态5CLRLED_G1SETBLED_R1;东西红灯亮CLRLED_R2RETSTATE6:;状态6CLRLED_G1SETBLED_R1;东西红灯亮SETBLED_G2SETBLED_R2;南北黄灯亮RETDISPLAY:;数码显示MOVA,SECOND1;东西秒寄存器MOVB,#10;16进制数拆成两个10进制数DIVABMOVDBUF+1,AMOVA,BMOVDBUF,AMOVA,SECOND2;南北秒寄存器MOVB,#10;16进制数拆成两个10进制数DIVABMOVDBUF+3,AMOVA,BMOVDBUF+2,AMOVR0,#DBUF MOV R1,#TEMP MOV R7,#4DP10: MOV DPTR,#LEDMAP MOV A,@R0 MOVCA,@A+DPTR MOV @R1,A INCR0 INC R1 DJNZR7,DP10 MOV R0,#TEMP MOV R1,#4DP12: MOV R7,#8 MOV A,@R0DP13: RLC A MOVDIN,C CLR CLK SETBCLK DJNZR7,DP13 INCR0 DJNZR1,DP12RETLEDMAP:DB3FH,6,5BH,4FH,66H,6DH;0,1,2,3,4,5 DB7DH,7,7FH,6FH,77H,7CH;6,7,8,9,A,B DB58H,5EH,7BH,71H,0,40H;C,D,E,F,,-DELAY:MOVR5,#5DLOOP0:MOVR6,#0DLOOP1:MOVR7,#0DLOOP2:NOPNOPDJNZR7,DLOOP2DJNZR6,DLOOP1DJNZR5,DLOOP0RETEND六、实验结果程序开始运行后,B5区模拟的东西红灯亮,南北绿灯亮,同时两个方向的数码管分别从25秒开始倒计时,当倒计时到5秒时,南北绿灯闪亮3秒后变黄,再过2秒,即倒计时到0时,变为东西绿灯亮,南北红灯亮,同时两个方向的数码管分别同时从25秒开始倒计时,但倒计时到5秒时,东西绿灯闪亮3秒后变黄,再过2秒之后又回到初始状态,继续循环运行。七、结果分析本实验通过双色的LED模拟交通灯的显示状态,并用静态数码管结合定时器实现定时及显示功能,将交通灯的显示分为六个不同的状态,程序运行之后进行计数显示,当计时时间到达某一个状态之后,跳转进入相应的状态执行,执行完之后继续进入下一个状态,实验通过程序模拟了交通灯的显示。实验五串转并与并转串实验一、实验目的1.掌握使用74LS164扩展输出的方法。2.掌握使用74LS165扩展输入的方法。二、实验内容使用74LS165扩展输入数据,使用74LS164扩展输出数据。74LS165的并行口接八位逻辑电平输出(开关),CPU使用P1.0、P1.1和P1.2串行读入开关状态;74LS164的并行口接一只数码管,CPU使用P1.3和P1.4串行输出刚读入的开关状态,使之在数码管上显示出来。三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。四、实验步骤1)系统各跳线器处在初始设置状态。用导线对应连接八位逻辑电平输出模块的QH165、CLK165、SH/LD到CPU模块的P10、P11、P12。用导线对应连接静态数码管显示模块的DIN、CLK到CPU模块的P13、P14。2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。3)观察数码(八段码)管的亮灭与拨动开关的状态是否一致。拨动开关拨下输出为低电平,段码点亮。五、实验参考程序;//****************************************************************;//*文件名:164165串转并,并转串实验程序;功能:把开关量通过74**165串行输入到内存,并通过74**164串行输出到数;码管上显示。;接线:P1.0接QH165,P1.1接CLK165,P1.2接SH_LD,;P1.3、P1.4接静态数码显示的DIN、CLK。;//****************************************************************QH165BITP1.0CLK165BITP1.1SH_LDBITP1.2DAT164BITP1.3CLK164BITP1.4MEMORYEQU30HORG0000HAJMPSTARTORG00B0HSTART:SETBCLK165CLRSH_LDSETBSH_LDMOVR7,#8INPUT:RRAMOVC,QH165MOVACC.7,CCLRCLK165NOPSETBCLK165DJNZR7,INPUTMOVMEMORY,AMOVA,MEMORYMOVR6,#8OUTPUT:RRCAMOVDAT164,CCLRCLK164SETBCLK164DJNZR6,OUTPUTACALLDELAYSJMPSTARTDELAY:MOVR0,#5DD2:MOVR1,#0FFHDJNZR1,$DJNZR0,DD2RETEND六、实验结果当把E4区的八位逻辑电平的拨码开关K0~K7向上拨时,即逻辑电平输出高电平时,B4区的四位数码管的段码A~H依次点亮,即K0~K7每一段向上拨时,对应的A~H数码管段码点亮。结果分析实验通过74LS165八位逻辑电平的并行输出数据转成串行数据,输入单片机的P1.0口,再通过P1.3输出到74LS164的数据输入端,再由164的串转并输出口驱动数码管的八位段码,从而实现了并转串、串转并的功能。实验六8255控制键盘与显示实验一、实验目的1.掌握8255输入、输出编程方法。2.掌握阵列键盘和数码管动态扫描显示的控制方法。二、实验内容用8255可编程并行口做一个键盘、显示扫描实验,把按键输入的键值,显示在8255控制的七段数码管上。8255PB口做键盘输入线,PC口做显示扫描线,PA口做显示数据线。三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。四、实验步骤1)系统各跳线器处在初始设置状态,S11E和S12E红开关全部打到下方(OFF)。2)用8位数据线对应连接8255模块的JD3C(PA口)、JD4C(PB口)、JD5C(PC口)到8279模块的JD3E、JD2E、JD4E;用导线连接8255模块的CS_8255到地。3)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。4)在键盘上按任一单键,观察数码管的显示,数码管低位显示按键值。五、实验参考程序;//*********************************************************;文件名:8255KDFORMCU51;功能:8255控制键盘显示实验;接线:连接8279键盘显示模块的JD3E到8255模块的JD3C(PA口);;JD2E到8255模块的JD4C(PB口);;JD4E到8255模块的JD5C(PC口);;用导线连接8255模块的CS_8255到地。;//*********************************************************D8255AEQU8000H;8255PA口地址D8255BEQU8001H;8255PB口地址D8255CEQU8002H;8255PC口地址D8255EQU8003H;8255状态/命令口地址LEDBUFEQU50H;显示缓存KEYVALEQU60H;读到的键码ORG0000HLJMPSTARTORG0100HSTART:MOVSP,#80HMOVDPTR,#D8255MOVA,#90H;方式0,PB,PC口输出,PA口输入MOVX@DPTR,AMOVLEDBUF,#10HMOVLEDBUF+1,#11HMOVLEDBUF+2,#11HMOVLEDBUF+3,#11HMOVLEDBUF+4,#5MOVLEDBUF+5,#5MOVLEDBUF+6,#2MOVLEDBUF+7,#8KB_DIS:LCALLRD_KB;读键盘MOVA,#0FFHCJNEA,KEYVAL,TOSHOW;判读到键SJMPSHOW;没有则继续读键TOSHOW:MOVLEDBUF,KEYVALSHOW:LCALLDISPLAYSJMPKB_DISRD_KB:;键盘扫描MOVA,#02H;扫描第一行MOVDPTR,#D8255CMOVX@DPTR,AMOVDPTR,#D8255AMOVXA,@DPTRMOVR1,#00HCJNEA,#0FFH,KEYCAL;判键是否按下MOVA,#01H;扫描第二行MOVDPTR,#D8255CMOVX@DPTR,AMOVDPTR,#D8255AMOVXA,@DPTRMOVR1,#08HCJNEA,#0FFH,KEYCALSJMPNOKEY;无键按下KEYCAL:MOVR0,#08H;计算键码SHIFT:RRCAJNCTORETINCR1DJNZR0,SHIFTSJMPNOKEY;无键按下TORET:MOVKEYVAL,R1RETNOKEY:MOVKEYVAL,#0FFH;返回无键标志RETDISPLAY:MOVR7,#8;8个数码管MOVR5,#0MOVR0,#LEDBUFDLOOP:MOVA,R5RLARLARLAANLA,#11111011BINCR5MOVDPTR,#D8255CMOVX@DPTR,A;点亮对应的LEDMOVA,@R0MOVDPTR,#LEDSEGMOVCA,@A+DPTRINCR0MOVDPTR,#D8255BMOVX@DPTR,A;显示数据LCALLDELAYDJNZR7,DLOOPRETDELAY:PUSHR7MOVR7,#200DELAYLOOP:NOPDJNZR7,DELAYLOOPPOPR7RETLEDSEG:DB3FH,06H,5BH,4FH,66H,6DH;0,1,2,3,4,5DB7DH,07H,7FH,6FH,77H,7CH;6,7,8,9,A,BDB39H,5EH,79H,71H,00H,40H;C,D,E,F,,-END实验结果程序运行后,E7区数码管的前七位依次显示“8255---0”,当按下E7区的按键时,数码管的前七位不变,依然显示“8255---”,而第八位将显示按下的键码值,从0~F。结果分析本实验通过8255I/O扩展芯片以及8279键盘/显示接口芯片为硬件基础,实现了键盘输入到数码管输出显示的功能。程序中通过对键盘按下与否进行循环扫描,当有按键按下时,通过程序对键值进行计算,并将结果送到数码管进行显示。当无按键按下时,程序保持上一状态继续扫描,直到有不同的按键按下时状态改变。由于矩阵按键及数码显示会用到较多的I/O口,而单片机的I/O口数量有限,所以利用8255对其进行扩展,再利用专门的键盘/显示芯片8279实现键盘扫描和键值显示的功能。实验七并行A/D转换实验一、实验目的1.掌握ADC0809模/数转换芯片与单片机的连接方法及ADC0809的典型应用。2.掌握用查询方式、中断方式完成模/数转换程序的编写方法。二、实验内容利用系统提供的ADC0809接口电路,实现单片机模数转换。模拟信号为0~5V电位器分压输出,单片机控制ADC0809读取模拟信号,并在数码管上用十六进制形式显示出来。三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。四、实验步骤1)系统各跳线器处在初始设置状态。用导线对应连接并行模数转换模块的CS_0809、EOC到CPU模块的8000、P32;电位器模块的输出端接并行模数转换模块的IN-0;并行模数转换模块的Vref接+5V电源;CPU模块的P10、P11接串行静态数码显示模块DIN、CLK。2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。3)数码管以十六进制形式显示模拟量,手动调节输入电位器,改变输入模拟量电压的大小,数码管显示将随之变化。五、实验参考程序;//*******************************************************************;文件名:AD0809FOR51MCU;功能:并行A/D转换实验;接线:用导线对应连接并行模数转换模块的CS_0809、EOC到CPU模块的8000、P32;;电位器模块的输出端接并行模数转换模块的IN-0;;并行模数转换模块的VREF接+5V电源;;CPU模块的P10、P11接串行静态数码显示模块DIN、CLK。;//******************************************************************* DBUF EQU 30H TEMP EQU 40H D0809 EQU 8000H;通道0地址DINBITP1.0CLKBITP1.1 ORG0000HJMPSTARTORG0080HSTART: MOV DBUF+3,#0AH MOVDBUF+2,#0DH MOVDPTR,#D0809MOVA,#0 MOVX@DPTR,AJNBP3.2,$ MOVXA,@DPTR;读入结果 MOV B,A SWAPAANLA,#0FH MOVDBUF+1,A INC R0 MOVA,BANLA,#0FH MOV DBUF,A ACALLDISP1ACALLDELAY AJMPSTARTDISP1:;串行数码显示 MOV R0,#DBUF MOV R1,#TEMP MOVR2,#4DP10: MOV DPTR,#SEGTAB MOV A,@R0 MOVCA,@A+DPTR MOV @R1,A INC R0 INCR1 DJNZR2,DP10 MOVR0,#TEMP MOV R1,#4DP12: MOV R2,#8 MOVA,@R0DP13: RLCA MOV DIN,C CLR CLK SETBCLK DJNZR2,DP13 INCR0 DJNZR1,DP12RETSEGTAB: DB 3FH,6,5BH,4FH,66H,6DH;0,1,2,3,4,5 DB 7DH,7,7FH,6FH,77H,7CH;6,7,8,9,A,B DB 58H,5EH,79H,71H,0,00H;C,D,E,F,-DELAY:MOVR4,#80HAA1:MOVR5,#0FFHAA:NOPNOPDJNZR5,AADJNZR4,AA1RETEND六、实验结果程序运行后,B4区的数码管前两位将显示“ad”,后两位将显示E2区电位器输出的模拟电压经AD转换后对应的数字量,以十六进制显示,即从00~FF。用万用表测量的5组模拟电压值及对应的数字量显示结果如下表所示:参考电压:4.7V输入模拟电压(V)11.522.533.544.7显示数字量(十六进制)38526E88A3bFdAFF七、结果分析本实验采用ADC0809进行模数转换,程序通过扫描的方法对模数转换的结果进行实时显示。通过ADC0809的通道0输入模拟电压,将转换的数据放入数据缓冲区,再通过串行的数码管进行显示。实验八LCD显示实验一、实验目的掌握点阵式(128×64点)带汉字字库液晶显示屏的程序设计方法。二、实验内容根据系统提供的电路,掌握128×64点阵LCD的工作原理,编程实现显示字符、汉字和图片。三、实验要求根据实验内容编写一个程序,并在实验仪上调试和验证。四、实验步骤1)系统各跳线器处在初始设置状态,JT2B跳线器的两只短路帽置位上端。用导线对应连接液晶显示模块的RS、R/W、E、PSB、RST到CPU模块的P10~P14。2)启动PC机,打开THGMW-51软件,输入源程序,并编译源程序。编译无误后,下载程序运行。3)LCD将显示字符和汉字及图形。五、实验参考程序;//******************************************************************;文件名:LCD_SFORMCU51(LCD12864串行接口程序);功能:LCD显示实验;接线:JT2B跳线器的两只短路帽置位上端。;对应连接液晶显示模块的RS、R/W、E、PSB、RST到CPU模块的P10~P14。;//******************************************************************;RS=CS=D/I;R/W=STD=STD;E=SCLK=SCLKCSBITP1.0;D/ISTDBITP1.1;串行数据线W/RSCLKBITP1.2;串行时钟线EPSBBITP1.3;CS1RESBITP1.4;RESSTARTEQU30H;起始字节COMEQU31H;命令/数据HDATAEQU32H;命令/数据字节高位LDATAEQU33H;命令/数据字节低位ASCEQU34H;ASCII数据单元XPOSEQU35HYPOSEQU36HORG0000HMAIN:MOVSP,#60HCLRRESSETBRES;可以直接接电源VDDSETBCS;可以直接接电源VDDCLRPSB;可以直接接地VSSCALLLCDRESET;模块系统初始化CALLHZKDIS;显示汉字子程序MOVSTART,#0F8H;写入命令(11111000)MOVCOM,#80H;设定显示位置CALLLCDWRITEMOVSTART,#0FAH;写数据(11111010)MOVCOM,#10H;显示字符CALLLCDWRITEMOVCOM,#11H;显示字符CALLLCDWRITEMOVCOM,#1EH;显示字符CALLLCDWRITEMOVCOM,#1FH;显示字符CALLLCDWRITEMOVSTART,#0F8H;写入命令(11111000)MOVCOM,#34H;扩充功能设定CALLLCDWRITEMOVCOM,#05H;反白选择CALLLCDWRITECALLDL40MS;延时CALLDL40MSCALLDL40MSMOVA,#055H;绘图方式下写55数据CALLLCDFILLCALLCLEAR;清屏JMPMAINCLEAR:;清屏子程序MOVA,#00HCALLLCDFILLRETLCDRESET:LCALLDL1MS;延时等待内部复位MOVSTART,#0F8H;写入命令(11111000) MOVCOM,#30H;使用基本指令集 LCALLLCDWRITE MOVCOM,#0CH LCALLLCDWRITE;整体显示ON MOVCOM,#01H;清屏 LCALLLCDWRITE LCALLDL1MS MOVCOM,#06H;显示右移 LCALLLCDWRITE LCALLDL1MS RETLCDWRITE:;模块写入子程序 MOVA,COM;送待发数据命令A ANLA,#0F0H;屏蔽低4位 MOVHDATA,A;将高4位送HDATA单元 MOVA,COM;取低4位 SWAPA;高低4位互换 ANLA,#0F0H MOVLDATA,A;将低4位送LDATA单元 MOVA,START;取起始字节 LCALLSENDBIT;发送 LCALLDL1MS;延时1MS MOVA,HDATA LCALLSENDBIT LCALLDL1MS MOVA,LDATA LCALLSENDBIT LCALLDL1MS RETHZKDIS:;显示汉字子程序MOVR5,#2MOVSTART,#0F8H;写入命令(11111000) MOVCOM,#80H;设定显示位置 LCALLLCDWRITE MOVDPTR,#TAB;指向文字型代码表 MOVA,#00H;取汉字代码低位DIS_1:MOVR6,#8;每行八个汉字DIS_2:MOVSTART,#0FAH;写数据(11111010)CLRAMOVCA,@A+DPTRMOVCOM,ACALLLCDWRITE;写入显示模块INCDPTR;取汉字代码高位CLRAMOVCA,@A+DPTRMOVCOM,ACALLLCDWRITE;写入显示模块INCDPTRCALLDL40MSDJNZR6,DIS_2;未显示完则继续MOVSTART,#0F8H;写入命令(11111000)MOVCOM,#90H;第二行地址CALLLCDWRITEDJNZR5,DIS_1MOVR5,#2MOVSTART,#0F8H;写入命令(11111000)MOVCOM,#88H;第三行地址CALLLCDWRITEDIS_4:MOVR6,#08HDIS_3:MOVSTART,#0FAH;写数据(11111010)CLRAMOVCA,@A+DPTRMOVCOM,ACALLLCDWRITE;写入显示模块INCDPTR;取汉字代码高位CLRAMOVCA,@A+DPTRMOVCOM,ACALLLCDWRITE;写入显示模块INCDPTRCALLDL40MSDJNZR6,DIS_3;未显示完则继续MOVSTART,#0F8H;写入命令(11111000)MOVCOM,#98H;第四行地址CALLLCDWRITEDJNZR5,DIS_4;遇“0”结束显示RET;写完两行则结束LCDFILL:;绘图MOVR4,AMOVXPOS,#0MOVYPOS,#0MOVSTART,#0F8HMOVCOM,#30H;重新选择基本指令?CALLLCDWRITEMOVCOM,#01H;清屏CALLLCDWRIT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论