导航:首页 > 操作系统 > 单片机循环彩灯

单片机循环彩灯

发布时间:2022-03-12 08:21:26

1. 用AT89C51单片机做循环彩灯实验

我用的是每50msT1溢出中断一次#include<reg52.h>#include<intrins.h>#define LedPort P1#define uchar unsigned char#define uint unsigned intsbit led=P1^0;uchar temp1=0xfe,temp2=0xbf;uchar flag,timeNum;void Init(){ TMOD=0x01; TH1=(65536-50000)/256; TL1=(65536-50000)%256; EA=1; ET1=1; TR1=1;}void main(){ Init(); while(1) { }}void timer1() interrupt 3{ TH0=(65536-50000)/256; TL0=(65536-50000)%256; timeNum++; if(timeNum==10) { timeNum=0; if(flag<8) { LedPort=temp1; temp1=_crol_(temp1,1); } else if(flag>=8&&flag<15) { LedPort=temp2; temp2=_cror_(temp2,1); } else if(flag==15) { LedPort=0; } else if(flag==16) { LedPort=0xff; } flag++; if(flag==17) flag=0; }}

2. 这是个单片机控制循环彩灯程序,哪位高手具体解释下这个程序,实现的彩灯花样有哪几种

DB 01H,03H,07H,0FH,1FH,3FH,7FH,0FFH,0FEH,0FCH DB 0F8H,0F0H,0E0H,0C0H,80H,00H,0FFH,00H,0FEH DB 0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH,0BFH,0DFH DB 0EFH,0F7H,0FBH,0FDH,0FEH,00H,0FFH,00H 这个是彩灯循环花样 其中把十六进制数换成二进制的 是一的位彩灯就亮。比如第一个01H换成二进制就是00000001,所以是第一个灯亮,依此可推出彩灯循环花样

3. 51单片机循环彩灯12个彩灯依次亮

跑马灯IC 或直接成品的单片。

4. 基于51单片机的循环彩灯控制设计

老兄,东西不复杂的,自己思考,别碰到1+1的问题也要来问。要给你画流程,没人有那么多时间的,

硬件:51用p1口接电阻驱动三级管,用三极管驱动二极管动作。
软件:网上很多现成的资料,自己去整理。
;************;
;小灯控制程序;
;************;
;
;************;
;中断入口程序;
;************;
;
ORG 0000H ;程序执行开始地址
LJMP START ;跳至START执行
ORG 0003H ;外中断0中断入口地址
RETI ;中断返回(不开中断)
ORG 000BH ;定时器T0中断入口地址
RETI ;中断返回(不开中断)
ORG 0013H ;外中断1中断入口地址
RETI ;中断返回(不开中断)
ORG 001BH ;定时器T1中断入口地址
RETI ;中断返回(不开中断)
ORG 0023H ;串行口中断入口地址
RETI ;中断返回(不开中断)
;
;************;
; 初始化程序 ;
;************;
;
CLEAR: MOV 20H,#00H ;20H单元内存清0(闪烁标志清0)
SETB 00H ;20H.0位置1(上电时自动执行闪烁功能1)
RET ;子程序返回
;
;************;
; 主 程 序 ;
;************;
;
START:ACALL CLEAR ;调用初始化子程序
MAIN: LCALL KEYWORK ;调用键扫描子程序
JB 00H,FUN0 ;20H.0位为1时执行FUN0
JB 01H,FUN1 ;20H.1位为1时执行FUN1
JB 02H,FUN2 ;20H.2位为1时执行FUN2
JB 03H,MAIN ;备用
AJMP MAIN ;返回主程序MAIN
;
;************;
; 功能程序 ;
;************;
;第1种闪烁功能程序
FUN0: MOV A,#0FEH ;累加器赋初值
FUN00:MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延时
JNB ACC.7,MAIN ;累加器最高位为0时转MAIN
RL A ;累加器A中数据循环左移1位
AJMP FUN00 ;转FUN00循环
;
;第2种闪烁功能程序
FUN1:MOV A,#0FEH ;累加器赋初值
FUN11:MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延时
JZ MAIN ;A为0转MAIN
RL A ;累加器A中数据循环左移1位
ANL A,P1 ;A同P1口值相与
AJMP FUN11 ;转FUN11循环
;
; 第3种闪烁功能程序
FUN2:MOV A,#0AAH ;累加器赋初值
MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延时
CPL A ;A中各位取反
MOV P1,A ;累加器值送至P1口
LCALL DL05S ;延时
AJMP MAIN ;转MAIN
;************;
; 扫键程序 ;
;************;
;
KEYWORK:MOV P3,#0FFH ;置P3口为输入状态
JNB P3.0,KEY0 ;读P3.0口,若为0转KEY0
JNB P3.1,KEY1 ;读P3.1口,若为0转KEY1
JNB P3.2,KEY2 ;读P3.2口,若为0转KEY2
JNB P3.3,KEY3 ;读P3.3口,若为0转KEY3
RET ;子程序返回
;
;闪烁功能0键处理程序
KEY0:LCALL DL10MS ;延时10毫秒消抖
JB P3.0,OUT0 ;P3.0为1,子程序返回(干扰)
SETB 00H ;20H.0位置1(执行闪烁功能1标志)
CLR 01H ;20H.1位清0
CLR 02H ;20H.2位清0
CLR 03H ;20H.3位清0
OUT0:RET ;子程序返回
;
; 闪烁功能1键处理程序
KEY1:LCALL DL10MS
JB P3.1,OUT1
SETB 01H ;20H.1位置1(执行闪烁功能2标志)
CLR 00H
CLR 02H
CLR 03H
OUT1:RET
;
;闪烁功能2键处理程序
KEY2:LCALL DL10MS
JB P3.2,OUT2
SETB 02H ;20H.2位置1(执行闪烁功能3标志)
CLR 01H
CLR 00H
CLR 03H
OUT2:RET
;
;闪烁功能(备用)键处理程序
KEY3:LCALL DL10MS
JB P3.3,OUT3
SETB 03H ;20H.3位置1(执行备用闪烁功能标志)
CLR 01H
CLR 02H
CLR 00H
OUT3:RET
;
;************;
; 延时程序 ;
;************;
;0.5毫秒延时子程序,执行一次时间为513微秒
DL512:MOV R2,#0FFH
LOOP1: DJNZ R2,LOOP1
RET
;
;10毫秒延时子程序(调用20次0.5毫秒延时子程序)
DL10MS:MOV R3,#14H
LOOP2: LCALL DL512
DJNZ R3,LOOP2
RET
;
;延时子程序,改变R4寄存器初值可改变闪烁的快慢(时间为15×25毫秒)
DL05S:MOV R4,#0FH
LOOP3: LCALL DL25MS
DJNZ R4,LOOP3
RET
;
;25毫秒延时子程序,用调用扫键子程序延时,可快速读出功能按键值
DL25MS:MOV R5,#0FFH
LOOP4:LCALL KEYWORK
DJNZ R5,LOOP4
RET
END ;程序结束

