
org 0000h
jmp start
org 0030h
start:
mov p0,#11111110b ; 此时第一个灯亮
call t10s
mov p0,#11111101b ;此时第二个灯亮
call t10s
mov p0,#11111011b
call t10s
mov p0,#11110111b
call t10s
mov p0,#11101111b
call t10s
mov p0,#11011111b
call t10s
jmp start ;此处跳到开始 即 循环
;延时子程序10秒=250usX2X200X100
t10s:mov r5,#100
lpr5:mov r6,#200
lpr6:mov r7,#250
djnz r7,$
djnz r6,lpr6
djnz r5,lpr5
ret
end
把灯的正极接电源正极 即vcc 负极分别接p00-p05
此时 给p0 送0灯就亮 1灯就不亮
程序已经过调试 可用
仿真如下:
给个示例程序看看
/-----------------------------------------------
名称:流水灯
公司:上海浩豚电子科技有限公司
编写:师访
日期:20095
修改:无
内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果
------------------------------------------------/
#include<reg52h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/------------------------------------------------
延时子程序
------------------------------------------------/
void delay(unsigned int cnt)
{
while(--cnt);
}
/------------------------------------------------
主函数
------------------------------------------------/
main()
{
P1=0xfe; //给初始化值 换算成二进制是1111 1110
while(1)
{
delay(30000);//延时程序
P1<<=1; //左移一位 该语句等效于 P1=P1<<1
P1|=0x01; //最后一位补1,该语句等效于 P1=P1|0x01 符号"|"表示"或"
if(P1==0x7f) //检测是否移到最左端?"=="表示检测符号2端的值是否相等
{
delay(30000);
P1=0xfe; //重新赋值
}
}
}
1、霓虹灯广告屏装置PLC 控制梯形图的设计与调试, 该广告屏共有8根灯管,24只流水灯,每4只灯为一组。霓虹灯广告屏装置PLC
2、控制要求:: Ⅰ341212345678Ⅳ56789 (1)该广告屏中间8根灯管亮灭的时序为:第1根亮→2亮→3亮→„„→
第8根亮,时间间隔为1s ,全亮后,显示10s ,再反过来从8→7→„„→1按1s 间隔顺序熄灭,全灭后停亮2s ;再从第8根开始亮,顺序点亮7→6→„„→1,时间间隔1s ,显示5s ,再从1→2→„„→8按1s 间隔顺序熄灭,全灭后停亮2s ,然后重复运行,周而复始。
3、24只流水灯,4个一组分成6组,从Ⅰ→Ⅱ→„„→Ⅵ按1s 时间间隔
依次向前移动,且点亮时每相隔1亮,同时Ⅰ“①、③”灭→Ⅲ“⑨、 ”亮,同时Ⅱ“⑤、⑦”灭„„,如此移动一段时间(如30s )后,再反过来移动一段时间,„„如此循环往复。
4、系统有单步/连续控制,有起动和停止按钮。
5、起动时,灯管和流水灯同时起动,关闭时,可同时也可分别关闭。
6、要求有移位指令的应用
7、在控制要求1中,若要求将全亮后显示10s 改为以05s 间隔同时闪烁5s ,试修改程序。
#include<reg51h> //51系列单片机定义文件
#define uchar unsigned char //定义无符号字符
#define uint unsigned int //定义无符号整数
void delay(uint); //声明延时函数
void main(void)
{
uint i;
uchar temp;
while(1)
{
temp=0x01;
for(i=0;i<8;i++) //8个流水灯逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp<<=1;
}
}
void delay(uint t) //定义延时函数
{
register uint bt;
for(;t;t--)
for(bt=0;bt<255;bt++);
}
跑马灯程序最基本的,c语言还未入门啊!!!
查询方式:
ORG 0000H
AJMP MAIN
MAIN:
MOV P1,#01H
MOV R0,#8
MOV A,P1
XU: RL A
MOV P1,A
ACALL DELAY
DJNZ R0,XU
AJMP MAIN
DELAY:
MOV R0,#0FFH
ONE:MOV R1,#0FFH
TWO:MOV R2,#02H
THE:DJNZ R2,THE
DJNZ R1,TWO
DJNZ R0,ONE(将近1S)
RET
END
中断方式:
org 0000h ;程序从0000开始运行
jmp init;跳到主程序
init:
mov ie,#10000001b ;中断使能
mov ip,#00000001b ;中断优先
mov tcon,#0000000b ;中断为电平触发
main: ;主程序循环点亮
mov p1,#00h ;全亮
lcall delay ;延时一段时间
mov a,#0feh ;每次只亮一个灯。
loop: mov p1,a ;输出到p1
lcall delay ; 延时
rl a ;循环左移。
ajmp loop ; 跳转main继续循环
delay: mov r5,#20 ;延时子程序1闪烁灯调用
d1:mov r6,#20
d2: mov r7,#250
djnz r7,$
djnz r6,d2
djnz r5,d1(时间此处可自行设置)
ORG
0000H
LJMP
MAIN
;转主程序
ORG
001BH
LJMP
IT0P
;转T1中断服务程序
ORG
1000H
;主程序入口
MAIN:
LTB2:
MOV
DPTR,#TAB2
;把数据指针移到TAB2位址
CLR
P13
;猜测是led总开关
MOV
R1,#00H
;清空R1
MOV
A,#00H
;清空A
DEL1:
MOV
SP,#60H
;设置堆栈指针
MOV
B,#0AH
;设置中断执行次数
MOV
TMOD,#10H
;选择T1,定时模式,工作方式1
MOV
TL1,#0B0H
;设置低字节计数初值
MOV
TH1,#3CH
;设置高字节计数初值
SETB
TR1
;启动T1开始计时
SETB
ET1
;T1中断允许
SETB
EA
;开全局中断
HERE1:
SJMP
HERE1
;等待
IT0P:
MOV
TL0,#0B0H
MOV
TH0,#3CH
DJNZ
B,LOOP
;非零跳转,在本程序中就是结束
MOV
B,#0AH
;上一句等于零,执行这一句,设置执行次数
MOVC
A,@A+DPTR
;取出偏移后的数据到寄存器A中
MOV
P0,A
;输出
INC
R1
;偏移量自加1
CJNE
R1,#10H,LOOP2
;判断是否全部取出,不相等跳转
MOV
R1,#00H
;上一句相等就清空R1
LOOP2:
MOV
A,R1
;把偏移量赋值给A
LOOP:
RETI
;中断结束,返回
TAB2:
DB
7FH,3FH,1FH,0FH,07H,03H,01H,00H
DB
80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH
END
;谢谢观赏
12MHz晶振
定时器50ms一次中断
led500ms亮或灭1个
多看书,多看数据手册对你有好处!
以上就是关于51单片机 跑马灯程序全部的内容,包括:51单片机 跑马灯程序、用c语言实现跑马灯循环亮灭、用西门子PLC300设计流水灯,跑马灯的程序是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)