微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机驱动8位数码管电路图+程序

51单片机驱动8位数码管电路图+程序

时间:12-01 来源:互联网 点击:

电路图:


JP10排线连接J12 J21跳线跳12处

测试程序
#include

typedef unsigned char BYTE;

typedef unsigned int WORD;

sbit LS138A = P2^2; //定义138译码器的输入A脚由P2.2控制

sbit LS138B = P2^3; //定义138译码器的输入脚B由P2.3控制

sbit LS138C = P2^4; //定义138译码器的输入脚C由P2.4控制

//此表为 LED 的字模, 共阴数码管 0-9 -

BYTE code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

WORD LedOut[10];//数码管数组

/***************************************************************************

*

*

* 延时程序 *

****************************************************************************/

void Delay(WORD n)

{

WORD x;

while (n--)

{

x = 250;

while (x--);

}

}

/***************************************************************************

*

*

* 显示函数 *

****************************************************************************/

void display(WORD num)

{

WORD i,LedNumVal ;

LedNumVal=num;

LedOut[0]=Disp_Tab[LedNumVal%100000/10000]; //万位

LedOut[1]=Disp_Tab[LedNumVal%10000/1000]; //千位

LedOut[2]=Disp_Tab[LedNumVal%1000/100]; //百位

LedOut[3]=Disp_Tab[LedNumVal%100/10]; //十位

LedOut[4]=Disp_Tab[LedNumVal%10]; //个位

LedOut[5]=Disp_Tab[LedNumVal%1000/100]|0x80; //百位带小数点

LedOut[6]=Disp_Tab[LedNumVal%100/10]; //十位

LedOut[7]=Disp_Tab[LedNumVal%10]; //个位

for( i=0; i<8; i++) //实现8位动态扫描循环

{

P0 = LedOut[i]; //将字模送到P0口显示

switch(i) //使用switch 语句控制位选 也可以是用查表的方式

{

case 0:LS138A=0; LS138B=0; LS138C=0; break;

case 1:LS138A=1; LS138B=0; LS138C=0; break;

case 2:LS138A=0; LS138B=1; LS138C=0; break;

case 3:LS138A=1; LS138B=1; LS138C=0; break;

case 4:LS138A=0; LS138B=0; LS138C=1; break;

case 5:LS138A=1; LS138B=0; LS138C=1; break;

case 6:LS138A=0; LS138B=1; LS138C=1; break;

case 7:LS138A=1; LS138B=1; LS138C=1; break;

}

Delay(1);

}

}

main()

{

while(1)

{

display(12345);

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top