找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机实验,IO口的使用,P3.3输入,P1口输出

查看数: 4645 | 评论数: 5 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-5-8 00:22

正文摘要:

本帖最后由 水各 于 2020-5-8 00:27 编辑 实验要求如下:P3.3口做输入口,外接一脉冲,每输入一个脉冲,P1口按16进制加一方式点亮发光二极管。P3口接的是一个开关。 电路图流程图如下 本菜鸟不太理解这 ...

回复

ID:213173 发表于 2020-5-8 10:58
用P1的8个LED显示0x00~0xff

#include<reg51.h>
#define uchar unsigned char
sbit key=P3^3;

void delayms(uchar ms)
{
        uchar i;
        while(ms--)
        for(i=0;i<123;i++);
}

bit key_scan(void)
{
        static bit kp=0;
        if((P3&0x0f)!=0x0f)
        {
                delayms(10);
                if(((P3&0x0f)!=0x0f)&&(kp==0))
                {
                        kp=1;
                        return 1;
                }
        }
        else kp=0;
        return 0;
}

void main(void)
{
        uchar num=0;
        P1=0x00;
        while(1)
        {
                if(key_scan())
                        num++;
                P1=num;//0x00~0xff
        }
}
ID:722868 发表于 2020-5-8 10:22
f556 发表于 2020-5-8 01:17
指点一下?一下在哪里?是MCU不懂?还是74LS345不懂?还是C的每个语句都不懂?还是某句不懂?点亮一个LED做 ...

点亮一个LED是做过的。
就是这一题根据师傅的讲解,是要根据P3.3的中断特性来判断开关拨动的次数,然后开关拨动一个来回,LED灯根据16进制加一(16进制比较困难也可以用2进制)。我主要不懂的地方时,这个判断拨动次数的程序怎样写
ID:746607 发表于 2020-5-8 09:34
这是学校考试题吧,, seg[]数组下标值的范围是0~14,你把36行的if(++num==16)改成if(++num==15) 就运行正常了。还有个办法是在seg[]数组里在首数据的位置再添个0x00也行.
最好的办法是把uchar code seg[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
改为
uchar code seg[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f};
ID:746607 发表于 2020-5-8 09:32
这是学校考试题吧,, seg[]数组下标值的范围是0~14,你把36行的if(++num==16)改成if(++num==15) 就运行正常了。还有个办法是在seg[]数组里在首数据的位置再添个0x00也行
ID:282850 发表于 2020-5-8 01:17
指点一下?一下在哪里?是MCU不懂?还是74LS345不懂?还是C的每个语句都不懂?还是某句不懂?点亮一个LED做过吗?

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

Powered by 单片机教程网

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