导航:首页 > 操作系统 > 舞灯单片机程序

舞灯单片机程序

发布时间:2022-10-10 08:20:50

❶ 求单片机彩灯循环控制程序

ORG0000H

AJMPMAIN

ORG0100H

MAIN:JBP2.0,m1

JBP2.1,m2

JBP2.2,m3

JBP2.3,m4

JBP2.4,m5

JBP2.5,m6

JBP2.6,m7

JBP2.7,m8

SJMPMAIN

m1:MOVR1,#02H;四亮四闪

LOOP:MOVP1,#00H

XRLA,#0AAH

MOVP1,A

CALLDELAY

DJNZR1,LOOP

SJMPMAIN

m2:MOVR1,#08H;向右闪烁

MOVA,#0FEH

LOOP1:MOVP1,A

CALLDELAY

RLA

DJNZR1,LOOP1

SJMPMAIN

m3:MOVR1,#02H;整体闪烁

LOOP2:MOVP1,#00H

CALLDELAY

MOVP1,#0FFH

CALLDELAY

DJNZR1,LOOP2

SJMPMAIN

m4:MOVR1,#08H;奇数向右闪烁

MOVA,#0AAH

LOOP3:MOVP1,A

RRA

CALLDELAY

DJNZR1,LOOP3

SJMPMAIN

m5:MOVR1,#08H;两边中间

LOOP4:MOVP1,#3CH

CALLDELAY

MOVP1,#0C3H

CALLDELAY

;MOVP1,#7EH

;CALLDELAY

;MOVP1,#0BDH

;CALLDELAY

;MOVP1,#0DBH

;CALLDELAY

;MOVP1,#0E7H

;CALLDELAY

DJNZR1,LOOP4

SJMPMAIN

m6:MOVR1,#04H

LOOP5:MOVP1,#0F0H;亮一半灭一半

CALLDELAY

MOVP1,#0FH

CALLDELAY

DJNZR1,LOOP5

JMPMAIN

m7:MOVR1,#02H;中间往两边灭

LOOP6:MOVP1,#00H

CALLDELAY

MOVP1,#18H

CALLDELAY

MOVP1,#3CH

CALLDELAY

MOVP1,#7EH

CALLDELAY

MOVP1,#0FFH

CALLDELAY

DJNZR1,LOOP6

LJMPMAIN

m8:MOVR1,#01H;双灯循环

LOOP7:MOVP1,#3FH

CALLDELAY

MOVP1,#0FCH

CALLDELAY

MOVP1,#0CFH

CALLDELAY

MOVP1,#0F3H

CALLDELAY

DJNZR1,LOOP7

JMPMAIN

DELAY:MOVR5,#10

DEL1:MOVR7,#200

DEL:MOVR6,#123

NOP

NOP

DJNZR6,$

DJNZR7,DEL

DJNZR5,DEL1

RET

就是没有数码管显示!一共八种模式!

❷ 100分跪求 舞台灯C语言程序

//舞台灯
//P1口输出高电平导通
//P3.2口控制开关
//P3.3口控制模式

#include<reg51.h>
#define uchar unsigned char

bit key1=0; //开关标志
bit key2=1; //模式标志

void START()interrupt 0 using 0
{
key1=~key1; //开关控制
}
void CHANGE()interrupt 2 using 2
{
key2=~key2; //改变点亮模式
}

void delay(uchar time)
{
uchar i;
while(time--)
for(i=0;i<250;i++);
}

void main()
{
uchar led_l=0x10;
uchar led_r=0x08;
uchar led;

IE=0x85;
TCON=0x05;

while(1)
{
while(key1) //检查是否按下START键
{
led=led_l+led_r;
P1=led; //输出灯亮码

if(key2) //检查是否按下CHANGE键
{
led_l=led_l<<1;led_r=led_r>>1; //默认状态下未按CHANGE时从中向两边点亮
if(led_l==0x00){led_l=0x10;led_r=0x08;}
}
else
{
led_l=led_l>>1;led_r=led_r<<1; //按下CHANGE时
if(led_l==0x08){led_l=0x80;led_r=0x01;}

}
delay(200); //延时
}
P1=0x00;
}
}

