普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 5157|回复: 3

74LS138芯片位选的解决

 关闭 [复制链接]

7

主题

17

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2018-3-18 12:17:17 | 显示全部楼层 |阅读模式
#include <reg52.h>             //éù&#195;÷μ¥&#198;&#172;&#187;ú&#188;&#196;′&#230;&#198;÷&#191;a
typedef unsigned char u8;      //&#182;¨ò&#229;ò&#187;&#184;&#246;&#206;T·&#251;o&#197;ààDí8&#206;&#187;£¨1&#184;&#246;×&#214;&#189;ú£&#169;μ&#196;±&#228;á&#191;u8
typedef unsigned int  u16;     //&#182;¨ò&#229;ò&#187;&#184;&#246;&#206;T·&#251;o&#197;ààDí16&#206;&#187;£¨2&#184;&#246;×&#214;&#189;ú£μμ&#196;±&#228;á&#191;u16
sbit bit1=P2^2;                //&#182;¨ò&#2292.2&#191;ú&#206;abit1
sbit bit2=P2^3;                //&#182;¨ò&#2292.3&#191;ú&#206;abit2
sbit bit3=P2^4;                //&#182;¨ò&#2292.4&#191;ú&#206;abit3
sbit seg=P1^0;                 //&#182;¨ò&#2291.0&#191;ú&#206;aseg
#define DATA  P0               //&#182;¨ò&#2290&#191;ú&#206;aDATA
void delay (u16 num)           //&#209;óê±3ìDò&#196;£&#191;é
{
   u16 x,y;
   for(x=num;x>0;x--)
   for(y=110;y>0;y--)
       {
        //&#212;&#188;&#209;óê±1oá&#195;&#235;
       }
}

u8 code segduan[]={          //12ò&#245;êy&#194;&#235;1ü&#182;&#206;&#194;&#235;êy×é
                   0x3f,0x06,0x5b,0x4f,
                   0x66,0x6d,0x7d,0x07,
                   0x7f,0x6f,0x77,0x7c,
                   0x39,0x5e,0x79,0x71,
                  };
void bitduan(u8 i)           //&#206;&#187;&#209;&#161;3ìDò&#196;£&#191;é
{
      switch(i)
             {
             case(1):
                     bit1=0;bit2=0;bit3=0;break;
             case(2):
                     bit1=1,bit2=0,bit3=0;break;
             case(3):
                     bit1=0,bit2=1,bit3=0;break;
             case(4):
                     bit1=1,bit2=1,bit3=0;break;
             case(5):
                     bit1=0,bit2=0,bit3=1;break;
             case(6):
                     bit1=1,bit2=0,bit3=1;break;
             case(7):
                     bit1=0,bit2=1,bit3=1;break;
             case(8):
                     bit1=1,bit2=1,bit3=1;break;
             }   
}
void display_led(u8 which_bit, u8  which_nember)   //°&#209;3ìDò·a×°&#206;aoˉêy
{
           bitduan(which_bit);
           seg=1;
           delay(5);
           DATA = segduan[which_nember];
           seg=0;
}
void main(void)   //&#214;÷3ìDò
{
    seg=0;
     while(1)
          {
            display_led(2, 3); //oˉêyμ÷ó&#195; (μú2&#206;&#187;,&#207;&#212;ê&#190;êy×&#214;3)
          }
}
回复

使用道具 举报

7

主题

17

帖子

176

积分

注册会员

Rank: 2

积分
176
 楼主| 发表于 2018-3-18 12:19:37 | 显示全部楼层
注解都成了笑话;
回复 支持 反对

使用道具 举报

7

主题

17

帖子

176

积分

注册会员

Rank: 2

积分
176
 楼主| 发表于 2018-3-18 12:35:04 | 显示全部楼层
本帖最后由 V115488 于 2018-3-18 12:36 编辑

#include <reg52.h>             //声明单片机寄存器库
typedef unsigned char u8;      //定义一个无符号类型8位(1个字节)的变量u8
typedef unsigned int  u16;     //定义一个无符号类型16位(2个字节5的变量u16
sbit bit1=P2^2;                //定义P2.2口为bit1
sbit bit2=P2^3;                //定义P2.3口为bit2
sbit bit3=P2^4;                //定义P2.4口为bit3
sbit seg=P1^0;                 //定义P1.0口为seg
#define DATA  P0               //定义P0口为DATA
void delay (u16 num)           //延时程序模块
{
   u16 x,y;
   for(x=num;x>0;x--)
   for(y=110;y>0;y--)
       {
        //约延时1毫秒
       }
}

u8 code segduan[]={          //共阴数码管段码数组
                   0x3f,0x06,0x5b,0x4f,
                   0x66,0x6d,0x7d,0x07,
                   0x7f,0x6f,0x77,0x7c,
                   0x39,0x5e,0x79,0x71,
                  };
void bitduan(u8 i)           //位选程序模块
{
      switch(i)
             {
             case(1):
                     bit1=0;bit2=0;bit3=0;break;
             case(2):
                     bit1=1,bit2=0,bit3=0;break;
             case(3):
                     bit1=0,bit2=1,bit3=0;break;
             case(4):
                     bit1=1,bit2=1,bit3=0;break;
             case(5):
                     bit1=0,bit2=0,bit3=1;break;
             case(6):
                     bit1=1,bit2=0,bit3=1;break;
             case(7):
                     bit1=0,bit2=1,bit3=1;break;
             case(8):
                     bit1=1,bit2=1,bit3=1;break;
             }   
}
void display_led(u8 which_bit, u8  which_nember)   //把程序封装为函数
{
           bitduan(which_bit);
           seg=1;
           delay(5);
           DATA = segduan[which_nember];
           seg=0;
}
void main(void)   //主程序
{
    seg=0;
     while(1)
          {
            display_led(2, 3); //函数调用
          }
}
回复 支持 反对

使用道具 举报

0

主题

4

帖子

17

积分

新手上路

Rank: 1

积分
17
发表于 2018-3-19 10:57:44 | 显示全部楼层
学习了  谢谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-23 17:09 , Processed in 0.108597 second(s), 30 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表