51单片机双向跑马灯程序 |
您所在的位置:网站首页 › 双向跑马灯程序图 › 51单片机双向跑马灯程序 |
本文目录一览: 1、用51单片机(汇编语言写)写一个跑马灯程序??知道的帮个忙写写。 2、51单片机跑马灯程序c 3、51单片机跑马灯程序 4、51单片机设计跑马灯的程序用(c语言)编写 用51单片机(汇编语言写)写一个跑马灯程序??知道的帮个忙写写。答疑解难 跑马灯程序 ORG 0000H LJMP MAIN ORG 0100H MAIN: JB P0.7,MAIN ;等待开始键按下 LCALL YS ;按键延时 JB P0.7,MAIN MOV A,#7FH ;是开始键按下 则跑马灯开始运行 LL: MOV P1,A LCALL YS ;显示延时 RR A ;循环右移一位 JB P0.6, LL ;没有按下停止键 则继续跑马 LCALL YS ;按键延时 JB P0.6,LL ;按下停止键 则停止跑马;否则继续跑马 MOV A,#0FFH MOV P1,A SJMP MAIN ;转到程序开始处,等待开始键的按下 YS: MOV R7,#150 ;延时子程序 YL: MOV R6,#200 YY: NOP DJNZ R6,YY DJNZ R7,YL RET END 硬件接口电路如下: 哈哈 还满意吗 就请给俺选择(满意选项)吧 /***************************************** *用P1口接LED *****************************************/ #include //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;i8;i++) //8个流水灯逐个闪动 { P1^=temp; delay(500); //调用延时函数 temp=1; } temp=0x80; for(i=0;i/8个流水灯反向逐个闪动 { P1^=temp; delay(500); //调用延时函数 temp=1; } temp=0xFE; for(i=0;i8;i++) //8个流水灯依次全部点亮 { P1=temp; delay(500); //调用延时函数 temp=1; } temp=0x7F; for(i=0;i/8个流水灯依次反向全部点亮 { P1=temp; delay(500); //调用延时函数 temp=1; } } } void delay(uint t) //定义延时函数 { register uint bt; //register为寄存器变量 即将无符号整形变量bt放在CPU的寄存器中而不是放在内存中 因为该 变量使用频率高 这样可以提高执行效率 for(;t;t--) for(bt=0;bt255;bt++); } 51单片机跑马灯程序不好意思,延时用了楼上的。keil下编译OK。假设P1接灯。 ORG 00H SJMP START ORG 30H START: MOV A ,#00 SETB C MOV R0,#9 ;从左到右 LOOP1: RLC A MOV P1, A ACALL DELAY DJNZ R0, LOOP1 ;从右到左 MOV R0,#9 LOOP2: RRC A MOV P1, A ACALL DELAY DJNZ R0, LOOP2 SJMP START DELAY: MOV R6,#20 DELAY_0:MOV R5,#255 DJNZ R5,$ DJNZ R6,DELAY_0 RET END 这个程序比较简单了。再精简,只能精简一句,将MOV P1,A 放在DELAY函数里。这样减少一行。 简单介绍一下: 首先就是你要轮流点亮,就是将1循环一圈,因为你要全灭一次,所以用到CY。 RG 00H SJMP START ORG 30H START: MOV A ,#00 ;//清空A寄存器 SETB C ;//将CY置1,然后带进位左移就会进入将A的b0 MAINLOOP: ;//大循环起始 MOV R0,#9 ;设置移位次数,要灭一次,所以设置为9 ;从左到右 LOOP1: RLC A ;带进位左移一次;第一次移位结果为01 MOV P1, A ;将A中值放入P1点亮对应LED;该句可放在DELAY里,然后从右到左也去掉该句 ACALL DELAY ;延时,保持灯亮一段时间,自己根据实际情况调整一下。 DJNZ R0, LOOP1 ;循环,点亮下一个灯,最后一次,A为0,将全灭一次,CY为1 ;从右到左 MOV R0,#9 ;设置循环次数 LOOP2: ;循环起始表示 RRC A ;带进位右移,第一次结果为80H MOV P1, A ;更新P1点亮对应LED ACALL DELAY ;延时,保持灯亮一段时间 DJNZ R0, LOOP2 ;循环,点亮下一个灯 SJMP MAINLOOP ;循环,重新开始下一轮 如果你是管脚输出低LED才亮,只需将MOV A ,#00 和SETB C改为MOV A, #0FFH和CLR C即可。 方案2:位寻址区00做标志,为0从左到右,该标志为1从右到左 ORG 00H SJMP START ORG 30H START: MOV A ,#00 SETB C MOV R0,#9 CLR 00H LOOP1: RLLED: JB 00H, RRLED RLC A AJMP DISP RRLED: RRC A DISP: MOV P1, A ACALL DELAY DJNZ R0, LOOP1 CPL 00H AJMP START DELAY: MOV R6,#20 DELAY_0:MOV R5,#255 DJNZ R5,$ DJNZ R6,DELAY_0 RET END 下面是方案1的流程图,这种流程图不知怎么写好,而且写出来基本是对每行的代码的解释。 51单片机设计跑马灯的程序用(c语言)编写|P1口接8个发光二极管共阳 #include AT89X51.H unsigned char i; unsigned char temp; unsigned char a,b; void delay(void) { unsigned char m,n,s; for(m=20;m0;m--) for(n=20;n0;n--) for(s=248;s0;s--); } void main(void) { while(1) { temp=0xfe; P1=temp; delay(); for(i=1;i8;i++) { a=tempi; b=temp(8-i); P1=a|b; delay(); } for(i=1;i8;i++) { a=tempi; b=temp(8-i); P1=a|b; delay(); } } } 扩展资料: Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。 参考资料来源:百度百科-51单片机 标签: 51单片机双向跑马灯程序 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |