登录|立即注册|使用QQ帐号登录
论坛 > 51单片机
发帖|
看3051|回1|收藏
楼主 ID:885163 只看他
2021-2-20 21:51
#include <reg52.h>

typedef unsigned char uint8;//定义参数类型,规范书写格式

typedef unsigned int uint16;

uint16 i;         //定义i 用于非精确延时计数
uint8   ledbuf;//定义led变量缓存,起到中间变量作用

/*STC89C51  P1口外38译码器;6号接三极管b极,起到所有LED高电平总开关作用 见末尾图1*/

sbit ADDR0         =P1^0;
sbit ADDR1        =P1^1;
sbit ADDR2         =P1^2;
sbit ADDR3        =P1^3;
sbit ENLED  =P1^4;
/******** 38译码器引脚对应P1位置*********/

main()
{         
                i =0;
                cnt=0;
                ledbuf=0x01;
/************** 参数初始化*************/
          ADDR0         =0;
          ADDR1        =1;
          ADDR2         =1;
          ADDR3        =1;
          ENLED   =0;
/************** 38译码器设置*************/
                while(1)
        {
                P0=~ledbuf;                   //对P0赋值
                for(i=0;i<30000;i++);     //延时设置,这里注意 i 的值,如果uint8型,计数最大到255,超过256程序会死;这里 i 定义为uint1
                ledbuf<<=1;                  //中间变量左移,>>符号为右移
                if(ledbuf==0x00)            //是为了保证最后一个led灯正常亮,ledbuf需左移为0000 0000,如果写0x80,最后一个灯就直接跳过状态显示
                 {         
                    ledbuf = 0x01;        
                }
        }
}
/**************main 主函数*************/

38译码器 LED DB0总线


图1:38译码器74HC138 LEDS6 为LED总控制开关
图2:LED电路



附件列表

74HC138.pdf (2021-2-20 21:50 上传)

239.4 KB, 下载次数: 8, 下载积分: 黑币 -5

沙发 ID:299519 只看他
2021-2-22 13:35
138的真正奥义是地址译码。。

51黑电子论坛

Powered by Discuz! X3.1

首页|标准版|触屏版|电脑版