写入“2”将D228~D232 D238~D242 D248~D252 D258~D262 D268~D272 D278~D282 分别写入“4”即可 另外 将程序中 “k88”及D200开始的寄存器分别写入不同的值即可变换成 以1s为单位的跑马灯程序
CLR只能对位变量进行操作 你想对P1口全部清除的话,改为:MOV P1,#0 同样 MOV P2,#0 程序最末端处,应加上END DJNZ R2,L1 DJNZ R4,L3 RET END ;告诉编译器,程序结束 时间太晚了,至于程序功能是否正确,就看
这大概是你用到了LED>>1这样的右移指令,这条指令有点缺陷,最高位是填0的,所以达不到循环右移的效果,LED=LED | 0x80 就是为了实现循环右移的目的而增加的一条指令。右移一位后将最高位置1.
因为LED是低平驱动的,初始值0xFE 二进制为 1111 1110,也就是最后一个值为0的灯亮 左移一位变成 1111 1101 同样是为0的灯亮,依次移动 _crol_ 是左移哦,不是右移
3、P1=P1>>1;就是右移,比如现在是0x80,接P1的第7位对应灯亮,下次右移就变成0x40,接P1的第6位对应灯亮.4、两个for循环,第一个是从P1的第0位至第7位轮流显示,第二个for则反过来。
1代表要亮的灯 通过不断右移实现灯的移动 输出的时候把temp取反一下就可以了 这个对应的灯就亮了~ 哈哈
用三极管当开关控制LED,单片机的io口接三极管的基极,外加电源与LED接到集电极和射基去,实现以单片机的小电流控制LED上的大电流
用单片机做跑马灯的一些问题
LED跑马灯和RGB灯带都是LED灯具,但在使用和功能上有一些区别:灯珠数量和布局:LED跑马灯通常采用单个或少量大功率LED灯珠,布局较为密集,而RGB灯带则采用较多数量的小功率LED灯珠,并沿着灯带等间距排列。控制方式:LED跑马灯
如下程序:if(ledi==8){ ledi=0; //到了最后一个灯就换到第一个 //每跑一圈灯就根据预定设置的表格来决定下一圈的跑马速度 speed=speedcode[i];i++;if(i==2)i=0; ?你的速度设置不仅仅就2个呀(10个预
用带驱动IC的灯带,加上控制器就可以实现跑马流水等效果,这些只是简单的LED效果,可以做组合效果,拖尾流星,爆闪,单色流水跑马。等等。比如SK6812灯珠做的灯带。这类灯带都需要控制全彩的全彩控制器来点亮,由控制器给信号
那么用单片机模拟这样的讯号,或许还不如重新做一套您自己想要的功能线路来得舒服。按一次变一次就是给单片机一个触动讯号,进入下一个LED灯号程式。
跑马灯采用查表法,定时用查询式定时器,时间为500ms;I/O口用25只引脚,P0,P1,P2都用8个,P3用P3.0,程序用C语言。为了取得一个较好的观赏效果,对你的要求作了少许修改,你可以用PROTEUS仿真观看效果。程序已仿真
LED灯跑马问题
第一个,你先写个延时函数,延时2秒 第一种,隔两秒 led0 led1亮 隔两秒 led1 led2 亮 依次类推 第二种,led=0x02每隔两秒向左或是右移动一位。
程序,用单片机控制十六个LED流水灯的,并且有模式的,也就是可以让其顺溜逆流,还有同时两个灯三个灯亮或者灭流过去的,还可以加速减速的,反正就十六个灯一排,花样越多越好 程序,用单片机控制十六个LED流水灯的,并且有模式的,也就
1选用合适的单片机和LED灯,将它们连接在电路板上。2在单片机程序中编写代码,控制LED灯的亮灭状态。3在代码中指定LED灯的亮灭顺序,以及延时时间。通常采用循环结构进行控制。4在将代码烧录到单片机之后,启动实验,即可看到
设置8255A芯片的I/O口为输出模式。2. 定义一个变量,用于存储当前亮灯的位置。3. 在程序中通过循环控制每个发光二极管的亮灭,从而实现跑马灯效果。4. 在循环中,每次将该变量加1,并将该变量对16求余,以确保亮灯位置始
include
延时一次为1MS,系统用的是8M晶振,你用的是0.2S,调用时把参数设置为200就行了,你16个灯我不知道你是用8个IO口驱动呢还是16个IO口驱动,驱动跑马灯可以用数据右以左移的方法,也可以用查表法!参考参考吧!void del
1、用单片机控制红黄蓝绿四组共16个LED灯实现跑马灯效果,每两个灯亮的间隔不少于0.2秒。急求,时间
include
C语言的://8个发光二极管循环点亮 include
用 C51 给你写一个吧:假设开关接到P3.0,8个 LED灯 接到P1.0~P1.7,低电平 点亮。ms延时 子程序 书上都有例子,我就不再写出来了。include
首先就是你要轮流点亮,就是将1循环一圈,因为你要全灭一次,所以用到CY。RG 00H SJMP START ORG 30H START:MOV A ,#00 ;//清空A寄存器 SETB C ;//将CY置1,然后带进位左移就会进入将A的b0 MAINLOOP: ;//
|P1口接8个发光二极管共阳 include
51单片机设计跑马灯的程序用(c语言)编写
试验成功的程序:ORG 0000H MOV 30H, #0 MOV 31H, #0 M_LOOP:MOV R2, #8 DISP1:CALL DL CALL SHIFT2 DJNZ R2, DISP1 MOV R2, #8 DISP2:CALL DL CALL SHIFT1 DJNZ R2, DISP2
include "reg51.h"unsigned int YSJS=0;signed char LED=0XFF;void main(void){ TMOD |= 0X10; //定时器1工作于方式1,16位定时器 TH1 = 0XFE; //定时器1定时时间=500uS TL1 = 0X0C;ET1 = 1;
就是把speed的“--”变“++”,初值由“10”变“0”嘛,然后来回切换。define uchar unsigned char define uint unsigned int include
for(i=0;i<23;i++){ P1=LEDA[i]; delay(); }
就改一下这一条 代替 第五条 uchar table[]={0xe7,0xdb,0xbd,0x7e,0xe7,0xdb,0xbd,0x7e};
我给你一个程序,单片机为STC51,晶振为12MHz。跑马灯采用查表法,定时用查询式定时器,时间为500ms;I/O口用25只引脚,P0,P1,P2都用8个,P3用P3.0,程序用C语言。为了取得一个较好的观赏效果,对你的要求作了少许
51单片机 跑马灯程序
//P1外接8 LED 低电平发光.// 列程序 PROTEUS 仿真 功 include
答疑解难 跑马灯程序 ORG 0000H LJMP MAIN ORG 0100H MAIN: JB P0.7,MAIN ;等待开始键按下 LCALL YS ;按键延时 JB P0.7,MAIN MOV A,#7FH ;是开始键按下 则跑马灯开始
|P1口接8个发光二极管共阳 include
/ /* 程序详细功能介绍:做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复
AJMP START START:SETB C ;跑马灯 ,一直循环255次MOV R0,#0FFH MOV A,#0 JX1:RLC A MOV P1,A LCALL DELAY500MS DJNE R0,JX1 SETB C MOV R0,#8 MOV A,#0 JX:RLC A ;P1.0>>>P1.7依次亮1S MOV
include "reg51.h"define uchar unsigned char void delay05s(void){ unsigned char i,j,k;for(i=5;i>0;i--)for(j=200;j>0;j--)for(k=248;k>0;k--);} void main(void){ uchar b;const unsigned cha
请问如何用单片机编写跑马灯程序啊?
|P1口接8个发光二极管共阳 #include unsigned char i; unsigned char temp; unsigned char a,b; void delay(void) { unsigned char m,n,s; for(m=20;m>0;m--) for(n=20;n>0;n--) for(s=248;s>0;s--); } void main(void) { while(1) { temp=0xfe; P1=temp; delay(); for(i=1;i<8;i++) { a=temp<<i; b=temp>>(8-i); P1=a|b; delay(); } for(i=1;i<8;i++) { a=temp>>i; b=temp<<(8-i); P1=a|b; delay(); } } } 扩展资料: Proteus 自从有了单片机也就有了开发系统,随着单片机的发展开发系统也在不断发展。 keil是一种先进的单片机集成开发系统。它代表着汇编语言单片机开发系统的最新发展,首创多项便利技术,将开发的编程/仿真/调试/写入/加密等所有过程一气呵成,中间不须任何编译或汇编。 参考资料来源:百度百科-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 硬件接口电路如下: 哈哈 还满意吗 就请给俺选择(满意选项)吧
51单片机是单片机接触最早的,下边这个程序希望能帮到你。(只有主函数,就不进行硬件什么定义以及头文件包含什么的了) void delay(int times){//延时函数,times控制延时时间 int i, j; for(i = 0; i < times; i++) for(j = 0; j < 210; j++) ; } int main(void){ unsigned char data, i; while(1){ data = P1;//把开关值读回来 for(i = 0; i < 8; i++){ P0 = ~(0x01 << i); //某位为高电平某位对应的灯亮 delay(data);//把读取的开关值用来控制延时 } } }
给个你参考 ******* /* 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。 * 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。 */ /* 程序详细功能介绍: *做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上, *输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。 */ ORG 0000H LJMP START ORG 0030H START: MOV R2,#8 ;左移次数 MOV A,#0FEH ;A的初始值,即 P0.0的L0 点亮 SETB C LOOP: MOV P0,A LCALL DELAY RLC A ;左移流水灯(带进位的左移),即亮点向P0口的高位移动 DJNZ R2,LOOP MOV R2,#8 ;右移次数 LOOP1: RRC A ;右移流水灯 MOV P0,A LCALL DELAY DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#10 ;延时子程序,改变R5,R6,R7 的值,可以改变延时的时间,从而改变流水灯移动速度 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END
#include void Delay10ms(unsigned int c); //延时10ms unsigned char LED; void main() { unsigned char i; LED = 0xFE; //--首先赋值LED--// while (1) { //--LED往左闪烁--// for (i = 0 ;i < 7 ; i++) { //--将LED 的值赋给P0口--// P0 = LED; Delay10ms(50); //延时一下,为了让灯有持续点亮的时间 LED = LED << 1; // 将LED里面的值左移一位,然后重新赋给LED LED = LED | 0x01; // 移位后,前面的位为高电平 } //--LED向右显示--// for (i = 0 ;i < 7 ; i++) { P0 = LED; Delay10ms(50); LED = LED >> 1; // 右移 LED = LED | 0x80; // 移位后,后面的位为高电平 } } } void Delay10ms(unsigned int c) //误差 0us { unsigned char a, b; for (;c>0;c--) { for (b=38;b>0;b--) { for (a=130;a>0;a--); } } }
你用74HC595吧,只用3根线就可以控制了,一个74HC595输出为8位,这样可以控制8个LED,而且每个74HC595都可以级联的,像我这图示例,上面一共有5个74HC595,都是级联的,所以上图实际上3个IO口即可控制5*8=40个LED! 当然,级联的多少,就看你的需要了,呵呵!
不是的。两线的就可以了 。跑流水是根据软件的编程来的
估计是LED驱动电源不良引起的。 一般LED灯点亮发弱光除电压过低外,只有驱动电源和LED灯珠本身光衰引起。如果是一般家用小功率的LED灯发弱光,使用时间较短的话LED灯珠本身光衰可能性极低,通常是LED驱动电源不良导致。
是的,因为DPTR已经自加 1了,所以每次寻址前,A清0 这样 MOVC A,@A+DPTR 和MOVC A,@DPTR效果是一样的
1、LED是高电平亮还是低电平亮,取决于你的电路设置,如果LED负极接地(或者串电阻再接地),则高电平时亮。 2、P1=P1<<1;你的理解是对的。 3、P1=P1>>1;就是右移,比如现在是0x80,接P1的第7位对应灯亮,下次右移就变成0x40,接P1的第6位对应灯亮. 4、两个for循环,第一个是从P1的第0位至第7位轮流显示,第二个for则反过来。