导航:首页 > 操作系统 > 单片机彩灯控制器

单片机彩灯控制器

发布时间:2022-04-25 07:58:19

A. C语言单片机,彩灯控制器的设计,读程序回答问题。

//稍微改了一下加了一个暂停键,中断方式,你需要将该键接到P3.2
#include<reg51.h>
//包含单片机寄存器的头文件
#include
<intrins.h>
/*****************************
函数功能:延时一段时间
*****************************/
unsigned
char
L[8]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};
unsigned
char
L1[8]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
bit
pause;
void
ex0isr()
interrupt
0
{
pause=~pause;
}
void
delay1s(unsigned
int
i)
{
unsigned
int
j;
while(i--)
{
for(j=0;j<=151;j++){;}
}
while(pause);//实现暂停,键按一下暂停,再按一下恢复。
}
/*****************************
函数功能:主函数
*****************************/
void
main(void)
{
unsigned
char
i,j;
P0
=
0x00;
P1
=
0x00;
P2
=
0x00;
P3
=
0x00;
pause=0;
while(1)
{
for(j=0;j<8;j++)
{
P0=L[j];
delay1s(100);
};
for(j=0;j<8;j++)
{
P1=L[j];
delay1s(100);
};
for(j=0;j<8;j++)
{
P2=L[j];
delay1s(100);
};
for(i=0;i<8;i++)
{
P3=L[i];
delay1s(100);
};
for(j=0;j<8;j++)
{
P0=L1[j];
delay1s(100);
};
for(j=0;j<8;j++)
{
P1=L1[j];
delay1s(100);
};
for(j=0;j<8;j++)
{
P2=L1[j];
delay1s(100);
};
for(i=0;i<8;i++)
{
P3=L1[i];
delay1s(100);
};
}
}

B. 以单片机为核心,设计一个节日彩灯控制器,设计要求如下:在单片机的p0口接有8个发光二极管作为指示灯

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
uchar key,led=0xfe;
void delay(uchar a)
{
uchar i,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
main()
{
while(1)
{
key=P1&0x0f;
switch(key)
{
case 0x0e:
P0=0xff;
delay(200);
P0=0x00;
delay(200);
break;
case 0x0d:
P0=0x00;
break;
case 0x0b:
P0=led;
led=_crol_(led,1);
delay(100);
break;
case 0x07:
P0=led;
led=_cror_(led,1);
delay(100);
break;
default:break;
}
}
}

C. 设计一个节目彩灯控制器,在单片机的p0口接有8个发光二极管作为指示灯,p1.0~p1.3接有4个按键开关。

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
sbit key1=P1^0;
sbit key2=P1^1;
sbit key3=P1^2;
sbit key4=P1^3;
uchar led=0xfe,led1=0x00;
void delay(uchar a)
{
uchar i;
while(a--)for(i=0;i<120;i++);
}
main()
uchar keyval=0;
{
while(1)
{
if(key1==0);
{
while(key1==0);
keyval=1;
}
if(key2=0);
{
while(key2==0);
keyval=2;
}
if(key3==0);
{
while(key3==0);
keyval=3;
}
if(key4==0);
{
while(key4==0);
keyval=4;
}
switch(keyval)
{
case 1:
P0=led1;
led1=~led1;
delay(100);
break;
case 2:
P0=0xff;
break;
case 3:
P0=led;
led=_crol_(led,1);
delay(100);
break;
case 4:
P0=led;
led=_cror_(led,1);
delay(100);
break;
}
}
}

D. 以单片机为核心,设计一个节日彩灯控制器

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char mask;
unsigned int cnt;
uchar tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80} ;
uchar num[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff} ;
uchar cod[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00} ;
uchar tmpled[50]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80,0X81,0X82,
0X84,0X88,0X90,0XA0,0XC0,0XC1,0XC2,0XC4,0XC8,0XD0,
0XE0,0XE1,0XE2,0XE4,0XE8,0XF0,0XF1,0XF2,0XF4,0XF8,
0XF9,0XFA,0XFC,0XFD,0XFE,0XFF,0XFF,0X00,0XFF,0X00};
void delay(uchar x)
{
int i;
while(x--)
{
for(i=0;i<148;i++);
}
}

