㈠ 如何用单片机实现流水灯,从一依次亮到八,再从八依次亮
单片机流水灯C语言程序的源代码如下:
#include //51系列单片机定义文件。
#define uchar unsigned char //定义无符号字符。
#define uint unsigned int //定义无符号整数。
void delay(uint); //声明延时函数。
硬件特征
1、单片机的体积比较小, 内部芯片作为计算机系统,其结构简单,但是功能完善,使用起来十分方便,可以模块化应用。
2、单片机有着较高的集成度,可靠性比较强,即使单片机处于长时间的工作也不会存在故障问题。
3、单片机在应用时低电压、低能耗,是人们在日常生活中的首要选择, 为生产与研发提供便利。
㈡ 51单片机流水灯颜色
五一单片机流水灯的颜色是么,是红颜色,只有红颜色才是这个颜色,直接龙口看到的
㈢ 单片机流水灯问题
你的问题在与led1()和led2()中有while(1)死循环,程序是不会出来了,可以根据实际要求设定循环次数,但是如果这样 按下的时间会长,因为要执行完for 才能检测到按键。
键盘最好不用P0口,如果要使用必须接上拉电阻
#include<at89x52.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P3^0;
uint data count;
void delay(){
uint i;
for(i=0;i<32000;i++);
}
void led0(void){
uchar temp=0x18,a,b;
uint i;
P1=temp;
delay();
for(i=0;i<4;i++){
a=(temp&0xf0)<<i;
b=(temp&0x0f)>>i;
P1=a|b; delay();
}
}
void led1(void){
uchar cmd=0x01;
for( )//这里不能用死循环;就像led0()一样,用FOR控制次数,你自己填写吧,不过这样按按键的时间要长。
{
P1=cmd;
delay();
if((cmd&0x80)==0x80) cmd=(cmd<<1)+1;
else cmd=cmd<<1;
}
}
}
void led2(void){
uchar cmd=0x80;
for( )//这里不能用死循环;就像led0()一样,用FOR控制次数,你自己填写吧,不过这样按按键的时间要长。
{
P1=cmd;
delay();
if((cmd&0x01)==0x01) cmd=(cmd>>1)+0x80;
else cmd=cmd>>1;
}
}
}
void main(void){
count=0;
led0();
while(1){
if(key==0){
delay();
if(key==0){
count=count+1;
if(count==3) count=0;
}
while(key==0);
}
switch(count){
case 0: led0();break;
case 1: led1();break;
case 2: led2();break;
default:;
}
}
}
㈣ 如何用单片机做流水灯
因为电路用单片机控制,所以电路非常简洁。其电路原理图见下图,印制板图如下图所示。
电路的核心部分是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行
㈤ 51单片机中如何用汇编语言编写流水灯
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:
ORG 0000H ;复位启动
AJMP START ;
ORG 001BH ;T1中断
AJMP T1INT ;
;定义变量========================
YSJS EQU 30H;延时计数器
LED EQU 31H;LED控制缓冲器
;主程序==========================
START: MOV LED,#0FEH ;初始化数据
MOV YSJS,#0 ;
MOV TMOD,#10H ;定时器1工作于方式1,16位定时器
MOV TL1,#0B0H ;设置定时初值
MOV TH1,#3CH ;定时时间=50mS
SETB ET1 ;使能定时器1中断
SETB TR1 ;启动定时器1
SETB EA ;开总中断
MOV P1,LED ;初始化流水灯
LOOP: JMP LOOP ;循环等待中断
T1INT: PUSH PSW ;定时器1中断程序
PUSH ACC ;保护现场
MOV TH1,#3CH ;定时时间=50mS
MOV TL1,#0B0H ;
INC YSJS ;
PUSH ACC ;保护ACC
MOV A,YSJI ;
CJNE A,#2,QT1 ;50mS*2=100mS
MOV P1,LED ;
MOV A,LED ;
RL A ;累加器A的值循环左移1位
MOV LED,A ;
MOV YSJS,#0 ;
QT1: POP ACC ;恢复现场
POP PSW ;
RETI ;返回主程序
END ;汇编程序结束
(5)单片机流水灯炫丽扩展阅读:
实现流水灯的三个方法:
第一种,总线方法实现流水灯。这是一种比较笨但又最易理解的方法,采用顺序程序结构,用位指令控制P1口的每一个位输出高低电平,加上延时函数,即可控制每个LED灯的亮灭。
第二种,移位方法实现流水灯采用循环程序结构编程。首先在程序开始给P1.0口送一个低电平,其它位为高。然后延时一段时间再让低电平往高位移动,这样就实现“流水”的效果了。
第三种,库函数实现流水灯。利用左移函数进行。
㈥ 单片机中流水灯如何控制
单片机中流水灯控制:
硬件连接很简单,只要将8个LED指示灯接在P1口上
另一端通过220欧姆的电阻接+5V电源上,就可以了。
主要靠软件控制,简单的可以使用左移或右移指令,将低电平0
逐渐移入寄存器中,即控制LED指示灯逐渐一个一个地点亮或一个一个地熄灭。
复杂点:
可以进行花式流水控制。
例如:
可以由两边逐渐向内点亮
然后再由内逐渐向外一个一个熄灭。
还可以由由内逐渐向两边内点亮
然后再由两边渐向内逐一个一个熄灭。
在程序的实现上
可以把各种花式流水的P1口亮灭状态字
事先定义成数组
然后每隔一定的时间
取出送P1口显示。
呵呵
俺只提供给你一个号的算法
程序就自己动手自立更生吧
满意
就选满意回答
㈦ 如何用单片机简单制作一个流水灯
工具: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--);
}
㈧ 单片机流水灯的目的及意义
在如今这个科学技术发展迅猛的时代,传统的分立元件或逻辑电路构成的控制系统正以前所未有的速度被单片机智能控制系统所代替。在电子领域尤其是自动化智能控制领域,芯片技术取得了飞速发展,使单片机技术在各种民用和工业测控等领域得到了更为广泛的应用。
单片机凭其体积小、功能强、低成本、应用方面广等优点,已经成为微电脑控制的主力军。可以说,控制系统与自动控制的核心就是单片机。最能体现单片村应用价值之一的就是如今花样百出的流水灯了。
目前,国内外对于单片机流水灯的研究,大多数是利用AT89C51单片机,软硬件村结合,构造出最简单的流水灯,此举旨在抛砖引玉,广大用户又在此基础上扩展出更复杂的流水灯控制,比如键盘控制流水花样、控制流水灯显示数字或图案等等。
另外有关单片机音乐的研究,主要是针对单片机演奏音乐时音调和节拍的确定方法,以期产生更加纯正的音色来。由于这两个方面的研究比较成熟,因而就衍生出了单片机音乐流水灯的研究,详细了解并掌握音乐流水灯的理论基础和实践,对于单片机的学习将会产生可估量的作用。
简介
单片机也被称为单片微控器,属于一种集成式电路芯片。在单片机中主要包含CPU、只读存储器ROM和随机存储器RAM等,多样化数据采集与控制系统能够让单片机完成各项复杂的运算,无论是对运算符号进行控制,还是对系统下达运算指令都能通过单片机完成。
由此可见,单片机凭借着强大的数据处理技术和计算功能可以在智能电子设备中充分应用。简单地说,单片机就是一块芯片,这块芯片组成了一个系统,通过集成电路技术的应用,将数据运算与处理能力集成到芯片中,实现对数据的高速化处理。
㈨ 单片机流水灯闪烁问题!急急急!
又要用定时器,又要用延时程序,这不是...
----
其实,只用一个定时器,就都可以解决。
;假设在 P0 口外接 8 个 LED,输出低电平时发光。
;下面程序,已经通过了实验,符合题目的流水灯闪烁要求.
ORG 0000H
LJMP START
ORG 000BH
MOV TH0, #4CH ;[email protected]
CPL F0
JNB F0, EXIT_T0 ;不到100ms就退出.
XRL P0, A ;每100ms,有一个LED亮/灭一次.
DJNZ R6, EXIT_T0
MOV R6, #20
RL A
EXIT_T0:
RETI
START:
MOV TMOD, #01H ;T0定时方式1
MOV TH0, #4CH ;[email protected]
MOV IE, #82H ;开T0中断.
MOV R6, #20
MOV A, #1
SETB TR0
SJMP $
END