❶ 用单片机制作的心形灯 我需要16盏灯的 程序还有电路图 还有其他的都要
自己仿照一下就可以了,用P1、P2、P3都可以
#include//51系列单片机定义文件
#defineucharunsignedchar//定义无符号字符
#defineuintunsignedint//定义无符号整数
voiddelay(uint);//声明延时函数
voidmain(void)
{
uinti;
uchartemp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++)//8个流水灯逐个闪动
{
P0=~temp;
delay(100);//调用延时函数
temp<<=1;
}
temp=0x80;
for(i=0;i<8;i++)//8个流水灯反向逐个闪动
{
P0=~temp;
delay(100);//调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++)//8个流水灯依次全部点亮
{
P0=temp;
delay(100);//调用延时函数
temp<<=1;
}
temp=0x7F;
for(i=0;i<8;i++)//8个流水灯依次反向全部点亮
{
P0=temp;
delay(100);//调用延时函数
temp>>=1;
}
}
}
voiddelay(uintt)//定义延时函数
{
registeruintbt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
❷ 如何用汇编语言控制led灯闪烁
用AT89C2051单片机(可以换成任意的51单片机)仿真,控制一个LED灯闪烁,LED灯接在P1.7脚上。程序如下
LED1 BIT P1.7
MAIN:CPL LED1
ACALL DELAY
SJMP MAIN
DELAY:MOV R7,#0;延时子程序
MOV R6,#0
LOP:DJNZ R6,$
DJNZ R7,LOP
RET
仿真图如下
❸ 基于51单片机16个彩灯从左到右再从右左循环闪烁的汇编程序
在进行单片机控制彩灯的循环闪烁程序设计时,我们可以使用51单片机来实现。假设连接彩灯的端口为P1和P2,其中P1.0到P1.7代表从左到右依次点亮的7个灯,P1.7代表最右边的灯。P2.0到P2.7则代表从右到左依次点亮的7个灯,P2.7代表最左边的灯。整个程序设计的目标是让彩灯从左到右依次点亮,然后从右到左依次熄灭,再重复此过程。
为了实现这一功能,我们需要编写一段汇编程序。首先,我们定义一个循环,让P1.0到P1.7依次点亮,然后P1.7熄灭,P1.6点亮,以此类推,直到P1.0熄灭。此时,我们再让P2.7到P2.0依次点亮,然后P2.0熄灭,P2.1点亮,以此类推,直到P2.7熄灭。这样,彩灯就会按照从左到右再从右到左的顺序循环闪烁。
具体的汇编代码如下:
1. 初始化端口P1和P2,设置为输出模式。
2. 设置一个计数器变量,用于记录当前点亮的灯的位置。
3. 使用一个循环,点亮当前计数器位置的灯,然后将计数器加1,直到计数器超过最大值。
4. 当计数器超过最大值后,重新设置计数器为初始值,并开始点亮P2端口的灯,直到P2端口的灯全部点亮,然后重新点亮P1端口的灯。
5. 重复上述步骤,实现彩灯的循环闪烁。
通过上述程序设计,我们可以实现51单片机控制彩灯从左到右再从右到左的循环闪烁功能。这一过程需要根据具体的硬件配置和单片机型号进行适当调整。
❹ 单片机 8个LED灯随机闪烁怎么做
1、首先在电脑中新建项目:Keil uVision4 51单片机LED闪烁编程,如下图所示。
❺ 如何用单片机制作交通灯
LED模拟交通灯
本例中的12只LED分成东西向和南北向两组,各组指示灯均有相向的2只红色、2只黄色与2只绿色的LED,本例中对应的LED单独进行定义,程序运行时模拟了十字路口交通信号灯得切换过程与显示效果。
本例电路如下图:
(呵呵 图片插入不进来)
程序设计调试与实训:
源程序中用6行sbit对东西和南北向的红、黄、绿指示灯分别进行定义,这样便于对它们进行单独控制。
本例交通指示灯切换时间设置的较短,这样可在调试的时候较快观察到运行效果,可在调试运行本例后修改代码,使指示灯切换过程更接近于实际的交通指示灯切换过程。
源程序代码:
//----------------------------------------------------------------
// 名称:LED模拟交通灯
//----------------------------------------------------------------
// 说明:东西向绿灯亮若干秒后,黄灯闪烁5次后亮红灯,红灯亮后,
// 南北向由红灯变为绿灯,若干秒后,南北向黄灯闪烁,
// 闪烁5次后亮红灯,东西向绿灯亮,如此重复。
//
//-----------------------------------------------------------------
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A=P0^0; //东西向指示灯
sbit YELLOW_A=P0^1;
sbit GREEN_A=P0^2;
sbit RED_B=P0^3; //南北向指示灯
sbit YELLOW_B=P0^4;
sbit GREEN_B=P0^5;
uchar Flash_Count = 0;
Operation_Type = 1; //闪烁次数及操作类型变量
//--------------------------------------------------------
//延时
//--------------------------------------------------------
void DelayMS(uint x)
{
uchar t;
while(x--)
{
for(t=120;t>0;t--);
}
}
//---------------------------------------------------------
//交通灯交换子程序
//---------------------------------------------------------
void Traffic_lignt()
{
switch(Operation_Type)
{
case 1: //东西向绿灯与南北向红灯亮
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
DelayMS(2000); // 延时
Operation_Type = 2; //下一操作
break;
case 2: //东西向黄灯开始闪烁,绿灯关闭
DelayMS(300); //延时
YELLOW_A=!YELLOW_A; //闪烁5次
if(++Flash_Count !=10)
return;
Flash_Count=0;
Operation_Type = 3; //下一操作
break;
case 3: //东西向红灯与南北向绿灯亮
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
DelayMS(2000); //延时
Operation_Type = 4; //下一操作
break;
case 4: //南北向黄灯开始闪烁
DelayMS(300); //延时
YELLOW_B=!YELLOW_B;
if(++Flash_Count !=10)
return; //闪烁5次
Flash_Count=0;
Operation_Type = 1; //回到第一种操作
break;
}
}
//----------------------------------------------------------
//主程序
//----------------------------------------------------------
void main()
{
while(1)
{
Traffic_lignt();
}
}