3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com/3358 ww.Sina.com/3.8
图3-8-1
图3-8-2
33558www.Sina.com/:jp10(p0 )连接到J12,J21跳线帽连接到左侧、A.P22、B.P23和C.P24
3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com /
M74HC138是高速COMS器件,引脚与低功耗勤奋的自行车TTL(lsttl )系列兼容。
TM74HC138包括三个地址数据输入端(A0、A1、A2 )和八个有效解码为低输出端(Y0 - Y7 );
TM74HC138具有三个使能控制端子(E1、E2、E 3 ),E1、E2为低电平且E 3为高电平情况下,只有8个解码输出端子具有解码输出,否则,8个解码输出端子全部成为高电平
TM74HC138通常应用于一个3地址数据输入8解码输出的3-6解码器,但根据使能信号的特性也可以在两个TM74HC138中实现4地址数据输入和16解码输出的4-16解码器,以及APP序列
图3-8-3芯片端子图
图3-8-4针功能介绍
图3-8-5真值表
3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /
以下代码使用38解码器控制数码管的位选择,进行单片机P0端口控制段选择,程序实现每个数码管依次显示数字0~9。
3.8
#includereg51.h//共阴极数字代码(显示的段输出1 )//数字0~9codeu8led2_coding ) )0x4F、0x 06、0x5b、0x4F、0x 66、) //AsbitHC138_A1=P2^3; //BsbitHC138_A2=P2^4; //C#defineLEDP0//定义LED引脚/*静态数码管显示、共阴极数码管*/void led2_静态显示(number,u8val ) switch )//HC138_A1=0; HC138_A2=0; 布雷克; //显示第0位case1:HC138_A0=1; HC138_A1=0; HC138_A2=0; 布雷克;//第1位显示case 2: HC 138 _ A0=0; HC138_A1=1; HC138_A2=0; 布雷克; //2位显示case 3: HC 138 _ A0=1; HC138_A1=1; HC138_A2=0; 布雷克;//第3位显示case 4: HC 138 _ A0=0; HC138_A1=0; HC138_A2=1; 布雷克; //4位显示case 5: HC 138 _ A0=1; HC138_A1=0; HC138_A2=1; 布雷克; //5位显示case 6: HC 138 _ A0=0; HC138_A1=1; HC138_A2=1; 布雷克; //6位显示case 7: HC 138 _ A0=1; HC138_A1=1; HC138_A2=1; 布雷克; //显示第7位(}LED=LED2_Coding[val]; //显示数字:0(9) () ) ) ) ) ) ) ) ),在数字控制端子上P0端口//数字芯片选择端子上138解码器intmain ) ) u8I,) wile(1) for ) I=0; i8; I ) for(j=0; j10; j )
{ LED2_StaticDisplay(i,j); DelayMs(500); } } }}3.8.4 示例代码: 显示指定的整数
下面代码使用38译码器控制数码管的位选,51单片机的P0口控制段选,程序实现在8位数码管上显示一个指定的整数。
#include <reg51.h>//共阴极数码管编码(要显示的段就输出1)//数字0~9code u8 LED2_Coding[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//定义38译码器的引脚sbit HC138_A0=P2^2; //Asbit HC138_A1=P2^3; //Bsbit HC138_A2=P2^4; //C#define LED P0 //定义LED引脚//设置数码管显示指定的数字void LED_DisplayNumber(unsigned long number){ u16 i,j; u8 display_data[8];//存放当前数码管显示的数据 //以下代码将number按十进制位从低到高依次提取并转为数码管显示字符 display_data[0] = LED2_Coding[number/10000000%10]; display_data[1] = LED2_Coding[number/1000000%10]; display_data[2] = LED2_Coding[number/100000%10]; display_data[3] = LED2_Coding[number/10000%10]; display_data[4] = LED2_Coding[number/1000%10]; display_data[5] = LED2_Coding[number/100%10]; display_data[6] = LED2_Coding[number/10%10]; display_data[7] = LED2_Coding[number/1%10]; for(i=0;i<8;i++) { switch(i) //位选,选择点亮的数码管, { case 0: HC138_A0=0;HC138_A1=0;HC138_A2=0; break;//显示第0位 case 1: HC138_A0=1;HC138_A1=0;HC138_A2=0; break;//显示第1位 case 2: HC138_A0=0;HC138_A1=1;HC138_A2=0; break;//显示第2位 case 3: HC138_A0=1;HC138_A1=1;HC138_A2=0; break;//显示第3位 case 4: HC138_A0=0;HC138_A1=0;HC138_A2=1; break;//显示第4位 case 5: HC138_A0=1;HC138_A1=0;HC138_A2=1; break;//显示第5位 case 6: HC138_A0=0;HC138_A1=1;HC138_A2=1; break;//显示第6位 case 7: HC138_A0=1;HC138_A1=1;HC138_A2=1; break;//显示第7位 } LED=display_data[i]; //控制数码管的显示数据值 j = 100; //扫描间隔时间设定 while(j--){} LED=0x00; //消隐,所有数码管都不显示 }}//动态数码管一共有8个数码管//数码的控制端接P0端口//数码管的片选端接138译码器int main(){ while(1) { LED_DisplayNumber(4579); }}图3-8-6 数码管显示效果