您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 实验四-七段数码管显示实验报告
实验四七段数码管显示实验一、实验目的掌握数码管显示数字的原理。二、实验内容1.静态显示:数码管为共阴极,通过BCD码译码驱动器CD4511驱动,其输入端A~D输入4位BCD码,位码输入低电平选中。按图4-1连接好电路,将8255的A口PA0~PA3与七段数码管LED1的BCD码驱动输入端A1~D1相连,8255的A口PA4~PA7与七段数码管LED2的BCD码驱动输入端A2~D2相连,8255的B口PB0~PB3与七段数码管LED3的BCD码驱动输入端A3~D3相连,8255的B口PB4~PB7与七段数码管LED4的BCD码驱动输入端A4~D4相连,8255的C口PC0~PC3分别与七段数码管LED4~LED4的位驱动输入端DG1~DG4相连。编程从键盘上每输入4个0~9数字,在七段数码管LED4~LED4上依次显示出来。A07A112A26A3OUTAOUTBOUTCOUTD13121110LT3OUTE9BL4OUTF15LE5OUTG14PA0PA1PA2PA34321D034D13332D231D3D430D52928D627D7PA4PA5PA6PA740393837VCCGNDA07A112A26A3OUTAOUTBOUTCOUTD13121110LT3OUTE9BL4OUTF15LE5OUTG14VCCGNDRD5WR369A08A1RESET35CS6PB0PB1PB2PB318192021PC317PC21615PC114PC0PB4PB5PB6PB722232425a1b24c5dcomcom38e6f7g9dbl10LED1R1680a1b24c5dcomcom38e6f7g9dbl10LED2R2680A07A112A26A3OUTAOUTBOUTCOUTD13121110LT3OUTE9BL4OUTF15LE5OUTG14VCCGNDa1b24c5dcomcom38e6f7g9dbl10LED3R3680A07A112A26A3OUTAOUTBOUTCOUTD13121110LT3OUTE9BL4OUTF15LE5OUTG14VCCGNDa1b24c5dcomcom38e6f7g9dbl10LED4R4680A1B1C1D1U1U2U3U4A2B2C2D2A3B3C3D3A4B4C4D48255IORIOWA0A1RSTY1(288H)D0D1D2D3D4D5D6D7JD1图4-12.动态显示:数码管为共阴极,段码采用相同驱动,输入端加高电平,选中的数码管对应段点亮,位码采用同相驱动,位码输入端低电平选中,按图4-2连接好电路,图中只画了2个数码管,实际是8个数码管,将8255的A口PA0~PA7分别与七段数码管的段码驱动输入端a~g相连(32TCI0模块上的J1连32LED8模块J2),8255的C口的PC0~PC7接七段数码管的段码驱动输入(32TCI0模块上的J3连32LED8模块J1),跳线器K1连2和3。编程在8个数码管上显示“12345678”。按任意键推出运行。a10b98d5dgpgp16e4f23g7dpLED8a10b98d5dgpgp16e4f23g7dpLED12Y351Y21632Y4181Y12A31A22A41A11541722Y191Y41272Y2141Y32A11A42A21A31181362G191G1U274LS244GND876543212Y351Y21632Y4181Y12A31A22A41A11541722Y191Y41272Y2141Y32A11A42A21A31181362G191G1U174LS244GND87654321J1J2BITDUbit8bit7bit6bit5bit4bit3bit2bit1PC710PC61112PC513PC4PC317PC21615PC114PC0PA737PA63839PA540PA4D7D6D5D427282930PA31PA223PA14PA0D3D2D1D031323334PB725PB62423PB522PB4CSRESETA1A063589PB321PB22019PB118PB0WRRD365U18255PC7PC6PC5PC4PC3PC2PC1PC0PA7PA6PA5PA4PA3PA2PA1PA0/WR/RDA1A0A1A08255CSRSTY1RSTIOWIORD7D6D5D4D7D6D5D4D3D2D1D0D3D2D1D0JD1图4-2三、编程提示1.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不用,编程时需要了解当前的微机使用那段IO地址并进行处理。2.对实验内容1,七段数码管字型代码与输入的关系如下表:显示字型gefdcba输入DCBA0011111100001000011000012101101100103100111100114110011001005110110101016111110101107000011101118111111110009110111110013.对实验内容1,七段数码管字型代码与输入的关系如下表:四、参考流程图1.实验内容一的参考流程图图4-32.实验内容二的参考流程图开始将8255的A口、B口、C口设为输出从键盘接收字符是数字键吗?将所得字符的ASCII码减30H后存入显示缓冲键入满4个数字?从显示缓冲区取数并将四个数字的BCD码合并成两个8位字前两个数字从A口输出,后两个数字从B口输出位码从C口输出返回图4-4五、参考程序1.内容一的参考程序源程序清单如下:NNYY开始将8255的A、B、C口设置成输出初始化数码管位计数器显示缓冲区中的段码送A口数码管的位码送C口显示缓冲区指针加1数码管位计数器减1位计数器为0?有键按下吗?返回datasegmentioportequ0c400h-0280hio8255aequioport+288hio8255bequioport+289hio8255cequioport+28ahio8255kequioport+28bhleddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fhmesg1db0dh,0ah,'Inputanum(0--9),otherkeyisexit:',0dh,0ah,'$'bzdb?czdb04hdataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,io8255k;使8255的A口为输出方式movax,80houtdx,alsss0:movsi,offsetbzmovcx,04hsss1:movdx,offsetmesg1;显示提示信息movah,09hint21hmovah,01;从键盘接收字符int21hcmpal,'0';是否小于0jlexit;若是则退出cmpal,'9';是否大于9jgexit;若是则退出subal,30h;将所得字符的ASCII码减30Hmov[si],al;存入显示缓冲区incsi;显示缓冲区指针加1deccx;判断输入满4个数字吗?jnzsss1;不满继续movsi,offsetbz;从显示缓冲区取第一个数字的BCD码moval,[si]andal,0fh;屏蔽高四位暂存ALincsi;显示缓冲区指针加1movah,[si];取第二个数字的BCD码到AHsalah,4h;右移4次到高四位addal,ah;两个BCD码合并成一个字节movbl,al;暂存入BLincsimoval,[si];取第三个数字的BCD码andal,0fhincsimovah,[si];取第四个数字的BCD码到AHsalah,4haddah,almoval,ahmovdx,io8255a;从8255的A口输出(后两个数字)outdx,almoval,blmovdx,io8255b;从8255的B口输出(前两个数字)outdx,almoval,0f0hmovdx,io8255c;从8255的C口输出位码outdx,almovdl,0ffhmovah,06int21hjesss0;有键按下则退出exit:movah,4ch;返回int21hcodeendsendstart2.内容二的参考程序源程序清单如下:datasegmentioportequ0C400h-0280hio8255cequioport+28ahio8255kequioport+28bhio8255aequioport+288hleddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;段码buffer1db01h,02h,03h,04h,05h,06h,07h,08h;存放要显示的十位和个位condb?;位码dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,io8255k;将8255设为A口C口输出moval,80houtdx,alloop2:moval,08h;设置数码管位计数器初值到CONmovbyteptrcon,almovsi,offsetbuffer1;置显示缓冲器指针SImovah,7fh;置位码初值disp0:movcx,0ffffhmovbl,ds:[si];取显示缓冲区显示值存BXmovbh,0hpushsimovdx,io8255c;位码从C口输出moval,ahoutdx,almovdx,io8255amovsi,offsetled;置led数码表偏移地址为SIaddsi,bx;求出对应的led数码moval,byteptr[si]outdx,al;段码从A口输出disp1:loopdisp1;延时movcx,0ffffhdisp2:loopdisp2rorah,01h;位码右移1位popsiincsi;显示缓冲区指针加1moval,byteptrcondecalmovbyteptrcon,aljnzdisp0;数码管位计数器减1为0吗?,不为0继续movdx,io8255a;为0,关数码管显示moval,0outdx,almovdl,0ffhmovah,06int21hjeloop2;有键按下则退出movah,4ch;返回int21hcodeendsendstart实验总结:通过这次试验,我了解到自定义数据类型可以根据自己的需要方便设定,有很大的灵活性。而在程序的编写过程中,我们应该首先分析各个端口的优先级顺序,然后进行判断,分析设计。
本文标题:实验四-七段数码管显示实验报告
链接地址:https://www.777doc.com/doc-5712406 .html