void main(void)
{
int j;
uchar i, k, m, n, s, q, t, r,a,b,c,d,e,f,g,h,p,u,v,w, l,o,x,y,z;

for(i=0;i<8;i++) //流水灯
{
P2=0;
P1=tab[i];
delay(500);
}
P1=0;
for(k=0;k<8;k++)
{
P2=tab[k];
delay(500);
}
P2=0;

for(m=0;m<8;m++) //跑马灯
{
P1=num[m];
delay(500);
}
for(n=0;n<8;n++)
{
P2=num[n];
delay(500);
}

for(s=0;s<8;s++) //跑马灯
{
P1=cod[s];
delay(500);
}
for(q=0;q<8;q++)
{
P2=cod[q];
delay(500);
}
for(r=0;r<8;r++)
{
P1=tab[r];
delay(50);
}
P1=0;
for(t=0;t<8;t++)
{
P2=tmpled[t];
delay(50);
}

for(a=0;a<8;a++)
{
P1=tab[a];
delay(50);
}
P1=0;
for(b=8;b<15;b++)
{
P2=tmpled[b];
delay(50);
}

for(c=0;c<8;c++)
{
P1=tab[c];
delay(50);
}
P1=0;
for(d=15;d<21;d++)
{
P2=tmpled[d];
delay(50);
}

for(e=0;e<8;e++)
{
P1=tab[e];
delay(50);
}
P1=0;
for(f=21;f<26;f++)
{
P2=tmpled[f];
delay(50);
}

for(g=0;g<8;g++)
{
P1=tab[g];
delay(50);
}
P1=0;
for(h=26;h<30;h++)
{
P2=tmpled[h];
delay(50);
}

for(p=0;p<8;p++)
{
P1=tab[p];
delay(50);
}

P1=0;
for(u=30;u<33;u++)
{
P2=tmpled[u];
delay(50);
}

for(v=0;v<8;v++)
{
P1=tab[v];
delay(50);
}
P1=0;
for(w=33;w<35;w++)
{
P2=tmpled[w];
delay(50);
}

for(l=0;l<8;l++)
{
P1=tab[l];
delay(50);
}
P1=0;
for(o=35;o<36;o++)
{
P2=tmpled[o];
delay(50);
}
for(t=0;t<8;t++)
{
P1=tmpled[t];
delay(50);
}
for(b=8;b<15;b++)
{
P1=tmpled[b];
delay(50);
}
for(d=15;d<21;d++)
{
P1=tmpled[d];
delay(50);
}
for(f=21;f<26;f++)
{
P1=tmpled[f];
delay(50);
}
for(h=26;h<30;h++)
{
P1=tmpled[h];
delay(50);
}
for(u=30;u<33;u++)
{
P1=tmpled[u];
delay(50);
}
for(w=33;w<35;w++)
{
P1=tmpled[w];
delay(50);
}
for(o=35;o<36;o++)
{
P1=tmpled[o];
delay(50);
}

for(j=0;j<5;j++) //闪烁
{
P1=P2=0x00;
delay(500);
P1=P2=0xff;
delay(1000);
delay(1000);
}
}

给你这样一个程序先看懂,再改造,有问题可以问我

E. 以单片机为核心,设计一个节日彩灯控制器,控制24个灯

将按键扫描插在正反流水的循环体内,检测到按键按下时,用break退出
否则,24个灯循环一次,好几秒,期间按任何按键都 不起作用

F. 彩灯控制器的设计与制作(单片机C语言),求原理图和程序!!!

#include#include#defineucharunsignedchar#(uintz);main(){ucharaa;while(1){aa=0xfe;P1=aa;delay(100);while(1){aa=_crol_(aa,1);P1=aa;delay(100);}}}voiddelay(uintz){uintx,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}

G. 以单片机为核心控制器设计一个多功能彩灯控制器

51单片机 12MHz晶振 使用P1端口控制

电路:

#include<at89x51.h>

#defineLEDP1