❸ 单片机彩灯循环控制程序

ORG 0000H
LJMP MAIN
ORG 4000H
MAIN: MOV A,#0F8H ;用P1低六位控制灯
MOV P1,A
CALL DELAY
CLR A ;取反
MOV P1,A ;点亮下三个,灭上三个
CALL DELAY
LJMP MAIN
DELAY: .......
自己添上吧,很简单
.......
END

❹ 用C语言编写一个单片机控制LED灯闪烁三次的程序,急求!

# P1上接LED等。
#include "reg51.h"

void delayms(unsigned int x)
{
int i,j;
for(i=x;i>0;i--)
for(j=0;j<120;j++);
}

void main(void)
{
char i;
for(i=0;i<6;i++)

{
P1 = ~P1;
delayms(1000);
}
while(1);

}

❺ 8051单片机舞台灯光程序

给你基于DMX512协议的调光灯程序,做做参考吧。 #include <AT892051.H>
#define uchar unsigned char
//**********************************************************
//定义全局变量给中断程序使用。
//**********************************************************
uchar t0_mark=0x00, data1=0x00, data2=0x00, data3=0x00,data4=0x00,data5, data6, data7;
uchar da1=0x80, da2=0x80, da3=0x80,da4=0xff,mark=0x00,add=0x00;
unsigned int time;
//*******************************************************
//捕捉“开始”函数 如果捕捉成功 则启动串口 DMX512协议部分。。。。加注
//*******************************************************
void start_bit(void)
{ uchar a;
TR0=1;
while (P3_0==1); // 等待传输暂停
TR0=0;
TH0=0x00;
TL0=0x00;
TR0=1;
while (P3_0==0); //等待端口变化
if(TL0>0x80||TH0>0x00) //大于96微秒
{ REN=1;
time=0x00;
while(RI==0);
data1=SBUF;
if (mark==0x00)
{ for( a=add; a!=0x00; a--)
{while(RI==0);<br> RI=0; } //启动串口
while(RI==0);
data5=SBUF;
RI=0;
while(RI==0);
data6=SBUF;
RI=0;
while(RI==0);
data7=SBUF;
RI=0;
REN=0;
if(data1==0x00)
{ data2=(data5&0xfc)>>2;
data3=(data6&0xfc)>>2;
data4=(data7&0xfc)>>2; }
}
else { for( a=0xff; a!=0x00; a--)
{
while(RI==0);
RI=0; } //启动串口
for( a=add; a!=0x00; a--)
{while(RI==0);<br> RI=0; } //启动串口
while(RI==0);
data5=SBUF;
RI=0;
while(RI==0);
data6=SBUF;
RI=0;
while(RI==0);
data7=SBUF;
RI=0;
REN=0;
if(data1==0x00)
{ data2=(data5&0xfc)>>2;
data3=(data6&0xfc)>>2;
data4=(data7&0xfc)>>2; }
}
P1=0xff;
if(P3_5==0)
{ mark=0x00;
add=P1; }
else { mark=0xff;
add=P1; } }
} void main(void)
{
P3=0x00;
P3_0=1;
P3_1=1;
P3_5=1;
P1=0xff;
if(P3_5==0)
{ mark=0x00;
add=P1; }
else { mark=0xff;
add=P1; }
SCON=0x88;
ACC=PCON;
ACC=ACC+0x80;
PCON=ACC; //串口方式2
TMOD=0x21; // 定时器0方式1 定时器1方式8
TH1=0x80; //60个周期中断一次
TL0=0x80;
TR1=1;
IE=0x8a; //允许允许T0中断
do {
do {
start_bit();
}
while(REN==0); }
while(1) ;
}

