前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单片机 流水灯

单片机 流水灯

作者头像
全栈程序员站长
发布2022-08-14 12:25:02
6570
发布2022-08-14 12:25:02
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

单片机 流水灯

一、简述

通过Proteus仿真单片机最小系统+流水灯的显示电路。用Keil编写相应执行文件。

源码、仿真电路图打包:链接:https://pan.baidu.com/s/1ZetoHZGz-jebnAd_BQGAUg 密码:h8jc

二、效果

单片机 流水灯
单片机 流水灯

三、工程结构

1、Keil编程

单片机 流水灯
单片机 流水灯

2、仿真电路图

单片机 流水灯
单片机 流水灯

四、源文件

LiuShui.c文件

代码语言:javascript
复制
#include<reg51.h>

//void Delay1ms(unsigned int count) //软延时count毫秒
//{
//	unsigned int i,j;
//	for(i=0;i<count;i++)
//	for(j=0;j<120;j++);
//}

void Delay1ms(unsigned int count)//延时count*50ms
{
	unsigned int i;
	TMOD=0x01;			   //选用定时器0且工作在方式1
	TH0=0x3c;			  //设置初值0x3cb0
	TL0=0xb0;
	TR0=1;      //开启定时器
	for(i=0;i<count;i++) //循环count次,每次定时50ms,总共count*50ms
	{	
		while(TF0!=1);// 每次定时50ms (溢出时才会跳出循环)
		TH0=0x3c;	 //重置初值0x3cb0
		TL0=0xb0;
		TF0=0;		   //软置溢出位
	} 
	TR0=0;      //关闭定时器
}

void main()
{
	unsigned char LEDIndex = 0;	  //指示第几个灯
	bit LEDDirection = 1; //控制流水灯依次亮灭的方向

	while(1)			  
	{
		if(LEDDirection)			//正方向,灯由上往下亮灭
			P1 = ~(0x01<<LEDIndex);	  //P1寄存器控制P1并口	 电压为0时灯亮,先将要亮灯的某一位置1,其余置0,然后取反,就变为只有指定位为0,然后移位实现其他位置0
		else
			P1 = ~(0x80>>LEDIndex);	
		if(LEDIndex==7)
			LEDDirection = !LEDDirection;	//到了最后一盏灯,改变灯的亮灭方向
		LEDIndex = (LEDIndex+1)%8;	 //	  每次加一,%8保证 LEDIndex	取值在0~7之间
		Delay1ms(2); //延时100ms
	}
}

五、代码说明

选用单片机的P1端口8只引脚作为输出脚,1只引脚控制1只LED灯。设置P1_0脚为低电平,使得第1只LED灯点亮,并延时一点时间,然后设置P1_0脚为高电平,熄灭第1只LED,以此同理控制其余7只引脚。比如:

11111110 P1_0脚为低电平,使得第1只LED灯点亮

11111101 P1_1脚为低电平,使得第2只LED灯点亮

11111011 P1_2脚为低电平,使得第3只LED灯点亮

11110111 P1_3脚为低电平,使得第4只LED灯点亮

11101111 P1_4脚为低电平,使得第5只LED灯点亮

11011111 P1_5脚为低电平,使得第6只LED灯点亮

10111111 P1_6脚为低电平,使得第7只LED灯点亮

01111111 P1_7脚为低电平,使得第8只LED灯点亮

P1寄存器有8位,分别控制对应的8个引脚。

正方向:从第1只LED等–》第8只LED灯

我们可设置初值为11111110,然后每左移1位,得到下一个流水灯的设置值

而这个初值可以用 00000001的取反来表示即 11111110=~(00000001)=~(0x01)

反方向:从第8只LED等–》第1只LED灯 ~(0x80)=~(10000000)=01111111

六、工程建立

1、编写执行程序

(1)新建Project (默认操作即可)

单片机 流水灯
单片机 流水灯

(2)选择cpu型号

单片机 流水灯
单片机 流水灯

(3)设置Project 属性

单片机 流水灯
单片机 流水灯
单片机 流水灯
单片机 流水灯
单片机 流水灯
单片机 流水灯

(4)新建C文件,编写相应代码

单片机 流水灯
单片机 流水灯

(5)将C文件添加到工程

单片机 流水灯
单片机 流水灯

(6)编译生成hex文件

单片机 流水灯
单片机 流水灯

2、仿真电路

单片机 流水灯
单片机 流水灯

选择hex文件

单片机 流水灯
单片机 流水灯

元件旋转翻转:

单片机 流水灯
单片机 流水灯

快速添加标签(P1_0,P1_1,P1_2…),点击“LBL”标签,然后按”a”

单片机 流水灯
单片机 流水灯

=================================回复 weixin_44582500 这位兄弟=============

搜索相关元件:

单片机 流水灯
单片机 流水灯

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/132648.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 单片机 流水灯
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档