当前位置: 首页 > news >正文

单片机原理及应用:流水灯的点亮

流水灯是一种简单的单片机控制电路,由许多LED组成,电路工作时LED会按顺序点亮,类似于流水的效果。

下面是运行在keil上的代码,分别使用了数组,移位符和库函数来表示。

//数组法
#include <reg52.h>     //头文件		
#define uchar unsigned char	
uchar tab[16]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f , 0xbf , 0xdf , 0xef , 0xf7 ,  0xfb , 0xfd , 0xfe };
//因为采用了共阳极接法,所以要点亮哪个灯就给哪一位赋0
//8个灯,对应两个十六进制数的八个数位
//从右到左,再从左到右,奇偶位,内外位修改数字顺序即可
void  delay(  )
{	uchar i,j;for(i=0; i<255; i++)//为了让人眼看清灯的闪烁而延时for(j=0; j<255; j++);
}void  main(  )			//主函数		
{	uchar i;P1 = 0xff;          //熄灭所有LED,避免上电亮灯while (1)			//永真{	for(i=0;i<16; i++){	P1=tab[i]; 	//改变P1口的电位delay( ); 	//延时函数}}
}//移位符
#include <reg52.h>     		//包含reg52.h头文件
#define uchar unsigned char
void  Delay()           
{uchar i, j;for (i=0;i<255;i++)for (j=0;j<255;j++);
}
void main()
{ uchar i, temp;P1 = 0xff;               	//在移位符中会舍弃数位,所以必须赋初值while(1){temp = 0x01;             	//为了赋值方便,取反码给要点亮的灯赋1for (i=0;i<8;i++)			//奇偶位,i改4,<<2{P1 = ~ temp;      	//temp值取反送P1口temp = temp << 1 ; 	//左移一位Delay()}temp = 0x80;             for (i=0;i<8;i++)			//奇偶位,i改4,>>2{P1 = ~ temp;      	//temp值取反送P1口temp = temp >> 1 ; 	//右移一位Delay();}}}//库函数
#include <reg52.h>		
#include <intrins.h>	//调用函数库	
#define uchar unsigned charvoid  delay()           	
{uchar i,j;for (i=0;i<255;i++)for (j=0;j<255;j++);
}
void main()
{ uchar i,temp;P1 = 0xff;               while (1){	temp=0x7f;			for(i=0; i<8; i++)		  //奇偶项i改成4,temp后改成2{  P1=temp;		delay(  );  				temp=_cror_( temp,1) ;//r代表right,右移		}temp=0xfe;for(i=0; i<8; i++)		  //奇偶项i改成4,temp后改成2{ P1=temp;				  delay(  );				temp=_crol_( temp,1) ; //l代表left,左移		}} 
}

编译时要注意修改晶振频率并创建hex文件。

 

点亮效果呈现在proteus上,大家也可以根据仿真电路图去挑选自己需要的元器件组建不同功能的电路。

流水灯演示

谢谢大家。

http://www.lryc.cn/news/265783.html

相关文章:

  • 蓝桥杯宝藏排序算法(冒泡、选择、插入)
  • 使用@jiaminghi/data-view实现一个数据大屏
  • 神经网络:池化层知识点
  • 微服务常见的配置中心简介
  • 银河麒麟v10 rpm安装包 安装mysql 8.35
  • 一篇文章带你搞定CTFMice基本操作
  • Spring security之授权
  • 模式识别与机器学习(十一):Bagging
  • 数据压缩(哈夫曼编码)
  • 移动安全APP--Frida+模拟器,模拟器+burp联动
  • MATLAB遗传算法工具箱的三种使用方法
  • 复习linux——时间同步服务
  • 如何在Linux设置JumpServer实现无公网ip远程访问管理界面
  • 【Git】在 IDEA 中合并多个 commit 为一个
  • 性能实战(一) --- clock_gettime造成系统整体cpu过高定位过程
  • Ai 会替代人类工作吗?
  • 神经网络:深度学习基础
  • 如何在Windows上搭建WebDAV服务并通过内网穿透实现公网访问
  • 【Transformer框架代码实现】
  • Apache ShenYu 网关JWT认证绕过漏洞 CVE-2021-37580
  • 锐捷配置重发布RIP进OSPF中
  • Android R修改wifi热点默认为隐藏热点以及禁止自动关闭热点
  • 智能优化算法应用:基于人工大猩猩部队算法3D无线传感器网络(WSN)覆盖优化 - 附代码
  • [JS设计模式]Flyweight Pattern
  • 【.Net8教程】(一)读取配置文件全面总结
  • 亚信安慧AntDB:支撑中国广电5G业务的数据库之力
  • C++哈希表的实现
  • [Angular] 笔记 6:ngStyle
  • Linux环境下使用logrotate工具实现nginx日志切割
  • 数字信号的理解