//****************************************
//定时器T0 16bit
//****************************************
void t0_irq(void) interrupt 1
{ t0_mark++;
time++;
if (time>0x500)
{ time=0x00;
data2=0x00;
data3=0x00;
data4=0x00; }
}
//***************************************
//定时器T1 方式2 自动重装, PWM 200Hz
//***************************************
void t1_irq(void) interrupt 3
{ if(da1==0x00)
{P3_2=0; }
else {da1--;<br> P3_2=1; }
if(da2==0x00)
{P3_3=0; }
else {da2--;<br> P3_3=1;}
if(da3==0x00)
{P3_4=0; }
else {da3--;<br> P3_4=1;}
if(da4==0x00)
{ da1=data2;
da2=data3;
da3=data4;
da4=0x40; }
da4--;
}

❻ 80c51单片机 彩灯控制器程序

你的要求也太高了吧,还是请一个软件工程师给你做啦。我们在网上回答也没有报酬,现在设计个软件也是要很多钱的。
我有个万能跑马灯程序,有10种闪灯样式,其实你只用把灯的摆放顺序打乱也可获得想要的发光样式。
#include <REG52.H>

unsigned char RunMode;
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i<count;i++)
for(j=0;j<120;j++);
}

unsigned char code LEDDisplayCode[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, //0~7
0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF};

void Display(unsigned char Value)
{
P3 = LEDDisplayCode[Value];
}

void LEDFlash(unsigned char Count)
{
unsigned char i;
bit Flag;
for(i = 0; i<Count;i++)
{
Flag = !Flag;
if(Flag)
Display(RunMode);
else
Display(0x10);
Delay1ms(100);
}
Display(RunMode);
}

unsigned char GetKey(void)
{
unsigned char KeyTemp,CheckValue,Key = 0x00;
CheckValue = P2&0x32;
if(CheckValue==0x32)
return 0x00;

Delay1ms(10);
KeyTemp = P2&0x32;
if(KeyTemp==CheckValue)
return 0x00;

if(!(CheckValue&0x02))
Key|=0x01;
if(!(CheckValue&0x10))
Key|=0x02;
if(!(CheckValue&0x20))
Key|=0x04;
return Key;
}

unsigned int TimerCount,SystemSpeed,SystemSpeedIndex;
void InitialTimer2(void)
{
T2CON = 0x00; //16 Bit Auto-Reload Mode
TH2 = RCAP2H = 0xFC; //重装值,初始值 TL2 = RCAP2L = 0x18;
ET2=1; //定时器 2 中断允许
TR2 = 1; //定时器 2 启动
EA=1;
}

unsigned int code SpeedCode[]={ 1, 2, 3, 5, 8, 10, 14, 17, 20, 30,
40, 50, 60, 70, 80, 90, 100, 120, 140, 160,
180, 200, 300, 400, 500, 600, 700, 800, 900,1000};//30
void SetSpeed(unsigned char Speed)
{
SystemSpeed =SpeedCode[Speed];
}

void LEDShow(unsigned int LEDStatus)
{
P1 = ~(LEDStatus&0x00FF);
P0 = ~((LEDStatus>>8)&0x00FF);
}

void InitialCPU(void)
{
RunMode = 0x00;
TimerCount = 0;
SystemSpeedIndex = 10;

P1 = 0x00;
P0 = 0x00;
P2 = 0xFF;
P3 = 0x00;
Delay1ms(500);
P1 = 0xFF;
P0 = 0xFF;
P2 = 0xFF;
P3 = 0xFF;
SetSpeed(SystemSpeedIndex);
Display(RunMode);
}

