单片机(AT89C51)外设的I/O输入输出实验
程序员文章站
2022-06-08 19:58:49
...
还是熟悉的单片机(AT89C51)系列有需要的可以去看看我的单片机专栏,里面还有更多的关于单片机的知识。希望大佬们可以多多支持。
前面要是关于单片机有不了解的可以看看我的专栏,链接给你们丢这里了:单片机专栏
开始分享吧!!!
目录
题目解析
主要实现扩展的输入口接了8个开关,扩展的输出口接了8个发光二极管。实现8个开关控制对应8个发光二极管的显示?
实验中需要用到外界其他的芯片
方法一
使用74LS373和74LS245作为外接的芯片完成实验
实验电路图
实验代码
#include <reg51.h>
#include <absacc.h> //定义绝对地址访问
#define uchar unsigned char
void delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=249;j>0;j--)
;
}
uchar i;
void main(void)
{
while(1)
{
i=XBYTE[0x7fff]; //把输入口的开关信息输入到i中
delay(1); //延时程序
XBYTE[0x7fff]= i; //把输入的开关信息传送到输出的地址中
}
}
实验代码其实并不是很难稍加理解就可以,就是把输入口(地址0x7fff)的按钮信息赋值到i中,然后将输入口的数据传输到输出口中。输入口连接按钮,输出口连接LED灯。如上面的电路图一样。
实验结果
实现了每一个按钮的按动对应的LED灯的亮灭。
方法二
使用8255和74LS373作为外接的芯片完成实验
实验电路图
实验代码
#include <reg51.h>
#include <absacc.h>
#define uchar unsigned char
uchar i;
void delay(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=249;j>0;j--)
;
}
void main (void)
{
while(1)
{
i= 0x90; //可有可无
XBYTE[0xff7fc]= i; //可有可无
i=XBYTE[0xff7c]; //和上面的程序一样
delay(1); //和上面的程序一样
XBYTE[0xff7d]= i; //和上面的程序一样
}
}
实验结果
实现了每一个按钮的按动对应的LED灯的亮灭。
总结
单片机(AT89C51)外设的I/O输入输出实验的结果比较的简单明了,主要还是需要去了解其中的实验原理。
单片机专栏链接:单片机专栏
点点关注再走吧!!! 后续更加精彩
No pains No results
上一篇: 51单片机蜂鸣器
下一篇: 51单片机 中断控制蜂鸣器