找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2088|回复: 6
收起左侧

我想通过非门来将四个位选口变为两个,单片机可以这样编程吗,大佬们帮我看看

[复制链接]
ID:364875 发表于 2020-4-20 03:05 | 显示全部楼层 |阅读模式
我想通过非门来将四个位选口变为两个,可以这样编程吗,大佬们帮我看看
1587322801(1).png
回复

使用道具 举报

ID:213173 发表于 2020-4-20 06:19 | 显示全部楼层
用2个IO口和门电路控制四个位选没有问题,IO口输出00~11就可以得到0001、0010、0100、1000。但是电路有点复杂,如果用4017十进制计数器只要1个IO口就能完多达10个位选。 6位百分秒表 仿真.zip (135.05 KB, 下载次数: 5)
回复

使用道具 举报

ID:364875 发表于 2020-4-20 12:10 | 显示全部楼层
wulin 发表于 2020-4-20 06:19
用2个IO口和门电路控制四个位选没有问题,IO口输出00~11就可以得到0001、0010、0100、1000。但是电路有点复 ...

那我这样编程对吗?电路的话是不是从io口里引出两条线其中一条经过非门芯片再分别接到位选的三极管里
回复

使用道具 举报

ID:213173 发表于 2020-4-21 06:39 | 显示全部楼层
asdfghjkl;a;lsd 发表于 2020-4-20 12:10
那我这样编程对吗?电路的话是不是从io口里引出两条线其中一条经过非门芯片再分别接到位选的三极管里

你这个端口定义写法是错误的,两个IO口控制4个位选也不是简单取反就能完成。两个IO口可以组成4种状态,是BCD码,用BCD码/十进制译码器CD4028 就能完美解决,为什么非得要用非门?
无标题.jpg


  1. #include <reg51.h>

  2. sbit wela1=P3^3;
  3. sbit wela2=P3^4;

  4. unsigned char code table[]={//共阳数码管段码"0~f-."
  5.                 0xc0,0xf9,0xa4,0xb0,
  6.                 0x99,0x92,0x82,0xf8,
  7.                 0x80,0x90,0x88,0x83,
  8.                 0xc6,0xa1,0x86,0x8e,0xbf,0x7f};

  9. void delay(unsigned int k)
  10. {
  11.         unsigned int i,j;
  12.         for(i=k;i>0;i--)
  13.                 for(j=120;j>0;j--);
  14. }

  15. void main()
  16. {
  17.     while(1)
  18.     {
  19.                 P0=0xff;           //消隐
  20.                 wela1=0;           //位选
  21.                 wela2=0;    //位选
  22.                 P0=table[1];//段码
  23.                 delay(2);   //延时

  24.                 P0=0xff;       
  25.                 wela1=1;
  26.                 wela2=0;
  27.                 P0=table[2];
  28.                 delay(2);

  29.                 P0=0xff;       
  30.                 wela1=0;
  31.                 wela2=1;
  32.                 P0=table[3];
  33.                 delay(2);

  34.                 P0=0xff;       
  35.                 wela1=1;
  36.                 wela2=1;
  37.                 P0=table[4];
  38.                 delay(2);
  39.     }
  40. }
复制代码



回复

使用道具 举报

ID:213173 发表于 2020-4-21 09:36 | 显示全部楼层
asdfghjkl;a;lsd 发表于 2020-4-20 12:10
那我这样编程对吗?电路的话是不是从io口里引出两条线其中一条经过非门芯片再分别接到位选的三极管里

用两个IO口+与非门驱动数码管的4个位的方法,程序和上面的基本一样,只是数码管改为共阴极。
无标题.jpg


  1. #include <reg51.h>

  2. sbit wela1=P3^0;
  3. sbit wela2=P3^1;

  4. unsigned char code table[]={//共阴数码管段码"0~f-."
  5.                 0x3f,0x06,0x5b,0x4f,
  6.                 0x66,0x6d,0x7d,0x07,
  7.                 0x7f,0x6f,0x77,0x7c,
  8.                 0x39,0x5e,0x79,0x71,0x40,0x80};

  9. void delay(unsigned int k)
  10. {
  11.         unsigned int i,j;
  12.         for(i=k;i>0;i--)
  13.                 for(j=120;j>0;j--);
  14. }

  15. void main()
  16. {
  17.     while(1)
  18.     {
  19.                 P0=0x00;           //消隐
  20.                 wela1=0;           //位选
  21.                 wela2=0;    //位选
  22.                 P0=table[1];//段码
  23.                 delay(2);   //延时

  24.                 P0=0x00;       
  25.                 wela1=1;
  26.                 wela2=0;
  27.                 P0=table[2];
  28.                 delay(2);

  29.                 P0=0x00;       
  30.                 wela1=0;
  31.                 wela2=1;
  32.                 P0=table[3];
  33.                 delay(2);

  34.                 P0=0x00;       
  35.                 wela1=1;
  36.                 wela2=1;
  37.                 P0=table[4];
  38.                 delay(2);
  39.     }
  40. }
复制代码



回复

使用道具 举报

ID:364875 发表于 2020-4-21 14:47 | 显示全部楼层
wulin 发表于 2020-4-21 06:39
你这个端口定义写法是错误的,两个IO口控制4个位选也不是简单取反就能完成。两个IO口可以组成4种状态,是 ...

我的数码管是共阳数码管,就是用你的第一个这样的程序来相应的改吗
回复

使用道具 举报

ID:364875 发表于 2020-4-27 00:44 | 显示全部楼层
wulin 发表于 2020-4-21 09:36
用两个IO口+与非门驱动数码管的4个位的方法,程序和上面的基本一样,只是数码管改为共阴极。

麻烦您帮我看看这个程序应该怎么改,和我这个原理图有没有接错,因为马上就要答辩了,麻烦您帮帮忙,谢谢。
3.04.png

程序 (2).docx

16.73 KB, 下载次数: 2

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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