数码之家

 找回密码
 立即注册
搜索
查看: 1133|回复: 7

[C51] 单片机不同io组合成虚拟Io口

[复制链接]
发表于 2022-9-18 17:11:22 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x
受硬件或走线限制,有些IO不连续,操作不便。因此做个程序
注意,通过debug,实际上仍是位操作,比真正的P1 = 0x0f慢得多,不是万不得已,不要用
#include<reg51.h>
sbit port0= P0^0;
sbit port1= P0^1;
sbit port2= P1^0;
sbit port3= P1^1;
sbit port4= P2^0;
sbit port5= P2^1;
sbit port6= P3^0;
sbit port7= P3^1;

void newIo(unsigned char da)
{
        port0 = (bit)(da&0x01);
        port1 = (bit)(da&0x02);
        port2 = (bit)(da&0x04);
        port3 = (bit)(da&0x08);
        port4 = (bit)(da&0x10);
        port5 = (bit)(da&0x20);
        port6 = (bit)(da&0x40);
        port7 = (bit)(da&0x80);
}

void main ()
{
        newIo(0x02) ;
}

发表于 2022-9-18 17:35:48 | 显示全部楼层
那可以用595扩展一下。
回复 支持 反对

使用道具 举报

发表于 2022-9-18 17:39:29 | 显示全部楼层
如果是51单片机,全宇宙最快的方法:
  1. void newIo(unsigned char da)
  2. {
  3.          ACC = da;
  4.         
  5.                  port0 = (bit)(ACC&0x01);
  6.                  port1 = (bit)(ACC&0x01);
  7.                  port2 = (bit)(ACC&0x01);
  8.                  port3 = (bit)(ACC&0x01);
  9.                  port4 = (bit)(ACC&0x01);
  10.                  port5 = (bit)(ACC&0x01);
  11.                  port6 = (bit)(ACC&0x01);
  12.                  port7 = (bit)(ACC&0x01);
  13. }
复制代码



回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-18 17:44:24 | 显示全部楼层
我扫数码管也是这样写的
回复 支持 反对

使用道具 举报

发表于 2022-9-18 18:09:34 | 显示全部楼层
这样解决需要IO口整体操作的时候方便多了。
回复 支持 反对

使用道具 举报

发表于 2022-9-18 19:35:39 | 显示全部楼层
对啊,多加个595多好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-18 21:06:58 | 显示全部楼层
kkstun 发表于 2022-9-18 17:35
那可以用595扩展一下。

595是扩展端口,这个是IO口不在一组,组合起来便于操作。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-17 00:14 , Processed in 0.280801 second(s), 11 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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