c语言跑马灯实验报告,单片机跑马灯实验
一、实验目的
1、 熟悉HNIST-2型单片机系统相关硬件电路,程序下载方法;
2、 掌握采用汇编语言与C语言开发单片机系统的程序结构;
3、 掌握51系列单片机通用I/O口的使用。
二、实验前准备
1、 完成作业3;
2、 根据实验内容编写好相关程序,并进行Proteus仿真。
三、实验内容
实验内容为3项,其中第1、2项必做。
1、基本的流水灯。
根据图1电路,编写一段程序,使8个发光二极管D1、D2、D3、D4、D5、D6、D7、D8顺序(正序)点亮:先点亮D1,再点亮D2、D3……D8、D1……,循环点亮。每点亮一个LED,采用软件延时一段时间。
2、简单键控的流水灯。
不按键,按正序点亮流水灯;按下K1不松手,按倒序点亮流水灯,即先点亮D8,再顺序点亮D7、D6……D1、D8……。松手后,又按正序点亮流水灯。
3、键控的流水灯。
上电,不点亮LED,按一下K1键,按正序点亮流水灯。按一下K2键,按倒序点亮流水灯,按一下K3键,全部关闭LED。
四、实验原理图
如图3.1所示。
电路原理图如图3.1,AT89S52的P0.0~P0.7作为输出连接8个发光二极管,输出低电平0时对应发光二极管发光;由于发光二极管的导通电压为1.7V,所以HNIST-2型实验装置在电源与二极管之间加一个阻值为1K限流电阻保护二极管。
AT89S52的P2.0、P2.1作为输入连接2个按键K1、K2,若检测到P2.0=0,则说明K1键按下。
图3.1.png
五. 方案设计
概要设计:
A. 硬件设计
用stc89c52rc单片机在HNIST-2开发板上实验,单片机P0.0到P0.7连接8个小灯泡,P2口P2.0到P2.3连接4个开关。
仿真电路图.png
B. 软件设计思想
1、基本的流水灯
软件延时采用例题程序delay( j ),可调整延时时间。流水灯采用while(1)死循环保持,用循环左移函数crol(P0,1)控制流水灯流动。
2、简单键控的流水灯。
根据P2.0口的状态来判断是否按下K1开关,用if和while()来保持流水灯循环工作,if判断是否开关按下,然后点亮 D0或D7一个小灯泡,用while和循环左(右)移保持流水灯持续工作。
3、键控的流水灯
按一下键后马上松手,所以需要设置一个变量a保留按键键值,写一个单独检测开关状态的函数,在每一次延时后检测开关的状态并将状态保留在a中,然后根据a的值来实现不同的功能,功能实现和题2相似。
六、源代码
1、基本的流水灯
#include "reg52.h"
#include
#define uchar unsigned char
#define uint unsigned int
void delay(uint i){ //延时函数
uchar t;
while(i--){
for(t=0;t<120;t++) ;
}
}
void main()
{
P0=0xfe; //亮一个小灯泡
while(1)
{
delay(500);
P0=_crol_(P0,1); //循环左移
}
}
2、简单键控的流水灯。
#include "reg52.h"
#include
#define uchar unsigned char
#define uint unsigned int
sbit key=P2^0;
void delay(uint i){ //延时函数
uchar t;
while(i--){
for(t=0;t<120;t++) ;
}
}
void main()
{
while(1){
if(key==0){ //按住k1
P0=0xfe;
while(key==0){
delay(500);
P0=_crol_(P0,1);
}
}
if(key==1){ //k1没有按下
P0=0x7f;
while(key==1){
delay(500);
P0=_cror_(P0,1);
}
}
}
}
3、键控的流水灯
#include "reg52.h"
#include
#define uchar unsigned char
#define uint unsigned int
sbit key1=P2^0; //k1按键
sbit key2=P2^1;//k2按键
sbit key3=P2^2;//k3按键
uint a=0;//记录按键键值
void delay(uint i){ //延时
uchar t;
while(i--){
for(t=0;t<120;t++) ;
}
}
void key(){ //判断哪一个按键被按并用a记录
if(key1==0) a=1;
if(key2==0) a=2;
if(key3==0) a=3;
}
void main()
{
P0=0xff;
while(1){
key();
if(a==1){
P0=0xfe;
while(a==1){
key();
delay(500);
P0=_crol_(P0,1);
}
}
if(a==2){
P0=0x7f;
while(a==2){
key();
delay(500);
P0=_cror_(P0,1);
}
}
if(a==3){
P0=0xff;
}
}
}
七、实验思考题
1、采用I/O口作为输出口时要考虑哪些因素?为什么实验装置中LED要串联一个电阻?
答:作为输出口,要通过程序控制I/O口引脚的电平。LED是二极管,串联电阻做限流,防止二极管被击穿。
2、采用I/O口作为输入口时要注意什么?键控的流水灯时为什么要在延时程序中检测是否按键?
答:作为输入口,要先将相应端口的电平置1才能准确读取相应的状态。键控的流水灯在延时程序中检测是否按键是为了防止在延时过程中有键按下而导致未能检测到,
3、为什么延时程序要做一个函数?
答:延时函数使用频繁,做成一个函数方便调用。
八、实验总结心得体会收获
通过这一次的实验,确实接触到了许多新知识,首先就是单片机的工作原理和烧录过程以及仿真软件的使用,这是在这个实验中能够熟练掌握的,这个跑马灯的实验就是一个基础的单片机实验,实验的过程中要解决流水灯的问题,以及按键和流水灯之间的配合,是将硬件和软件结合的一次实验,为了让按键按下后流水灯依旧能持续循环的工作,我进行了多次调试,进一步理解了开关检测和流水灯的循环移动,还有就是在项目三中,如何按一次键就实现一个功能的问题,让我知道了将键值保存的方法,实验很成功,收益匪浅。
c语言跑马灯实验报告,单片机跑马灯实验相关推荐
- 单片机c语言数码显示实验报告,单片机动态显示技术实验报告.doc
桂林电子科技大学 实验报告 开 课 单 位 适用年级.专业 机械 课 程 序 号 课 程 代 码 实 验 名 称 <动态显示技术> 动态显示技术实验报告 一.实验目的 1.掌握动态显示技术 ...
- 单片机交通灯c语言实验报告,单片机交通灯实验报告
实验五:交通灯一.实验目的熟悉51单片机的汇编指令. 进一步了解8255芯片的结构及编程方法. 学习模拟交通控制的实现方法.二.实验设备 STC89C52单片机实验板.串口下载线.USB连接线.电脑3 ...
- 单片机c语言数码显示实验报告,单片机c语言版数码动态显示实验报告.doc
单片机c语言版数码动态显示实验报告 数码管动态显示实验一.实验要求在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输 ...
- 单片机c语言ad与da转换实验报告,单片机AD与DA转换实验报告.docx
单片机AD与DA转换实验报告.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...
- 安徽工程大学C语言程序设计实验报告,安徽工业大学嵌入式实验报告.docx
安徽工业大学嵌入式实验报告 <嵌入式系统实验报告>指导教师:陆勤姓名:程少锋学号:139074366班级:物联网131班实验一B 熟悉实验开发环境一.实验目的熟悉ADS1.2 开发环境,学 ...
- 计算器软件C语言课程设计实验报告,c简单计算器实验报告_相关文章专题_写写帮文库...
时间:2019-05-15 12:55:15 作者:admin 计算器实验报告 班级: 07计本(1)班 姓名: 王林 学号: 20706031047 指导老师: 韩静 一. 需求分析 (1)制作一个 ...
- c语言实验报告鼠标画图,计算机实验报告范本 -实习报告
计算机实验报告范本 -实习报告 实习报告 时间:2019-01-01 [www.unjs.com - 实习报告] 课程:大学计算机基础 班级 : ***** 学号:* ...
- c语言综合实验报告与材料专业,实验报告汇总
种子萌发的实验报告 一.做实验1.材料工具(1)常见的种子(如:绿豆 黄豆)40粒.(2)有盖的罐头4个,小勺1个,餐巾纸8张,4张分别标有1.2.3.4的标签,胶水,清水.2.方法步骤(1)在第一个 ...
- c语言实验报告中致谢词,实验报告致谢词范文.doc
实验报告致谢词范文 实验结束后,是需要写一份报告致谢词的哦,那么怎么写呢.请参考提供的实验报告致谢词范文吧! 本论文是在某某老师的亲切关怀和悉心指导下完成的,他严肃的科学态度,严谨的治学精神,精益求精 ...
最新文章
- C++/C++11中头文件functional的使用
- prooerties mysql_MySQL_第八章
- tomcat - JVM 配置
- Http请求中Content-Type讲解以及在Spring MVC中的应用
- mysql zpi版的如何配置_Mysql zip版 安装配置
- 我为什么要帮你查 Bug?
- Linux之磁盘挂载
- 【Win10安装字体+免费字体库】Windows10安装新字体教程,免费在线字体库推荐
- 长沙北大青鸟:北大青鸟培训学士后课程让大学生重回就业春天
- python numpy.linalg.norm函数的用法
- 蓝桥杯省赛C++A组B组题解整理(第十、九、八、七、六、五、四、三届)
- Java——因式分解算法
- 什么是域名服务器作用是啥,域名服务器的作用是什么?域名服务器原理及流程...
- application/octet-stream里的octet是什么意思
- 基于XPDL2.0的过程定义
- multipartfile获取数据_关于使用Springmvc的MultipartHttpServletRequest来获得表单上传文件的问题,万分感谢~...
- 快要圣诞节啦,快去给小伙伴们分享漂亮的圣诞树吧
- ANSYS的宏文件mac的创建和应用
- 天才少年稚晖君超酷“硬汉”项目登榜|GitHub近期热门项目盘点
- ASPX页面AJAX调用ASPX后台