‘壹’ 单片机流水灯
用总线操作,因为单片机的P0和P2口对应着DPTR,所可以通过这个指针来操作16个LED.这是第一个方法,第二个方法是,用其他IO口,只要组合起来为16可以了,只不过要分别控制,先控制8个IO口。再控制另外8个IO口。至于程序,只要知道流程图就好办了。
‘贰’ 单片机流水灯的解释(汇编语言)
程序很简单的,只不过程序编的确实不那么规范,还有些啰嗦,有中断那个程序更是有很多画蛇添足的意思,既然用来中断,按键来控制流水,还加什么延时,多此一举。给你梳理一下:
ORG0000H
LJMPMAIN
ORG0100H
MAIN:
MOVA,#01H
LOOP:
MOVP2,A
LCALLDELAY
RLA
SJMPLOOP
DELAY:
MOVR2,#250
DLY:
MOVR3,#250
DJNZR3,$
DJNZR2,DLY
RET
END
‘叁’ 单片机流水灯程序
程序如下:
#include <reg52.h>
sbit led1 = P2^0;
sbit led2 = P2^1;
sbit led3 = P2^2;
sbit led4 = P2^3。
让电子信息技术与单片机技术相融合,有效提高了单片机应用效果。作为计算机技术中的一个分支,单片机技术在电子产品领域的应用,丰富了电子产品的功能,也为智能化电子设备的开发和应用提供了新的出路,实现了智能化电子设备的创新与发展。
从二十世纪九十年代开始,单片机技术就已经发展起来,随着时代的进步与科技的发展,目前该技术的实践应用日渐成熟,单片机被广泛应用于各个领域。现如今,人们越来越重视单片机在智能电子技术方面的开发和应用,单片机的发展进入到新的时期。
无论是自动测量还是智能仪表的实践,都能看到单片机技术的身影。当前工业发展进程中,电子行业属于新兴产业,工业生产中人们将电子信息技术成功运用。
‘肆’ 单片机流水灯的目的及意义
在如今这个科学技术发展迅猛的时代,传统的分立元件或逻辑电路构成的控制系统正以前所未有的速度被单片机智能控制系统所代替。在电子领域尤其是自动化智能控制领域,芯片技术取得了飞速发展,使单片机技术在各种民用和工业测控等领域得到了更为广泛的应用。
单片机凭其体积小、功能强、低成本、应用方面广等优点,已经成为微电脑控制的主力军。可以说,控制系统与自动控制的核心就是单片机。最能体现单片村应用价值之一的就是如今花样百出的流水灯了。
目前,国内外对于单片机流水灯的研究,大多数是利用AT89C51单片机,软硬件村结合,构造出最简单的流水灯,此举旨在抛砖引玉,广大用户又在此基础上扩展出更复杂的流水灯控制,比如键盘控制流水花样、控制流水灯显示数字或图案等等。
另外有关单片机音乐的研究,主要是针对单片机演奏音乐时音调和节拍的确定方法,以期产生更加纯正的音色来。由于这两个方面的研究比较成熟,因而就衍生出了单片机音乐流水灯的研究,详细了解并掌握音乐流水灯的理论基础和实践,对于单片机的学习将会产生可估量的作用。
简介
单片机也被称为单片微控器,属于一种集成式电路芯片。在单片机中主要包含CPU、只读存储器ROM和随机存储器RAM等,多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。
由此可见,单片机凭借着强大的数据处理技术和计算功能可以在智能电子设备中充分应用。简单地说,单片机就是一块芯片,这块芯片组成了一个系统,通过集成电路技术的应用,将数据运算与处理能力集成到芯片中,实现对数据的高速化处理。
‘伍’ 单片机流水灯
P0口控制,先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动三次;再从中间往两边流动三次;不过这个程序实现的应该是这样的
先奇数亮再偶数亮,循环三次;一个灯上下循环三次;两个分别从两边往中间流动;再从中间往两边流动(延时0.1s)
#include< reg52.h>
#include< intrins.h>//头文件
#define uint unsigned int
#define uchar unsigned char//声明用unit代替unsigned int,下个同理
void delay();
void main()
{ uchar temp,temp1,temp2,a,b;
while(1)
{ for(b=3;b>0;b--)
{ temp=0xaa;
P0=temp;
delay();
temp=0x55;
P0=temp;
delay();//调用延时函数
}
for(a=3;a>0;a--)
{ temp=0xfe;
for(b=7;b>0;b--)
{ P0=temp;
temp=_crol_(temp,1);
delay();
P0=temp;
delay();
}
}
temp1=0xfe;
temp2=0x7f;
for(a=8;a>0;a--)
{
temp=temp1&temp2;
P0=temp;
delay();
temp1=_crol_(temp1,1);
temp2=_cror_(temp2,1);
}
}
}
void delay()
{ uint a,b;
for(a=100;a>0;a--)
for(b=100;b>0;b--);
} //延时函数
希望可以帮助到您
谢谢
‘陆’ 如何用单片机简单制作一个流水灯
工具:STC系列51单片机、串口转换器(USB转TTL 或232转TTL)
材料:实验板一块(可以买现成的,也可以买面包板自己搭建),电阻、LED灯 若干,5V电源等。
以下程序可以直接用Keil C 直接编译执行。
//可以通过左移函数_crol_()和右移函数_cror_()来实现LED等的来回流动。
//具体实现方法可以参考如下程序:
#include<reg51.h>
#include<intrins.h>
#defineuintunsignedint
#defineucharunsignedchar
voiddelay(uinta);
voidmain()
{
P1=0xfe;
while(1)
{
//向左循环点亮LED
for(i=0;i<7;i++)
{
P1=_crol_(P1,1);//左移一位,点亮下一位LED
delay(55);
}
//向右循环点亮LED
for(i=0;i<7;i++)
{
P1=_cror_(P1,1);//右移一位,,点亮上一位LED
delay(55);
}
}
}
//延时函数,延时a毫秒
voiddelay(uinta)
{
uintx,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}
‘柒’ 单片机,流水灯
下图为主控芯片和流水灯模块的原理图。流水灯模块接在单片机的P1口,由原理图可以知道,在P1口给一个低电平即可点亮LED灯。相反,如果要LED灯熄灭,就要把P1口的电平变为高电平即可。要实现流水灯功能,我们只要将LED1~LED8依次点亮、熄灭,依始类推,8只LED变会一亮一暗的做流水灯了。
基于单片机的流水灯介绍_51单片机流水灯的五种实现方法
基于单片机的流水灯介绍_51单片机流水灯的五种实现方法
实现8个LED流水灯程序用中文表示为:P1.0低、延时、P1.0高、P1.1低、延时、P1.1高、P1.2低、延时、P1.2高、P1.3低、延时、P1.3高、P1.4低、延时、P1.4高、P1.5低、延时、P1.5高、P1.6低、延时、P1.6高、P1.7低、延时、P1.7高、返回到开始、程序结束。
1、通过改变赋值实现流水灯
void main()
{ while(1) {
P2=0xfe;
delay1ms(500); P2=0xfd; delay1ms(500); P2=0xfb;
delay1ms(500); P2=0xf7; delay1ms(500); P2=0xef; delay1ms(500); P2=0xdf;
delay1ms(500); P2=0xbf; delay1ms(500); P2=0x7f;
delay1ms(500); } }
2、通过公式运算实现流水灯
void main() {
while(1) {
uinta,b=1; P2=0xfe; delayms(500); for(a=0;a<7;a++)
P2-=b; // P2=P2-b delayms(500); b=b*2; //都化为同一类型进制运算 } } }
3、通过操作符<<与“|”实现流水灯 (通过移位实现流水灯)
void main() {
uchara,i;
while(1) {
a=0xfe; //点亮第一位LED灯 for(i=0;i<8;i++)
{ P2=a;
a=a<<1; //左移一位
a=a|0x01; //左移一位后与0x01相或,保证左移后最低位为1 delay_ms(500); } } }
4、通过库函数_crol_(字符左移)实现流水灯
void main()
{
uint a; a=0xfe; while(1) {
P2=a;a=_crol_(a,1); delay_ms(500); } }
5、采用数组实现流水灯
uchar code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void main(void) {
uchari;
while (1) {
for(i=0;i<8;i++) //循环点亮8只LED灯 {
P2=table[i];
delay_ms(500); //延时500毫秒 } } }
‘捌’ 什么是单片机流水灯
就是单片机驱动多个LED灯,亮的时候顺序亮,灭的时候也是顺序灭,看起来就像流水一样。
‘玖’ 如何用单片机做流水灯
因为电路用单片机控制,所以电路非常简洁。其电路原理图见下图,印制板图如下图所示。
电路的核心部分是AT89C2051单片机,前面提到它有Pl和P3两组I/O口,我们这里只用到Pl口,共8个引脚。图中Cl、R9组成典型的上电复位(即在加电时单片机复位)电路,XTAL、C2、C3与AT89C2051片内振荡电路组成时钟振荡器。值得注意的是,C2、C3的容量不能与图中数值偏差太大,否则可能引起不起振或振荡不稳定。XTAL的频率可以在4-20MHz之间,不过,频率的变化会导致程序运行速度的变化,这样就需要调整延时子函数的参数。事实上,不调整参数亦可,只是此时延迟时间不再是1秒,其延迟时间会随着XTAL频率的降低而增加。
二、软件部分
本程序包含两个函数,一个是主函数,另一个是延时子函数。源程序如下(为了便于讲解,我们为每行程序加上了编号):
程序各行作用如下:
00行:把AT89C2051的头文件“AT89x051.H”包含进来。
01行:声明Delay()延时子函数,该函数有一个无符号整型参数k,同时函数前面的void表明函数不返回函数值。
02行:延时子函数的开始,同时声明两个无符号整型变量i和j。
不过请注意,这里没有象上期的程序一样,把表示函数开始的“{”单独成行,而是把下一行写在一起了。事实上,写C程序的时候,可以把多行写作一行,C编译器只要遇到分号就认为是一行语句的结束。
当然,我们不能因为C程序有这个特点,就随意把多行合作一行书写,实际书写C程序的时候,还是要养成良好的程序书写习惯,按照约定俗成的原则来书写。
03行:声明for()循环。这个循环的初始条件是i=0,终止条件是i<k,循环计数是每循环一次,用手计数的变量i加1。因此,这个循环的循环次数就是k次。这样,只要改变k的值(即改变Delay()延时子函数的参数k的值),就可以很容易地控制循环次数,从而获得不同的延时时间。
04行:声明嵌套在03循环中的一个新的for()循环,这个循环与上一个循环相似,其循环次数是120次。本循环与上一个循环嵌套后,使得总的循环次数达120×k次。
05行:第一个分号,表示L条空语句,占用一个机器时间,以实现延时的目的。后面的两个“}”中,第一个“}”是04行for()循环的结束标志,程序遇到它时,将自动返回04行,使用于循环计数的变量j加1,同时判断j是否小于120,如果否,则转入05行;第二个是03行for()循环的结束标志,程序遇到它则会返回03行