一 、单片机IO实验
一、 单片机IO实验
自律 学习 坚强 ,拒绝迷茫。
作者:行走的皮卡丘
时间:2021/03/23
喜欢就去追,这个红灯等不到,说不定下一个红灯等到了,嘻嘻!!!!!!!
文章目录
- 一、 单片机IO实验
- 一、实验目的
- 二、实验原理
- 1、 单片机最小系统由单片机芯片、时钟电路以及复位电路构成。
- 2、I/O 口
- 三、设计步骤:
- 【实验程序设计】
- 【PROTUES 仿真】
- 四、实验内容
- 1、见图一。通过AT89C51 单片机控制8 个发光二极管发光,实现亮点以由上到下循环移动,间隔时间为0.1S。
- 实验效果图:
- 2、见图一。通过AT89C51 单片机控制8 个发光二极管发光,循环实现亮点由上到下移动1 次(间隔时间为0.2S),由下到上移动1 次(间隔时间为0.2S),闪烁1 次(即先全亮0.1S,再全灭0.1S)。
- 3、用蜂鸣器发出固定电话回音声音。见图三。
- 五、提交实验报告写作内容要
一、实验目的
1、掌握AT89C51 单片机IO 口的输入输出。
2、掌握用查表方式实现AT89C51 单片机IO 口的控制。
3、练习单片机简单延时子程序的编写。
4、熟练运用Proteus 设计、仿真AT89C51 系统。
5、使用单片机开发试验仪来验证实验结果。
二、实验原理
1、 单片机最小系统由单片机芯片、时钟电路以及复位电路构成。
2、I/O 口
P0 口:8 位双向I/O 口。在访问外部存储器时,P0 口可用于分时传送低8 位地址总线和8 位数据总线。能驱动8 个LSTTL 门。
P1 口:8 位准双向I/O 口(“准双向”是指该口内部有固定的上拉电阻)。能驱动4 个LSTTL门。
P2 口:8 位准双向I/O 口。在访问外部存储器时,P2 口可用于高8 位地址总线。能驱动4 个LSTTL 门。
P3 口:8 位准双向I/O 口。能驱动4 个LSTTL 门。P3 口还有第二功能。
P1 口作为输出口时与一般的双向口使用方法相同。当P1口用为输入口时,必须先对它置1。若不先对它置1,读入的数据可能是不正确的。
三、设计步骤:
【PROTEUS电路设计】
在ISIS 中进行电路图设计,发光二极管流水灯实验装置电路原理图如下图所示。
图一
- 1、按照元件清单从PROTEUS 库中选取元器件,进行第2、3、4、5、6 步,完成原理图。
元件名称 | 所属类 | 所属子类 |
---|---|---|
AT89C51(单片机) | Microprocessor ICs | 8051 Family |
RES(电阻) | Resistors | Generic |
LED-YELLOW(黄色发光二极管) | Optoelectronics | LEDs |
CAP(电容) | Capacitors | Generic |
CAP-ELEC(电解电容) | Capacitors | Generic |
CRYSTAL(晶振) | Miscellaneous | – |
SWITCH(按键) | Switich&relays | Switchs |
2、放置元器件;
3、放置电源和地;
4、连线;
5、参照原理图进行元件属性设置;
6、电气检查。
【实验程序设计】
1、流程图:
2、在KeilC 中进行源程序设计:
3、编译、生成目标代码
【PROTUES 仿真】
1、在AT89C51 属性页中加载KeilC 中生成的目标代码;
2、仿真、调试代码
3、注意使用观察窗口
四、实验内容
1、见图一。通过AT89C51 单片机控制8 个发光二极管发光,实现亮点以由上到下循环移动,间隔时间为0.1S。
电路连接图:
代码:
#include "reg52.h"
#include "intrins.h"
#define uint unsigned int //无符号整型
#define uchar unsigned char //无符号字符型
#define led P1 //对整个P2端口进行操作uchar temp;
//ms
void delay(uint z)
{int x,y;for(x = 0; x < z; x++)for(y=0;y<110;y++);
}void Led_Pipeline_1() //先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;{//方法五:led = 0XFF;delay(1);led = 0XFE; //1delay(1);led = 0XFD; //2delay(1);led = 0XFB; //3delay(1);led = 0XF7; //4delay(1);led = 0XEF; //5delay(1);led = 0XDF; //6delay(1);led = 0XBF; //7delay(1);led = 0X7F; //8delay(1);led = 0XFF;delay(1);
}void Led_Pipeline_2() //先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;
{// 方法六:P1 = temp;delay(1);temp = _crol_(temp,1);
}void main()
{ temp = 0xfe;while(1){Led_Pipeline_1();Led_Pipeline_2();}}
实验效果图:
2、见图一。通过AT89C51 单片机控制8 个发光二极管发光,循环实现亮点由上到下移动1 次(间隔时间为0.2S),由下到上移动1 次(间隔时间为0.2S),闪烁1 次(即先全亮0.1S,再全灭0.1S)。
电路连接图:
代码:
#include "reg52.h"#include "intrins.h"#define uint unsigned int //无符号整型#define uchar unsigned char //无符号字符型#define led P1 //对整个P2端口进行操作uchar temp;//msvoid delay(uint z){int x,y;for(x = 0; x < z; x++)for(y=0;y<110;y++); }void Led_Pipeline_1() //先左再右逐个亮起,不熄灭;再从右到左逐个熄灭;
{// 方法六:int i;for(i=0;i<7;i++){P1 = temp;delay(100);temp = _crol_(temp,1); }for(i=0;i<7;i++){P1 = temp;delay(100);temp = _cror_(temp,1);} }void main()
{ temp = 0xfe;while(1){Led_Pipeline_1();
}}
实验效果图:
3、用蜂鸣器发出固定电话回音声音。见图三。
固定电话回音声音:450Hz,通1秒断4秒。(1秒时间内,输出频率450Hz信号;另外四秒无声音)
电路连接图:
流程图:
代码:
#include "reg52.h"#define uchar unsigned char#define uint unsigned int
sbit BUZZ = P1^5;
void OpenBuzz(uint freq);
void StopBuzz();
void delay_ms(uint xms);
uint reload; //计算所需定时器重载值
void main()
{TMOD|=0x01;EA=1;while(1){OpenBuzz(450); //以4KHZ频率启动蜂鸣器delay_ms(1000);StopBuzz(); //停止蜂鸣器delay_ms(4000);}
}
void OpenBuzz(uint freq)
{reload = 65536 - (11059200/12)/(freq*2); TH0 = reload/256;TL0 = reload%256;ET0 = 1;TR0 = 1;
}
void StopBuzz()
{ET0 = 0;TR0 = 0;
}void Timer0() interrupt 1
{TH0 = reload/256;TL0 = reload%256;BUZZ = ~BUZZ;
}
void delay_ms(uint xms)
{uint i,j;for(i=xms;i>0;i--)for(j=110;j>0;j--);}
实验效果图:
4、 简易模拟交通灯****(********自己作图********)****
说明:东西向绿灯亮10秒,黄灯闪烁3次后红灯亮, 红灯亮后,南北向由红灯变为绿灯,15秒后南北向黄灯闪烁3次后变红灯,东西向变绿灯,如此重复。
电路连接图:
流程图:
代码:
#include "reg52.h"#define uint unsigned int //无符号整型#define uchar unsigned char //无符号字符型sbit red1 = P0^0;sbit yellow1 = P0^1;sbit green1 = P0^2;sbit red2 = P0^3;sbit yellow2 = P0^4;sbit green2 = P0^5;//ms
void delay_ms(uint z)
{int x,y;for(x = 0; x < z; x++)for(y=0;y<110;y++);
}void main()
{P1 = 0XFF;while(1){// P1 = 0XFF;// delay_ms(1000);// P1 = 0;// delay_ms(1000);red2=0;red1=1;green1 = 0;delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);green1 = 1;yellow1=0;delay_ms(100);yellow1=1;delay_ms(100);yellow1=0;delay_ms(100);yellow1=1;delay_ms(100);yellow1=0;delay_ms(100);yellow1=1;delay_ms(100);red1=0;red2=1;green2 = 0;delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);delay_ms(1000);green2 = 1;yellow2=0;delay_ms(100);yellow2=1;delay_ms(100);yellow2=0;delay_ms(100);yellow2=1;delay_ms(100);yellow2=0;delay_ms(100);yellow2=1;delay_ms(100);}}
实验效果图:
五、提交实验报告写作内容要
请写出实验过程中曾出现的问题和你的解决方法,你对实验有何感想和体会?
一开始自我拟了一道题:做一个十字路口交通灯,带倒计时功能,有暂停功能,绿灯时长控制功能。且暂停时倒计时灯熄灭,十字路口红灯全亮;绿灯时长的控制由另一个单片机进行控制(串口通信)。
实验时:
①我先通过Proteus搭建一个只有十字路口交通灯的电路。搭建完电路后,通过代码编程,实现基本的交通灯功能。具体为按照四个路口方向逐次亮起红灯24秒,绿灯5秒,黄灯3秒。
②搞完交通灯的显示问题后,我去proteus中继续添加一部分电路,用于实现十字路口交通灯的倒计时的显示。这时发现单片机引脚不太够用,毕竟交通灯就占了12个引脚,若倒计时的显示全部直接用单片机的引脚作为控制,则要用到16个引脚。这明显(12+16=28)会用到P3口的引脚。但我又不想用P3口来做这些事,P3口我打算用于功能按键的控制。这时我想起动态数码管的位选其实可以用138译码器来进行,这样只需3个端口用于选择地址,而剩下的5个端口则省下来了。相关电路添加完毕后,我继续通过代码编程,实现基本的交通灯功能+倒计时功能。
③在单片机A中,加了个外部中断0,并在proteus中修改了对应电路。并通过在while(1)死循环中,用if….else….进行分支选择,成功把交通灯暂停功能添加上去了。
④在单片机B中,通过两个按键,并在代码中,实现了绿灯时长的加减,且通过串口发送给了单片机A中。至此完成了自拟题目的功能要求。
最后的最后就是,修改了一些小bug,例如增加了绿灯、红灯时长范围,防止绿灯时间过长等。并且在不影响功能的前提下,优化了下代码,尽量节约单片机的内存空间(虽说是实验而已,没必要,但还是要有一个好习惯),简化代码,使之既层次分明、通俗易懂,又简单直了。
一 、单片机IO实验相关推荐
- c语言用p1口进行转弯灯实验,P1.0口转弯灯程序 单片机IO口的应用
P1.0开关接5V时,右转弯灯闪亮,P1.1开关接5V时左转弯灯闪亮.P1.0.P1.1 开关同时接5V或接地时,转弯灯均不闪亮. 程序框图 P1.0开关接5V时,右转弯灯闪亮,P1.1开关接5V时左 ...
- 单片机io口的控制实验c语言,单片机io口控制实验报告
<单片机io口控制实验报告>由会员分享,可在线阅读,更多相关<单片机io口控制实验报告(5页珍藏版)>请在人人文库网上搜索. 1.单片机io口控制实验报告 精品文档,仅供参考单 ...
- IO口多路查理复用:三个单片机IO口控制六个LED
简 介: 本文介绍了单片机的IO控制 LED 中的复用技术,特别查理复用基本原理和特点进行了介绍.使用一款IS31FL3731可以构成16×9的PWM亮度可控的 LED 矩阵. 关键词: 查理复用,C ...
- 测量ATMEGA8单片机IO口的输入输出内阻
➤ 01背景 在 电子小帮手电路中电源开关电路分析 中介绍测量模块电路实验原理的时候,对于ATmega系列的 单片机的输出端口进行了内部描述 .特别是对于端口做为IO输出口的时候,它可以等效为通过电阻 ...
- 如何利用单片机IO口产生两倍的电源电压
简介 在很多情况下,电子系统中需要获得比工作电源高的电压电源,或者负电源.比如在一些功率器件(MOS)的基极驱动信号.扩展运算放大器的动态范围.一些通信信号(UART232). 现在有很多专门的芯片, ...
- Linux 阻塞和非阻塞IO 实验
目录 阻塞和非阻塞IO 阻塞和非阻塞简介 等待队列 轮询 Linux 驱动下的poll 操作函数 阻塞IO 实验 硬件原理图分析 实验程序编写 运行测试 非阻塞IO 实验 硬件原理图分析 实验程序编写 ...
- 51单片机 | 蜂鸣器实验
文章目录 一. 蜂鸣器介绍 二.硬件设计 三.软件设计 四.实验现象 通过单片机的一个 IO 口控制 板载无源蜂鸣器,实现蜂鸣器控制. 一. 蜂鸣器介绍 蜂鸣器是一种一体化结构的电子讯响器,采 ...
- 51单片机汇编语言实验(三)-----定时/计数器实验(附参考代码及注释)
本系列共6篇文章,本文作为本系列的第三篇文章,介绍实验三 :定时/计数器实验,本系列文章基于Dais-52PRO实验箱. 本系列文章链接: --------------------------- ...
- 星研电子c语言程序清单,单片机理论实验课程设计协同教学方法探讨
[摘要]通过总结单片机理论.实验和课程设计的教学实践经验及教学研究心得,以某高校电子电气信息类本科专业为例,分析了如何完善单片机课程体系建设,如何在课程教学过程中通过理论与实践相结合加强大学生对理论的 ...
最新文章
- 云原生思想 — 云原生的 DevOps
- Laravel 服务提供者和门面模式
- Jackson中的自定义反序列化器和验证
- java string hash变量_java基础(六)-----String性质深入解析
- mybatis plug 只查id_MyBatis Generator的一个问题引发对插件的修改
- unity如何实现图片透视_FPS透视自瞄从入门到入狱
- 纯js实现类似淘宝星级评分功能
- 【免费资源分享】给大家分享一款自己编写的免费语音合成软件,免费文字转语音,无需提供任何接口么,傻瓜式使用!
- B. MADMAX(记搜+博弈)
- 【小程序】零基础微信小程序开发+实战项目
- 手游后劲不足,“体验”会是端游发展的一张王牌吗?
- ceph管理界面calamari(未成功)
- java 头像 微信群_Android仿微信群聊头像
- Bootstrap布局自动拉伸改变大小
- 东芝四轴机器人加相机
- OLT(光线路终端)介绍
- 医疗器械标准目录 第二部分专业技术领域(1)
- php的注册头像上传,用Ajax实现注册与头像上传功能
- 【51】PCIe简介
- “短信拦截马”黑色产业链与溯源取证研究
热门文章
- Android自动化测试工具调研
- 网站服务器垃圾清理,服务器安全狗垃圾清理功能操作教程
- android 音频切换分析,Android音频可视化操作
- Windows10下QT6(C++)+OpenCV4环境配置及安装
- STM32F103ZE+SHT30检测环境温度与湿度(IIC模拟时序)
- 操作系统:进程间通讯的七种方式
- fastdb c++接口
- 我是如何锻炼写作的?我的知乎“撕逼”式写作。
- uni-app 动画
- ubuntu 安装kali_如何在Linux,Windows,Kali,Ubuntu,Mint和示例中安装和使用exiftool