//Mode 0
unsigned int LEDIndex = 0;
bit LEDDirection = 1,LEDFlag = 1;
void Mode_0(void)
{
LEDShow(0x0001<<LEDIndex);
LEDIndex = (LEDIndex+1)%16;
}
//Mode 1
void Mode_1(void)
{
LEDShow(0x8000>>LEDIndex);
LEDIndex = (LEDIndex+1)%16;
}
//Mode 2
void Mode_2(void)
{
if(LEDDirection)
LEDShow(0x0001<<LEDIndex);
else
LEDShow(0x8000>>LEDIndex);
if(LEDIndex==15)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%16;
}
//Mode 3
void Mode_3(void)
{
if(LEDDirection)
LEDShow(~(0x0001<<LEDIndex));
else
LEDShow(~(0x8000>>LEDIndex));
if(LEDIndex==15)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%16;
}

//Mode 4
void Mode_4(void)
{
if(LEDDirection)
{
if(LEDFlag)
LEDShow(0xFFFE<<LEDIndex);
else
LEDShow(~(0x7FFF>>LEDIndex));
}
else
{
if(LEDFlag)
LEDShow(0x7FFF>>LEDIndex);
else
LEDShow(~(0xFFFE<<LEDIndex));
}
if(LEDIndex==15)
{
LEDDirection = !LEDDirection;
if(LEDDirection) LEDFlag = !LEDFlag;
}
LEDIndex = (LEDIndex+1)%16;
}

//Mode 5
void Mode_5(void)
{
if(LEDDirection)
LEDShow(0x000F<<LEDIndex);
else
LEDShow(0xF000>>LEDIndex);
if(LEDIndex==15)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%16;
}

//Mode 6
void Mode_6(void)
{
if(LEDDirection)
LEDShow(~(0x000F<<LEDIndex));
else
LEDShow(~(0xF000>>LEDIndex));
if(LEDIndex==15)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%16;
}

//Mode 7
void Mode_7(void)
{
if(LEDDirection)
LEDShow(0x003F<<LEDIndex);
else
LEDShow(0xFC00>>LEDIndex);
if(LEDIndex==9)
LEDDirection = !LEDDirection;
LEDIndex = (LEDIndex+1)%10;
}

//Mode 8
void Mode_8(void)
{
LEDShow(++LEDIndex);
}

void TimerEventRun(void)
{
if(RunMode==0x00)
{
Mode_0();
}
else if(RunMode ==0x01)
{
Mode_1();
}
else if(RunMode ==0x02)
{
Mode_2();
}
else if(RunMode ==0x03)
{
Mode_3();
}
else if(RunMode ==0x04)
{
Mode_4();
}
else if(RunMode ==0x05)
{
Mode_5();
}
else if(RunMode ==0x06)
{
Mode_6();
}
else if(RunMode ==0x07)
{
Mode_7();
}
else if(RunMode ==0x08)
{
Mode_8();
}
}

void Timer2(void) interrupt 5 using 3
{
TF2 = 0; //中断标志清除( Timer2 必须软件清标志!)
if(++TimerCount>=SystemSpeed)
{
TimerCount = 0;
TimerEventRun();
}
}
unsigned char MusicIndex = 0;
void KeyDispose(unsigned char Key)
{
if(Key&0x01)
{
LEDDirection = 1;
LEDIndex = 0;
LEDFlag = 1;
RunMode = (RunMode+1)%9;
Display(RunMode);
}
if(Key&0x02)
{
if(SystemSpeedIndex>0)
{
--SystemSpeedIndex;
SetSpeed(SystemSpeedIndex);
}
else
{
LEDFlash(6);
}
}
if(Key&0x04)
{
if(SystemSpeedIndex<28)
{
++SystemSpeedIndex;
SetSpeed(SystemSpeedIndex);
}
else
{
LEDFlash(6);
}
}
}
main()
{
unsigned char Key;
InitialCPU();
InitialTimer2();

while(1)
{
Key = GetKey();
if(Key!=0x00)
{
KeyDispose(Key);
}
}
}

❼ 单片机闪烁小灯程序怎么写