voiddelay1s(void)
{
unsignedchara,b,c;
for(c=167;c>0;c--)
for(b=171;b>0;b--)
for(a=16;a>0;a--);
}
voiddelay50ms(void)
{
unsignedchara,b;
for(b=173;b>0;b--)
for(a=143;a>0;a--);
}
voidmain()
{
unsignedchari;
while(1)
{
LED=0xff;//8个二极管全暗
delay1s();
for(i=1;i;i<<=1)//D0-D7
{
LED=~i;
delay50ms();
}
delay1s();
for(i=0x80;i;i>>=1)//D7-D0
{
LED=~i;
delay50ms();
}
delay1s();
for(i=1;i;i<<=2)//D0-D6
{
LED=~i;
delay50ms();
}
for(i=2;i;i<<=2)//D1-D7
{
LED=~i;
delay50ms();
}
delay1s();
for(i=2;i;i<<=2)//D1-D7
{
LED=~i;
delay50ms();
}
for(i=1;i;i<<=2)//D0-D6
{
LED=~i;
delay50ms();
}
delay1s();
}
}

H. 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);
}
}
}

I. 用单片机设计彩灯控制器设计

8路彩灯也可以呀电路图很简单照课本抄
程序如下
ORG 0000H
SJMP MAIN
ORG 0030H
MAIN:
MOV TMOD,#21H;设定T0为16位定时模式T1为8位自动重装计数模式
SETB TR0;开定时器
SETB TR1
MOV R7,#4;设置N路彩灯这里设置为4路
MOV R6,#4
MOV R5,#4
MOV A,#00H
LOOP:
MOV P1,A;从做到右逐次点亮
RL A
INC A
ACALL MAIN0;调用延时
DJNZ R7,LOOP
MAIN1:MOV A,#0FFH
MOV P1,A
RR A
SUBB A,#08H;各路彩灯在这里设置立即数不同
ACALL MAIN0
DJNZ R6,MAIN1
MAIN2:MOV A,#00H
MOV P1,A
CPL A
ACALL MAIN0
DJNZ R5,MAIN2
LJMP MAIN
MAIN0:MOV DPTR,#15536;设定T0定时50ms的初值
MOV TL0,DPL
MOV TH0,DPH
MOV TL1,#236;设定t1计数20次即20*50ms=1s
MOV TH1,#236
JNB TF0,$;?0ms未到等待
CLR TF0;?0ms到清除标志位
CPL P3.5
JNB TF1,MAIN0;20次未到继续计数
CLR TF1
RET
这个写的急没调试如果不可以下面的顺序要自己调也就是先闪烁再逐个点亮熄灭延时都是一秒……
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
MOV P1,#0FFH
MOV A,#0FFH
MOV R4,#8
MOV R3,#9
MAIN1:
CPL A
MOV P1,A
LCALL AA
DJNZ R4,MAIN1
MAIN2:
RL A
INC A
MOV P1,A
LCALL AA
DJNZ R3,MAIN2
MOV R3,#9
MAIN3:
RR A
MOV P1,A
DEC A
LCALL AA
DJNZ R3,MAIN3
LJMP MAIN
AA:
MOV R7,#2
AA1:MOV R6,#250
AA2:MOV R5,#250
AA3:
NOP
NOP
DJNZ R5,AA3
DJNZ R6,AA2
DJNZ R7,AA1
RET

J. 基于单片机的彩灯循环控制器设计

由于工作比较忙,所以只能给你讲个大概的思路!
循环发光,奇,偶发光,用三个键来分别控制,按下那个键就怎么发光。
循环发光就是I/O端口依次有输出就可以了,每个输出端口延时就可以了。
奇发光和偶发光就是跳一个端口输出就可以了,中间也用延时。这两个程序要分开来写,不要放在一起搅合,到时候自己都分不清楚了。
彩灯的显示时间间隔可以设置2个键来控制,一个加,一个减。他们都是用来控制延时参数的。

阅读全文

与单片机彩灯控制器相关的资料

热点内容
猎人宝宝攻击命令 浏览:159
操作系统是编译原理吗 浏览:646
云服务器迁移后 浏览:260
excel格式转换pdf 浏览:987
登录器一般存在哪个文件夹 浏览:535
中兴光猫机器码算法 浏览:330
android响应时间测试 浏览:940
java编程思想第四版答案 浏览:888
如何对nbt编程 浏览:885
mscpdf 浏览:948
文件夹d盘突然0字节可用 浏览:272
吃火腿肠的解压场面 浏览:339
卫星锅加密教程 浏览:792
php7的特性是什么 浏览:469
编译类高级语言源代码运行过程 浏览:177
科普中国app怎么分享 浏览:87
51单片机与32单片机比较 浏览:422
SQL加密存储解密 浏览:507
电气工程师把程序加密 浏览:797
解压切东西动画版 浏览:965