单片机AT89C51,想实现六个端口输入都是开关量,两个端口输出,

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-04
51单片机能接几个输入输出端口?我想让他处理两个输入信号,输出一个信号能不能实现?该怎么实现?

单片机IO口通常都有很多,像at89c51,有32个IO口。可以同时处理多个信号。只是说处理多个信号,你随便找一本书看看就知道怎么实现了。看你这么提问,应该是连入门教程都没看过,你还是先看看这些简单的吧,不然神仙也帮不了你。

如果你认为单片机端口不够用的话,可以采用扩展方式;
输入信号可以采用并行口转串口芯片(74hc165),可以多级级联;
输出信号可以采用串行转并行的芯片(HC595),可以多级级联;

当然传输速率会有所降低,得看你的输入输出信号参数如何;

at89c51没有这两个端口,如果要对输入的高速脉冲计数,可以设置定时/计数器0和1的为计数器,脉冲输入为外部输入t0(p3.4)和t1(p3.5)口,这两个口在12mhz晶振频率下最大计数速率可达500khz左右计算方法是:晶振频率/24=最大计数速率,带入上面的就是12000000hz(12mhz)/24=500000hz(500khz)。
具体设置方法请参考8051单片机的定时计数器使用

图出来了哟,,算了,虽然你问问题的方式让我蛋疼菊紧,但我还是根据我的理解写了个

/*
假设用P0口,低6位输入,高2位输出
输入输出均为低电平有效
*/
#include <reg51.h>
#define eff 0
#define inv 1

sbit lightIn1 = P0^0; //灯输入
sbit lightIn2 = P0^1;
sbit lightIn3 = P0^2;
sbit lightIn4 = P0^3;
sbit relayIn1 = P0^4; //继电器输入
sbit relayIn2 = P0^5;
sbit lightOut = P0^6; //灯输出
sbit relayOut = P0^7; //继电器输出
void main(void)
{
for(;;)
{
if( relayIn1==eff && relayIn2==eff )
{
relayOut = eff;
lightOut = inv;
}
else
{
relayOut = inv;
}
if(lightIn1==eff || lightIn2==eff || lightIn3==eff || lightIn3==eff)
{
lightOut = eff;
relayOut = inv;
}
else
{
lightOut = inv;
}
}
}

整个很容易实现,你使用C语言编辑吧。比如
sbit input1=P1^1;
sbit input2=p1^2;
然后在main函数里判断它是否有信号即可。

  • 单片机AT89C51,想实现六个端口输入都是开关量,两个端口输出,
    答:at89c51没有这两个端口,如果要对输入的高速脉冲计数,可以设置定时/计数器0和1的为计数器,脉冲输入为外部输入t0(p3.4)和t1(p3.5)口,这两个口在12mhz晶振频率下最大计数速率可达500khz左右计算方法是:晶振频率/24=最大计数速率,带入上面的就是12000000hz(12mhz)/24=500000hz(500khz)。具...
  • 用Aat89c51单片机驱动六个数码管静态显示年月日,求程序
    答:你这个仿真图需要修改一下,才好写程序,就是74LS373的LE端不要用ALE信号锁存,改用P2口的某一个脚,或干脆把LE端接到VCC上,即一个电源端子。而你现在的仿真图的接法需要的用汇编MOVX指令,要是写C语言程序就麻烦了。而改接到VCC上只要从P0口输出段码就行了,汇编语言或C语言都好写程序。
  • 想求一个AT89C51单片机6位LED的数字秒表程序,有四个按键,一个启动 暂 ...
    答:include<reg51.h>#include<INTRINS.h>#define u16 unsigned int#define u8 unsigned charsbit k1=P1^4;sbit k2=P1^5;sbit k3=P1^6;sbit k4=P1^7;u8 ds[6]; //数码管显示缓存#define YY 1#if YY==0//共阳code u8 w[]={0x04,0x08,0x10,0x20,0x40,0x80,};//位码code u8 d[...
  • 如何用单片机AT89C51控制六位数码管,可以显示出不同的六个数字(123456...
    答:include<reg51.h> define uchar unsigned char uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};uchar number=0;void t0isr() interrupt 1 { TH0=0xf4;TL0=0x48;switch(number){ case 0:P2=0x01;P0=distab[1];...
  • 单片机AT89C51各个引脚的作用有哪些?
    答:RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。/PSEN:外部程序存储器的选...
  • 基于AT89C51单片机的6位数码管显示的简易电子时钟设计
    答:include <reg52.h> include <intrins.h> define uchar unsigned char define uint unsigned int sbit ds1302_RST =P2^0;sbit ds1302_IO =P2^1;sbit ds1302_SCLK=P2^2;sbit ACC0=ACC^0;sbit ACC7=ACC^7;sbit A1=P3^0;sbit A2=P3^1;sbit A3=P3^2;sbit A4=P3^3;sbit A5=P3^4;...
  • 单片机AT89C51各个引脚的作用
    答:单片机的40个引脚大致可分为4类:1 电源 2 时钟 3 控制 4 I/O引脚。.下面详细讲解 .⒈ 电源:⑴ VCC - 芯片电源,接+5V ⑵ VSS - 接地端 .⒉ 时钟:XTAL1、XTAL2 -这个时钟相当于公共汽车,带动数据在单片机内的各个寄存器,进行传送。.⒊ 控制线 res第9脚为复位脚,一上电单片机就自动...
  • at89c51单片机有多少引脚
    答:at89c51单片机引脚分为:1、主电源引脚:Vss,Vcc 2、外接晶振引脚:XTAL1,XTAL2 3、控制引脚:RST/VPD,ALE/PROG,PSEN,EA/VPP 4、输入输出IO引脚。
  • 99se中怎么画电路图?有一个proteus isis的图,谁帮我画一下
    答:如图所示。电路的核心是单片机AT89C51。单片机的P1口八个引脚接LED显示器的段选码(a、b、c、d、e、f、g、dp)的引脚上,单片机的P2口六个引脚接LED显示器的位选码(1、2、3、4、5、6)的引脚上,电阻起限流作用,总线使电路图变得简洁。程序设计 实现LED显示器的选通并显示字符。电路图的绘制...
  • 利用AT89C51单片机设计简易电子钟(六位),通过8位LED数码管实现时间显示...
    答:程序设计思路:1.利用单片机内部定时器作为计时器,调用timer函数;2、设计一套按键子程序;(3)设计一套数码显示管子程序。下列提供一套程序供参考。include<iom16v.h> include <macros.h> define uchar unsigned char define uint unsigned int const uchar table[10]={0x3f,0x06,0x5b,0x4f,0x...