1、51单片机并行口驱动LED数码管显示电路及程序51单片机并行口驱动LED数码管显示电路及程序介绍利用51单片机的一个并行口实现多个LED数码管显示的方法,给出了利用此方法设计的多路LED显示系统的硬件电路结构原理图和软件程序流程,同时给出了采用51汇编语言编写程序。 1 硬件电路多位LED显示时,常将所有位的段选线并联在一起,由一个8位IO口控制,而共阴极点或共阳极点分别由另一个8位IO口控制;也可采用并行扩展口构成显示电路,通常,需要扩展器件管脚的较多,价格较高。本文将介绍一种利用单片机的一个并行IO口实现多个LED显示的简单方法,图1所示是该电路的硬件原理图。其中,74LS138是3线8线
2、译码器,74LS164是8位并行输出门控串行输入移位寄存器,LED采用L05F型共阴极数码管。显示时,其显示数据以串行方式从89C52的P12口输出送往移位寄存器74LS164的A、B端,然后将变成的并行数据从输出端Q0Q7输出,以控制开关管WT1WT8的集电极,然后再将输出的LED段选码同时送往数码管LED1LED8。位选码由89C52的P14P16口输出并经译码器74LS138送往开关管Y1Y8的基极,以对数码管LED1LED8进行位选控制,这样,8个数码管便以100ms的时间间隔轮流显示。由于人眼的残留效应,这8个数码管看上去几乎是同时显示。2 软件编程该系统的软件编程采用MCS51系列
3、单片机汇编语言完成,并把显示程序作为一个子程序,从而使主程序对其进行方便的调用。图2所示是其流程图。具体的程序代码如下:pic单片机驱动led数码管显示程序;*该程序用于驱动led数码管显示,在8个LED数码管上依次显示数字1、2、3、4、5、6、7、8*;* 单片机学习网经典程序已测试,led数码管共阴和共阳不同请修改码值转换表部分LIST P=18F458INCLUDE P18F458.INC;所用的寄存器XIANR EQU 0X20ORG 0X00GOTO MAINORG 0X30;*以下为码值转换表*CONVERT ADDWF PCL,1RETLW 0XC0 ;0,显示段码与具体的硬件
4、连接有关RETLW 0XF9 ;1RETLW 0XA4 ;2RETLW 0XB0 ;3RETLW 0X99 ;4RETLW 0X92 ;5RETLW 0X82 ;6RETLW 0XD8 ;7RETLW 0X80 ;8RETLW 0X90 ;9RETLW 0X88 ;ARETLW 0X83 ;BRETLW 0XC6 ;CRETLW 0XA1 ;DRETLW 0X86 ;ERETLW 0X8E ;FRETLW 0X7F ;.RETLW 0XBF ;-RETLW 0X89 ;HRETLW 0XFF ;DARKRETURN;*初始化子程序*INITIALBCF TRISA,5 ;置RA5为输出方式,以
5、输出锁存信号BCF TRISC,5BCF TRISC,3 ;设置SCK与SDO为输出方式BCF INTCON,GIE ;关闭所有中断MOVLW 0XC0MOVWF SSPSTAT ;设置SSPSTAT寄存器MOVLW 0X30MOVWF SSPCON1 ;设置SPI的控制方式,允许SSP方式,并且时钟下降;沿发送数据,与74HC595当其SCLK从低到高电平;跳变时,串行输入数据(DI)移入寄存器的特点相对应MOVLW 0X11 ;显示值寄存器赋初值,每个值占两个字节,MOVWF XIANR ;从8开始显示RETURN ;返回;*led数码管显示子程序*;SPI发送显示子模块DISPLAYTR
6、ANSMIT CLRF PORTA ;LACK送低电平,为锁存做准备MOVWF SSPBUF ;启动发送WAITBTFSS PIR1,SSPIFGOTO WAIT ;等待发送结束BCF PIR1,SSPIF ;清除中断标志NOPBSF PORTA,5 ;最后给一个锁存信号,代表一显示任务完成RETURN;*pic单片机驱动led显示程序的主程序开始*MAIN NOPCALL INITIAL ;调用系统初始化子程序LOOP MOVF XIANR,WCALL CONVERT ;查出XIANR的显示段码值CALL DISPLAYDECF XIANRDECF XIANR ;显示值减2,因为按字存放,按
7、字节读取MOVF XIANR,WSUBLW 0X01BTFSS STATUS,ZGOTO LOOP ;若送完显示的数,则退出显示HERE GOTO HEREENDC语言源程序如下:/*程序名称:8位数码管移位显示0-F简要说明:使用共阳型数码管 P0口输出数码管段码,P2口输出数码管位码编 写:JiangX.net时 间:2008-8-21*/#include#define uchar unsigned char#define uint unsigned int #define duan P0 /定义段码输出#define wei P2 /定义位码输出uchar a=0,b=0; /全局变量。
8、a:定时器循环次数;b:移位量uchar code TAB=0xff,0xff,0xff,0xff,0xff,0xff,0xff,/空白 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,/数字0-9 0x88,0x83,0xC6,0xa1,0x86,0x8e,/字母A-F 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff/空白 ;/*延时子程序*/void delay(n) while(n-)uint j;for (j=0;j125;j+); /*程序初始化*/void init() TMOD=0x1; /定时方
9、式1 TH0=0xb8; TL0=0x63; /设置计时时间为50mswei=0; /设置位扫描初值 /*定时器中断0*/void timer0(void) interrupt 1 TH0=0xb8; TL0=0x63;a+; /移位变量累加if (a=20) a=0; b+; if (b=24) b=0; /*显示子程序*/void display() uchar i;uchar k;for (i=0;i8;i+) k=1i;wei=k; /位扫描 duan=TABi+b;/输出段码delay(1); /*主函数*/ void main () init();TR0=1;ET0=1;EA=1;while(1) display(); .
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1