首页 > 编程知识 正文

51单片机控制74hc595(3.8 51单片机-M74HC138译码器驱动8位数码管)

时间:2023-05-06 16:05:26 阅读:121340 作者:2964

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 数码管显示效果  

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。