一位数码管两种驱动方法 原理图与程序(汇编+C语言)

上传人:dlyu****nhe 文档编号:140531398 上传时间:2020-07-30 格式:DOCX 页数:6 大小:63.21KB
返回 下载 相关 举报
一位数码管两种驱动方法 原理图与程序(汇编+C语言)_第1页
第1页 / 共6页
一位数码管两种驱动方法 原理图与程序(汇编+C语言)_第2页
第2页 / 共6页
一位数码管两种驱动方法 原理图与程序(汇编+C语言)_第3页
第3页 / 共6页
亲,该文档总共6页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《一位数码管两种驱动方法 原理图与程序(汇编+C语言)》由会员分享,可在线阅读,更多相关《一位数码管两种驱动方法 原理图与程序(汇编+C语言)(6页珍藏版)》请在金锄头文库上搜索。

1、一位数码管两种驱动方法(入门级实验)目录实验介绍:1实验目的:1仿真原理图:2实验1汇编语言代码3实验1汇编语言代码2(直接赋值方法):3实验1 C语言代码4实验2汇编语言代码5实验2 C语言代码6实验介绍:数码管(这里所说的数码管一般指8段数码管,下文中的数码管都是指8段数码管)在我们生活中非常常见,对于纯数字显示的场合如温度显示,价格显示等等都可以使用。另外,数码管也可以用于简单字母或符号显示的场合,例如数码管可以显示十六进制中的AF。数码管按极性的不同可以分为共阳极和共阴极的数码管,所谓共阳极数码管可以简单理解为数码管的公共端需要连接电源正极才可以正常使用,共阴极数码管可以理解为数码管的

2、公共端需要连接电源负极才可以正常使用。在使用采用单片机驱动数码管时,由于单片机引脚的灌电流能力较强,因此常采用共阳极数码管。在此次实验中,主要介绍两种数码管的驱动方式,单片机直接驱动,通过数码管驱动芯片来驱动。实验目的:该实验的主要目的是通过实验1对P口的灵活控制每一位的状态,从而控制数码管的相应“段”的亮灭状态,从而实现数码管数字的显示。通过实验2,理解数码管驱动芯片的实用方法。仿真原理图:图1 实验1仿真原理图图2 实验2仿真原理图在仿真软件Proteus中绘制仿真原理图如上图所示。(注意事项:在仿真过程中,数码管并没有串联降压电阻,而在实际电路中,最好根据实际的数码管的型号串联相应的电阻

3、。仿真时如果想使用P0口,则需要添加上拉电阻。另外也要注意数码管的极性,共阴极和共阳极的段码是不同的。)仅仅从原理图角度来看,实验1的原理图较实验2原理图要简单一些,在实验1中单片机直接驱动数码管,而实验2单片机通过7446芯片来驱动数码管。不过从所占用I/O口方面来看,实现数码管显示功能,实验2所占用的单片机I/O口要比实验1所占用单片机I/O口要少很多。因此读者在实际应用过程中,要根据所设计的单片机控制系统的特点,选择不同的数码管驱动方式。实验1汇编语言代码汇编语言代码1(查表法):ORG 0HJMP MAINORG 30HMAIN:MOV DPTR,#TABLEMOV R5,#10X1:

4、CLR AMOVC A,A+DPTRMOV P2,ACALL DELAYINC DPTRDJNZ R5,X1JMP MAINDELAY:MOV R2,#20X3:MOV R3,#40X2:MOV R4,#250DJNZ R4,$DJNZ R3,X2DJNZ R2,X3RETTABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H END注意:该方法明显比直接赋值法要简洁,但是在上述程序段中,用了查表指令“MOVC”以及向ROM中写入表格数据的伪指令“DB”,该方法建议掌握直接赋值法后,再使用。实验1汇编语言代码2(直接赋值方法):ORG 0HJ

5、MP MAINORG 30HMAIN:MOV P2,#0C0HCALL DELAYMOV P2,#0F9H CALL DELAYMOV P2,#0A4HCALL DELAYMOV P2,#0B0HCALL DELAYMOV P2,#99HCALL DELAYMOV P2,#92HCALL DELAYMOV P2,#82HCALL DELAYMOV P2,#0F8HCALL DELAYMOV P2,#80HCALL DELAYMOV P2,#90HCALL DELAYJMP MAINDELAY:MOV R2,#20X3:MOV R3,#40X2:MOV R4,#250DJNZ R4,$DJNZ

6、R3,X2DJNZ R2,X3RETEND注意:该程序段变成思路简单,易于理解,适合初学者编程时使用,但是略显冗长。实验1 C语言代码#include #include void delay()/延时函数 unsigned int i,j; for(i=0;i100;i+) for(j=0;j1000;j+) _nop_;void main() unsigned char a=0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90; unsigned m; while (1) for(m=0;m10;m+) P2=am; delay(); 注意:在定

7、义数组a时,a中的数据都用十六进制表示,在C语言中,十六进制用“0x”表示,将“0x”放在数据的前面代表十六进制。使用汇编语言可以使用二进制编程,但是使用C语言编程时,没有二进制。实验2汇编语言代码ORG 0HJMP MAINORG 30HMAIN:MOV P2,#0MOV R5,#10X4:CALL DELAYINC P2DJNZ R5,X4JMP MAINDELAY:MOV R2,#20X3:MOV R3,#40X2:MOV R4,#250DJNZ R4,$DJNZ R3,X2DJNZ R2,X3RETEND注意:在上述程序中,直接对P2口进行了加1操作,P2口的值从0开始,增加10次后,

8、对P2口进行清零,P2口的值经过7446译码后,驱动数码管显示指定的数值。实验2 C语言代码#include#includevoid delay()/延时函数 unsigned int i,j; for(i=0;i100;i+) for(j=0;j1000;j+) _nop_; void main()unsigned char a;while(1)for(a=0;a10;a+)P2=a; delay();注意:在使用数码管译码器驱动数码管显示数字时,显示的数字“6”与数字“9”与我们常用见的数码管稍微有一点区别,在使用的时候需要格外注意,另外数码管驱动器7446无法驱动数码管显示十六进制字母AF。6

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 工业设计

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号