5. 单片机彩灯循环控制程序(汇编程序)

既然有人答过C语言的,我就写个汇编的吧。
有点长,放在我的网络空间了:
http://hi..com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/5adeb99112822680a877a415.html

6. 单片机彩灯循环控制程序

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

7. 8051单片机,用P0口控制8个LED实现循环彩灯。

跑马灯。网上一大把。
我就解释下间隔一秒的那个,时间常数。
看你用的定时器方式。一般用方式1。若频率是24mhz,机器周期为0.5us。所以计数次数为1s/0.5us=200000次超过了范围。所以用循环。可以50000循环4次或其他次数。算出技术初值。

8. 单片机程序设计 循环彩灯

我用的是每50msT1溢出中断一次
#include<reg52.h>
#include<intrins.h>
#define LedPort P1
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^0;
uchar temp1=0xfe,temp2=0xbf;
uchar flag,timeNum;
void Init()
{
TMOD=0x01;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
EA=1;
ET1=1;
TR1=1;
}
void main()
{
Init();
while(1)
{
}
}
void timer1() interrupt 3
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
timeNum++;
if(timeNum==10)
{
timeNum=0;
if(flag<8)
{
LedPort=temp1;
temp1=_crol_(temp1,1);
}
else if(flag>=8&&flag<15)
{
LedPort=temp2;
temp2=_cror_(temp2,1);
}
else if(flag==15)
{
LedPort=0;
}
else if(flag==16)
{
LedPort=0xff;
}
flag++;
if(flag==17)
flag=0;
}
}也可以用编码表的方式,把灯亮灭的情况放在数组里,中断里再用

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

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

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

10. 求用单片机制作的循环彩灯原理图及程序

不用154这么麻烦吧,直接把16个灯分别串1K电阻 从P1+P2口就接到行了
#include"reg52.h"

void delay(unsigned int m)
{
unsigned int j=0;
while(m--)for(j=0;j<125;j++){;}
}

void mian(void)
{
while(1)
{
P1=0x01;delay(500);
P1=0x02; delay(500);
P1=0x04; delay(500);
P1=0x08; delay(500);
P1=0x10; delay(500);
P1=0x20; delay(500);
P1=0x40; delay(500);
P1=0x80; delay(500);

P1=0x00;

P2=0x01;delay(500);
P2=0x02; delay(500);
P2=0x04; delay(500);
P2=0x08; delay(500);
P2=0x10; delay(500);
P2=0x20; delay(500);
P2=0x40; delay(500);
P2=0x80; delay(500);

P2=0x00;

}
}

阅读全文

与单片机循环彩灯相关的资料

热点内容
源码微信小程序搭建 浏览:278
linux远程桌面连接命令 浏览:859
adams教程pdf 浏览:264
Arm和单片机区别 浏览:559
阿里云服务器绑定主机头 浏览:949
游戏手机什么最好用安卓 浏览:11
江苏程序员怎么样 浏览:510
捉妖股选股公式源码 浏览:541
胜利油田的社保用什么app 浏览:460
lru算法java 浏览:129
数据分析系统源码 浏览:539
论语繁体pdf 浏览:517
直上指标源码 浏览:193
pythongeohash使用 浏览:348
二维热力图python 浏览:553
如何度过程序员菜鸟阶段 浏览:505
python子图标题显示不出来 浏览:538
linux怎么看连接服务器的ip 浏览:709
windows命令行copy 浏览:65
都匀工会卡绑定什么购物App 浏览:274