单片机led流水灯实验c语言程序,单片机LED流水灯实验及流程图源代码详解
利用实验室提供的单片机实验开发板的最小系统电路模块、流水灯电路模块,以及Protues仿真软件搭建电路,实现I/O口循环流水灯演示效果。
LED流水灯控制电路如图2-1所示,八个LED灯D0-D7(可选择LED-RED)阳极接到+5V,阴极通过300欧姆电阻分别接到单片机的P1.0-P1.7八个IO口上。I/O口循环流水灯效果实现流程如图2-2所示,依次从第一盏灯开始,分别点亮每一盏灯,中间调用延时子函数便可使得流水灯的效果清晰可见。点亮LED灯的具体实现方法与上节相同,只需让相应的IO口输出低电平即可,程序实现代码已给出。按照上节给出的项目开发流程,从仿真电路搭建到程序编写,再到仿真调试以及最后的实物调试完成循环流水灯的实现。
电路硬件连接图
图2-1 流水灯控制电路图
程序流程图
图2-2 程序流程图
实验程序
#include "reg52.h"
void Delay(void) //延时子函数
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<100;j++)
;
}
void main(void)
{
while(1)
{
P1 = 0xfe; //点亮第一盏灯
Delay(); //延时
P1 = 0xfd; //点亮第二盏灯
Delay(); //延时
P1 = 0xfb;
Delay();
P1 = 0xf7;
Delay();
P1 = 0xef;
Delay();
P1 = 0xdf;
Delay();
P1 = 0xbf;
Delay();
P1 = 0x7f;
Delay();
}
}
四、实验内容及步骤:
1、采用移位的方式实现循环流水灯功能。
将上述LED流水灯的程序更改如下,重新编译程序生成.hex文件,仿真运行通过后,上传至单片机系统进行观察。
#include "reg52.h"
char temp = 0x01; //定义一个字符变量
void Delay(void)
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<100;j++)
;
} //延时子函数
void main(void)
{
while(1)
{
P1 = ~temp; //变量temp的值按位取反后赋给P1
temp = temp << 1; //变量temp左移1位
if(temp == 0) //判断变量temp的值是否为“0”
temp = 0x01; //若temp的值为“0”,将其赋值为“0x01”
Delay(); //调用延时函数
}
}
【说明】观察主函数死循环while(1)中的语句,其中temp初始值为0x01,对应二进制位00000001,“~”表示对temp进行按位取反,取反后结果为11111110,再将该结果赋给P1后,此时P1的值为11111110,即点亮P1.0口对应的LED灯。第二行代码表示将temp的值也就是00000001左移1位,最右边(也就是最低位)补“0”,左移后结果为00000010,并将其赋给temp,此时temp的值为00000010。第三行判断temp是否为“0”,可以看出,此时temp并不等于“0”,不执行if后的赋值语句,直接执行Delay函数。延时一段时间后,又回到死循环中的第一条语句,将temp按位取反后,结果为11111101,赋值给P1,此时点亮P1.1口对应的LED灯。程序一直循环该流程,当temp=10000000时,再执行第二行语句,左移后,temp=00000000,此时条件“temp == 0”成立,将执行if后的赋值语句,将temp重新赋值为0x01,程序继续循环执行,实现流水灯功能。
2、采用循环移位指令实现循环流水灯功能。
将上述LED流水灯的程序更改如下,重新编译程序生成.hex文件,仿真运行通过后,上传至单片机系统进行观察。
#include "reg52.h"
#include "intrins.h" //包含本征库函数
char temp = 0x01; //定义一个字符变量
void Delay(void) //延时子函数
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<100;j++)
;
}
void main(void)
{
while(1)
{
P1 = ~temp; //变量temp的值按位取反后赋给P1
temp = _crol_(temp,1); //变量temp左移1位
Delay(); //调用延时函数
}
}
【提高】根据上述流水灯循环方式(D0-D7循环)的程序,尝试编写程序实现双向循环流水灯(D0-D7-D0-D7……)。
编程实现D0-D7的变速循环流水灯功能。
将上述LED流水灯的程序更改如下,重新编译程序生成.hex文件,仿真运行通过后,上传至单片机系统进行观察。
#include "reg52.h"
#include "intrins.h"
char temp = 0x01; //定义一个字符变量
int time = 1000; //定义一个整形变量
void Delay(int T) //延时子函数,延时时间与T值成比例
{
int i,j;
for(i=0;i
for(j=0;j<100;j++)
;
}
void main(void)
{
while(1)
{
P1 = ~temp; //变量temp的值按位取反后赋给P1
temp = _crol_(temp,1); //变量temp左移1位
if(temp == 0x01) //判断变量temp的值是否为“0x01”
{
time = time - 200; //延时时间递减200
if(time < 100) //判断延时时间是否小于100
time = 1000; //若延时时间小于100,将其重新赋值为1000
}
Delay(time); //调用延时函数
}
}
【说明】本程序中有两个不同,首先延时子函数Delay(int T)可通过对T进行赋值(传入参数值)来改变延时的时间;其次while(1)死循环中在判断temp值是否为“0x01”中增加了三个语句,其作用是每循环一次流水灯,延时的时间递减200(若延时时间低于100,将其赋值为1000),实现了变速流水灯的功能。
编程实现用按键切换双样式流水灯显示:按一下按键,流水灯以样式1循环;再按一下按键,流水灯以样式2循环,如此反复。
实验程序如下,编译程序生成.hex文件,仿真运行通过后,上传至单片机系统进行观察。
#include "reg52.h"
#include "intrins.h"
char temp = 0x01; //定义字符变量
int Yangshi; //定义整形变量
sbit KEY = P2^0; //定义按键位变量
void Delay(void) //定义延时子函数
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<100;j++)
if(KEY == 0) //判断按键是否按下
{
Yangshi++; //若按下,Yangshi值加1
while(!KEY); //等待按键松开
}
}
void Yangshi1(void) //定义Yangshi1子函数
{
P1 = ~temp; //变量temp的值按位取反后赋给P1
temp = _crol_(temp,1); //temp值左移1位
Delay(); //调用延时子函数
}
void Yangshi2(void) //定义Yangshi2子函数
{
P1 = ~temp; //变量temp的值按位取反后赋给P1
temp = _cror_(temp,1); //temp值左移1位
Delay(); //调用延时子函数
}
void main(void)
{
while(1)
{
switch(Yangshi%2) //Yangshi的值对2求余
{
case 0: //若值为0
Yangshi1(); //调用Yangshi1子函数
break;
case 1: //若值为1
Yangshi2(); //调用Yangshi2子函数
break;
}
}
}
完整的Word格式文档51黑下载地址:
LED流水灯实验.docx
(51.68 KB, 下载次数: 57)
2019-6-12 08:25 上传
点击文件名下载附件
评分
黑币 +50
收起
理由
+ 50
共享资料的黑币奖励!
单片机led流水灯实验c语言程序,单片机LED流水灯实验及流程图源代码详解相关推荐
- 52单片机led灯闪烁c语言程序,单片机LED灯闪烁程序
原标题:单片机LED灯闪烁程序 点亮 小灯的程序我们第二课完成了,就是让 LED = 0.熄灭小灯的程序也很简单,就是 LED = 1.点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点 ...
- 52单片机led灯闪烁c语言程序,单片机 LED 灯闪烁程序
点亮 LED 小灯的程序我们第二课完成了,就是让 LED = 0.熄灭小灯的程序也很简单,就是 LED = 1.点亮和熄灭都会了,那么如果我们在亮和灭中间加个延时,反复不停的点亮和熄灭小灯,就成了闪烁 ...
- 单片机模数转换实验c语言程序,单片机实验AD转换实验
<单片机实验AD转换实验>由会员分享,可在线阅读,更多相关<单片机实验AD转换实验(5页珍藏版)>请在人人文库网上搜索. 1.实验报告课程名称: 单片机原理及应用 实验项目: ...
- 自动感光调节LED灯亮度C语言程序,单片机PWM调节LED灯亮度
刚搞完飞思卡尔智能车,昨天我一起做车的搭档跑来跟我说魏老师(我们系的前主任,不知道他们怎么认识的....)叫他帮忙做个可通过无线遥控调节LED灯亮度的设计方案,问我有没有兴趣做做,主要是魏老师也是受他 ...
- 定时器计数器实验C语言程序,单片机定时器计数器实验报告.docx
单片机定时器计数器实验报告 单片机定时器计数器实验报告 篇一:单片机计数器实验报告 计数器实验报告 ㈠ 实验目的 1. 学习单片机内部定时/计数器的使用和编程方法: 2. 进一步掌握中断处理程序的编程 ...
- 航标灯实验c语言程序,单片机原理及应用习题 (带答案)
<单片机原理及应用>习题 一.填空 1.MCS-51单片机访问外部存储器时,利用 ALE 信号锁存来自 P0 口的低8位地址信号. 2.MCS-51系统中,当PSEN信号有效时,表示从P0 ...
- c语言程序判断一个字符串是否是回文数,详解判断回文字符串和回文数算法的C语言代码!...
一.判断一个字符串是否为回文字符串 #include #include #include //包含strlen #define YES 1 #define NO 0 #define uchar un ...
- DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc
单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...
- 点亮第一盏灯的c语言编程,单片机点亮第一盏灯实验详细教程
第一个实验:keil软件使用与点亮人生的第一只发光二极管 1.001.jpg (23.15 KB, 下载次数: 78) 2017-5-20 17:27 上传 本章详细介绍单片机程序常用编译软件 Kei ...
最新文章
- 学习ExtJS4 常用控件
- CVPR 2018 FlowTrack:《End-to-end Flow Correlation Tracking with Spatial-temporal Attention》论文笔记
- 程序员怎么长久保持新鲜感?
- 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式
- Spring MVC前后台交互(前台ajax传递数据,后台controller接收数据返回json对象)
- 【Spring】Spring的AOP术语解释
- 628和822大K站:每个站长挥之不去的阴影
- Android模拟滑块验证,[Android实例] 拖动滑块进行图片拼合验证方式的实现
- Android端测试工具有哪些,android移动app测试几款移动端测试工具分享
- 2022最新《人工智能入门指南》全套学习教程,全网阅读量10w+
- SMC真空电磁阀气路接法
- 顶岗实习周记java方向_java程序员的实习周记
- 【Tableau Desktop 企业日常问题28】Tableau 如何发布到public ?
- 如何利用无线远传模块实现工业无线控制系统?
- 基于Laravel的会计财务系统
- 《Spring实战》读书笔记-第5章 构建Spring Web应用程序
- 中国数字经济投资态势分析及发展前景深度评估报告2022-2028年版
- IEEE754浮点数简介
- PowerShell:如何用PowerShell创建WinForm窗体?-在PowerShell中使用GUI界面
- 在搭建分布式事务txlcn-tm服务端时遇到坑及解决方案