#include<reg52.h>
#defineuintunsignedint
sbitD0=P0^0;
main()
{
while(1)
{
inti,j;
D0=0;
for(i=0;i<100;i++)
for(j=0;j<670;j++);
D0=1;
for(i=0;i<100;i++)
for(j=0;j<670;j++);
}

}

上面是基于51系列单片机写的,D0是小灯的IO 口,在While循环中控制高低电平(写0或1)就能实现小灯闪烁。

❽ 单片机控制led彩灯,想要设计一个按下按钮,彩灯暂停的程序,应该如何设计,汇编语言,请哪位大侠帮帮我

可以用外部中断来控制;如果单片机中断是低有效,将按钮设置成按下时为低电平,触发中断,在中断中设置一个标志位,然后退出中断;主程序来判断这个标志位,如果为1,则退出led跑灯程序; 如果为0,则继续跑灯。如果单片机中断是高有效,将按钮设置成按下时为高电平,同理。 设置一个全局变量a,并且赋值a=0,一旦有按钮按下,则进入中断,并且a赋值为1,即a=1;在主程序中判断a的值,如果为0,则执行跑灯;若为1,则停止。

❾ 一个花样流水灯单片机程序(要求1,3,5,7灯亮,2,4,6,8灯亮然后全灭)

先把P1口全部接低电平。

ORG 0000H。
AJMP START。
ORG 0040H。
AA:MOV P1,#55H。


ACALL DELAY。
MOV P1,#0AAH。
ACALL DELAY。
MOV P1,#00H。


ACALL DELAY。
AJMP AA。

DELAY:MOV R5,#256。
LOOP2:MOV R4,#256。
LOOP1:NOP。
NOP。


DJNZ R4,LOOP1。
DJNZ R5,LOOP2。
RET。

单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。

在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。

它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。

单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。

❿ 51单片机流水灯程序

程序如下:

#include <reg52.h>

sbit led1 = P2^0;

sbit led2 = P2^1;

sbit led3 = P2^2;

sbit led4 = P2^3;

sbit led5 = P2^4;

sbit led6 = P2^5;

sbit led7 = P2^6;

sbit led8 = P2^7;


void main()

{

int i,j;

//点亮第一个灯

led1 = 1;

led2 = 0;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//延时1秒

for(i = 0;i < 110; ++i)

{

for(j = 0; j < 1000; ++j)

{

;//什么也不做

}

}

//点亮第二个灯

led1 = 0;

led2 = 1;

led3 = 0;

led4 = 0;

led5 = 0;

led6 = 0;

led7 = 0;

led8 = 0;

//点亮剩余的灯

//省略……

while(1);

}

(10)舞灯单片机程序扩展阅读:

流水灯几点说明:

void:因为该延时函数不需要返回值,所以写为void

delay1s:该函数的函数名,命名需要符合C语言的标识符命名规则。

(): 不需要传入参数,所以括号中为空

至此我们可以把流水灯程序写为以下形式:

阅读全文

与舞灯单片机程序相关的资料

热点内容
微信为什么不能设置加密认证 浏览:668
邓伦参加密室逃脱视频 浏览:391
音频压缩编码标准 浏览:300
常提到的app是表示什么 浏览:261
天津程序员传销 浏览:349
下班之后的程序员 浏览:73
检测支持ssl加密算法 浏览:344
衢州发布新闻什么APP 浏览:85
中国移动长沙dns服务器地址 浏览:251
wifi密码加密了怎么破解吗 浏览:598
linux命令cpu使用率 浏览:69
linux实用命令 浏览:240
传奇引擎修改在线时间命令 浏览:110
php取域名中间 浏览:898
cad命令栏太小 浏览:831
php开发环境搭建eclipse 浏览:484
qt文件夹名称大全 浏览:215
金山云服务器架构 浏览:233
安卓系统笔记本怎么切换系统 浏览:622
u盘加密快2个小时还没有搞完 浏览:95