c51单片机汇编语言,八个小灯,依次亮灯,间隔0.5s,最后一个点亮后,全部灭掉,请教大神怎么编程?
;如果你的灯在p1端口的话,你试试我的程序 ORG 0000H START:MOV P1,#7EH ACALL DELAY MOV P1,#0BDH ACALL DELAY MOV P1,#0DBH ACALL DELAY MOV P1,#0E7H ACALL DELAY MOV P1,#0FFH ACALL DELAY AJMP START DELAY:MOV R0,#100 ;时间2*50*100*100=1s DEL1:MOV R1,#100 DEL2:MOV R2,#50 DEL3:DJNZ R2,DEL3 DJNZ R1,DEL2 DJNZ R0,DEL1 RET END 你的程序在16进制数的处理上出了错误,你自己在细心看看我的十六位数的处理,好好理解一下,不懂得继续问,asm附件你下载调试一下看看是不是这样的。
单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)?
单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)源代码如下:
#include <reg51.h>
#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;
}
temp=0x80;
for(i=0;i<8;i++) //8个流水灯反向逐个闪动
{
P1=~temp;
delay(100); //调用延时函数
temp>>=1;
}
temp=0xFE;
for(i=0;i<8;i++) //8个流水灯依次全部点亮
{
P1=temp;
delay(100); //调用延时函数
temp<<=1;
}
temp=0x7F;
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++);
}
拓展资料:
单片机又称单片微控制器,它不是执行特定逻辑功能的芯片,而是将计算机系统集成到芯片上的芯片,相当于一个微型的计算机。与计算机相比,单片机缺少I/O设备。
总的来说,是一块芯片变成了一台计算机。它体积小、重量轻、价格低廉、为学习、应用和开发都提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的一个最佳选择。
用单片机的内容编写流水灯从p2.0到p2.7闪烁三次程序
- 谢谢各位了
- 网上很多程序,搜搜吧
stm8s单片机流水灯的汇编语言(要求改程序)高分在线等!
- 1,将时钟设置为外部时钟源2,将一个一个亮变为2个2个亮,即12亮,然后34亮。。。程序如下#include "mapping.inc" #include "STM8S105C_S.inc"segment rommain.l; initialize SPldw X,#stack_endldw SP,X#ifdef RAM0; clear RAM0ram0_start.b EQU $ram0_segment_startram0_end.b EQU $ram0_segment_endldw X,#ram0_startclear_ram0.lclr (X)incw Xcpw X,#ram0_endjrule clear_ram0#endif#ifdef RAM1; clear RAM1ram1_start.w EQU $ram1_segment_startram1_end.w EQU $ram1_segment_endldw X,#ram1_startclear_ram1.lclr (X)incw Xcpw X,#ram1_endjrule clear_ram1#endif; clear stackstack_start.w EQU $stack_segment_startstack_end.w EQU $stack_segment_endldw X,#stack_startclear_stack.lclr (X)incw Xcpw X,#stack_endjrule clear_stack intelmov PB_DDR,#0ffh;PB口输出mov PB_CR1,#0ffh;推挽mov PB_CR2,#00h rcf ;进位清0 ld a,#0ffh next rlc a ;字节循环左移ld PB_ODR,acall delayjra nextinterrupt NonHandledInterruptNonHandledInterrupt.liretdelaypush ccldw y,#5loop1ldw x,#0ffffhloopdecw xjrne loopdecw yjrne loop1pop ccret
- 有偿帮助需要吗
单片机C语言的8盏流水灯程序,定义uchar T一直错为毛啊,我实在是看不出来了?是不是我其他地方写错了?
- 上一句漏分号。sbit LED=P1; 加1分号。
求助会51单片机和keil的大神,写一段流水灯的程序
- 板子上选择四个独立按键,从左到右依次为key1,key2,key3,key4,当按下key1时,流水灯两边向中间收缩3次,间隔3秒后,中间向两边扩展3次,当按下key2时,正向依次亮,间隔3秒后,反向依次亮(各个流水灯亮灭时间大于300ms),万分感谢!
- 按键控制的哦我是做单片机的
汇编菜鸟请教大侠一个51单片机8展流水灯短程序的流程图
- 请根据下列程序写一个流程图ORG 0000HLJMP MAINORG 0030HMAIN :MOV R2,#0 MOV R3,#10 mov P0,#0FFHIDO:MOV DPTR,#TAB MOV A,R2 MOVC A,@A+DPTR MOV P0,A; INC R2; LCALL DELAY; DJNZ R3,IDO LJMP MAINTAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDELAY:MOV R7,#250;D1: MOV R6,#250;D2: DJNZ R6,D2;DJNZ R7,D1;RETEND
- 我不会汇编,
关于单片机流水灯程序的简单问题
- #includereg52.h #includeintrins.h #define uchar unsigned char #define uint unsigned int void DelayMS(uint x) { uchar i; while(x–) { for(i=0;i120;i++); } } void main() { P0=0xfe; while(1) { P0=_crol_(P0,1); P0的值向左循环移动 DelayMS(150); } }要求是循环左移 但为什么移动位置后的灯就都亮着 并且移动一轮后所有灯就 一直亮着了 求大神解析
- 会变0 不过你是51吗 晶振是12MHZ的 一秒就是1200W次上下 你2W1 太少了看不出来的满意请采纳。
这是一个51单片机的流水灯的程序,但是在keil里调试不出效果,望答疑,谢谢,下附有程序
- #includereg52.hunsigned char code table[]={0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe,};void delay() ;main(){ unsigned char i;while(1){for (i=0;i8;i++);{P1=table[i];delay();}}}void delay(){ unsigned int i;for(i=0;i10000;i++);}
- 延时加长一些,或单步调试
51单片机的c语言 左移右移怎么用?想用来控制流水灯,请帮忙写个完整的c程序,参考下,端口随意
- 看看电路图,你的电路图应该是二极管的阴极接了单片机的IO引脚,这样的话,当相应引脚输出低电平时,LE肌丹冠柑攉纺圭尸氦建D会被点亮。左移取反之后
为实现51单片机流水灯先一个一个亮然后两个两个挨着亮下面程序运行一段时间后就会出现问题,
- 还有“D1=D1-(2^i);”是什么意思?#include reg52.h#include intrins.h#define uint unsigned int #define uchar unsigned charvoid delay (uint y);void main(){ uchar D1; uint i,x; while (1){for(i=0;i8;i++) { D1=0xff; D1=D1-(2^i); for (x=0;x8-i ;x++) { P1=D1; delay(500); D1=_crol_(D1,1); } }} }void delay (uint y){ uint m,n; for(m=y;m0;m–) for(n=110;n0;n–);}
- 2与i按位异或
求高手帮忙看一下我的单片机程序为什么不能实现流水灯
- #include REGX51.H#define uchar unsigned charvoid delay50ms(unsigned int j);main() { uchar a,b,i,temp; TMOD=0x01; while(1) { temp=0xfe; P0=temp; delay50ms(20); for(i=1;i8;i++) {a=tempi; b=temp(8-i);P0=a|b;delay50ms(20); } } }void delay50ms(unsigned int j){TR0=1; while(j!=0){ TH0=-(50000256); TL0=-(50000%256); while(TF0!=0); TF0=0; j–; } TR0=0;
- 没看太懂代码,如果是想产生左右逢源效果的话,也许可以这样把main 改改:main() { uchar a,b,i,tempL,tempR; TMOD=0x01; while(1) { tempL=0x01;tempR=0x80; P0=~(tempL|tempR); delay50ms(20); for(i=1;i8;i++) {a=tempLi; b=tempRi;P0=~(a|b);delay50ms(20); } } }