找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5491|回复: 3
打印 上一主题 下一主题
收起左侧

关于准双向io口,在做输入时,怎样用程序写1.求教给位大神

[复制链接]
跳转到指定楼层
楼主
ID:158420 发表于 2017-2-15 00:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于准双向io口,在做输入时,怎样用程序写1.求教给位大神
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2017-2-15 13:49 | 只看该作者
如果你想读入,必须先写1,单片机复位后,端口都被复位成FFH。
(之所以叫准双向,就是在读入前必须写1到端口)
具体要看硬件电路是怎么样的。
51单片机准双向IO口有四组,每组有0到7个口,也是Px^0-Px^7。那么例如你说的要取P1一组的话就要先写P1=0xff;,只要对P0^0一个口取数据的话就写P0^0=1;
回复

使用道具 举报

板凳
ID:123289 发表于 2017-2-16 18:07 | 只看该作者
    MOV   P1, #0FFH
    MOV   A, P1
回复

使用道具 举报

地板
ID:17109 发表于 2017-10-31 22:22 | 只看该作者
angmall 发表于 2017-2-15 13:49
如果你想读入,必须先写1,单片机复位后,端口都被复位成FFH。
(之所以叫准双向,就是在读入前必须写1到 ...

楼主你好:怎样用程序加入准双向io口呢
#include <reg52.h>
//定义一下,方便使用
#define uchar unsigned char
#define uint  unsigned int
//sbit key1=P2^4;                //按键1定义
//sbit key2=P2^5;                //按键2定义
//sbit key3=P2^6;                //按键3定义
//sbit key4=P2^7;                //按键4定义
sbit led1=P3^0;                //led1端口
sbit led2=P3^1;                //led2端口
sbit led3=P3^2;                //led3端口
sbit led4=P3^3;                    //led4端口

void keyscan()                                        //按键扫描程序
{
        static bit sign=0;                //按键有效标志
        static uint count=0;                //消抖计数变量                        
        uchar num=0;                                //临时变量
        if((P2&0xf0)!=0xf0)        //检测按键有效
        {
                count++;                                //消抖计数
                if(count>=500)                        //100~1000,根据主循环周期调整约10~20ms
                {                        
                        count=500;
                        if(sign==0)                //测试按键有效标志0
                        {
                                sign=1;                                //按键有效标志置1
                                num=(P2&0xf0);                //保存P2高4位值xxxx 0000,x为0或1
                                switch(num)
                                {
                                        case 0xe0: led1=~led1; break;
                                        case 0xd0: led2=~led2; break;
                                        case 0xb0: led3=~led3; break;
                                        case 0x70: led4=~led4; break;
                                        default: break;
                                }
                        }
                }
        }
        else                                                //键抬起
        {
                sign=0;                                //按键有效标志清0
                count=0;                                //消抖计数清0
        }
}

void main()
{
        P3=(P3&0xf0);        //初始化P3低4位
        while(1)        //程序循环执行
        {
                keyscan();   //按键扫描,子函数

        }
}
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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