51单片机左移后向右移
答:也就是说,在执行右移的时候,是先灭,亮第1颗,再灭一段时间,再右移下一颗,再灭一段时间,右移下一颗………define LED_Num 8 if(cnt<LED_Num) P0=~(1<<cnt);else P0=~(1<<(LED_Num-1<<1)-cnt);for(i=0;i<30000;i++);cnt=++cnt%(LED_Num-1<<1);另外,以后不要用 ...
答:include<reg52.h> define uchar unsigned char uchar m=0,i=0;void main(){ TMOD|=0x01; //定时器0工作方式为1 TH0=(65536-50000)/256; //装初值 TL0=(65536-50000)%256;EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1; //开启定时器 while(1); //等待中断 }...
答:51单片机C语言实现循环8个流水灯左移三次,后右移三次。例程:include<reg51.h> //51单片机头文件#include <intrins.h> //包含有左右循环移位子函数的库#define uint unsigned int //宏定义#define uchar unsigned char //宏定义sbit beep=P2^3;void delay(uint z) //延时函数,z的取...
答:/*单片机,用定时中断实现每隔0.2秒让接在P1口的8个小灯从左往右循环点亮。*/ #include #include #define uchar unsigned char uchar a,b; uchar b=1; uchar a=0xfe; void main() { EA=1;IT1=1;ET0=1; TH0=-5000/256; TL0=-5000%256; TMOD=0x01;...(火星人)2086 ...
答:P1口赋值 0XFE 二进制11111110 也就是第一盏亮其他灭 a=_crol_(a,1); 库函数实现循环 P1=a; 把循环后的值重新付给P1口 } } 以上只是单方向的循环 还缺少延时函数 加在赋值后面 双向循环 可以用左移右移指令 赋值 P1口 A=A<<1 循环左移一位 A=A>>1 循环右移一位 ...
答:点阵太多,需要使用16+16=32个io,建议使用lcd驱动ic,如ht1621之类,51单片机通过三线接口与ic通讯。编程方面,程序需要建立16x16点阵的缓冲,需要修改数据就先修改缓冲数据,然后改变输出。上移可以通过把缓冲按字节移位实现,左移就需要把缓冲数据按位移位,移位完成后再通过lcd driver更新输出。
答:// 延时0.2s j= j<<1; // 左移1位 } j=0x80; // 设置右移初始值j为0x80 for (i=0;i<8;i++){ P1= ~ j;delay02s( );j= j>>1; // 右移1位 } } }
答:MAIN: MOV A,#11111110BLOOP: MOV R0,#7LEFTMOVE: MOV P1,A RL A ACALL DELAY DJNZ R0,LEFTMOVE;【R0等于0后,开始进行右移】 MOV R0,#7RIGHTMOVE: MOV P1,A RR A ACALL DELAY DJNZ R0,RIGHTMOVE;【R0等于0后,开始进行左移】 AJMP LOOP ...
答:可以直接switch case就可以实现任何流水灯喽,不然就用移位嘛,循环移位可以调用函数。
答:C51系列单片机中_crol_指令是循环左移函数,_cror_是循环右移函数,这是51中特有的指令,别的类型单片机就不能使用了。易于程序的移植和通用性考虑个人比较推荐用<< 左移, 右移>>这两个C中的移位符号。
网友评论:
籍奚19261671210:
求51单片机C语言定时中断流水灯(先左移后右移,一直循环),不要延迟的,只能定时中断 -
68986琴吕
: 那就是用定时器啊,定时器计数器累加,到达一定时间就去对串口处理,就是对LED灯做处理
籍奚19261671210:
单片机C程序怎么在这里面左移完了,接右移,要怎么写 -
68986琴吕
: #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char void delay(uint); uchar a, b; void delay(uint x) {uint i, j;for(i = x; i > 0; i--) for(j = 110; j > 0; j--); } void main() {char i;a = 0xfe;while(1) {for (i = 0; i < 8; i++...
籍奚19261671210:
请问我写的单片机八个LED灯左移后再右移的程序错在哪里? -
68986琴吕
: 主要是左移补0或者补1的问题.P1=>>1|0;P1=<<1|1; 补1是灭,补0是亮. 刚好之前写过,看一下和你的不同之处.#include"reg52.h"#define uint unsigned int void delay(uint z) {uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--); }void ...
籍奚19261671210:
C语言编写:51单片机由左往右,再由右往左,来回移动,即先由P1^0闪到P1^7,再由P1^7闪到P1^0. -
68986琴吕
: while(1) {for(i=0;i<8;i++){P1=(1<<i);delay();//延时}for(i=7;i<8;i--){P1=(1<<i);delay();//延时} }
籍奚19261671210:
我这个程序为何实现不了,51单片机流水灯,从左移到右,又从右移到左.单个亮,求大神 -
68986琴吕
: LOOP:MOV P1,ARL AACALL DELAYDJNZ RO,LOOP;【每次执行这个djnz指令,R0都会减一,当r0==0时才会执行 RR A指令,】RR AACALL DELAYSJMP LOOP;【这边跳转到loop时,R0的值是为0的】 可以这样修改: MAIN:MOV A,...
籍奚19261671210:
单片机led左移然后右移循环亮灭的汇编语言 -
68986琴吕
: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV A,#0FEH MOV R2,#8 LOOP1: MOV P0,A LCALL DELAY RL A DJNZ R2,LOOP1 MOV R2,#8 LOOP2: MOV P0,A LCALL DELAY RR A DJNZ R2,LOOP2 SJMP MAIN DELAY: MOV R2,#200 DLY: MOV R3,#250 DJNZ R3,$ DJNZ R2,DLY RET END
籍奚19261671210:
单片机左移>>与右移<<为什么相当于乘除运算 -
68986琴吕
: 具体说是左移n次相当于乘以2的n次方,右移n次相当于除以2的n次方,例如0001B 左移3次就是1000B 十进制1变成了8 也就是1*2^3
籍奚19261671210:
51单片机问题:有一排LED灯,先最左边的亮,然后依次向右移 到了左右后再向左移 如此重复4次 -
68986琴吕
: 你要程序?你用-crol--cror-来移动加for循环来控制次数就行啦
籍奚19261671210:
51单片机如何在一个工程中同时加入循环左移和循环右移, -
68986琴吕
: 这个问题很简单,因为循环左移和循环右移并不相互排斥,可以单独存在,不仅仅在一个工程中,在用一个文件或者同一个程序段中都是可以的.比如. #include<reg51.h> #include<intrins.h> void delay(int a) { int i,j; for(i=0;i<a;i++) for(j=0;j<110;j++); } main() { unsigned char led1=0xfe,led2=0x7f; while(1){P0=_crol_(led1); P1=_cror_(led2); delay(100); }}
籍奚19261671210:
用C语言编写一51单片机程序,做单灯的左移右移,按P1.0——P1.7再从P1.7——P1.0的循环 -
68986琴吕
: 已经测试通过,直接使用,祝成功~#include "reg52.h"#include "intrins.h"#define uchar unsigned char#define uint unsigned int void Delay(uint x) {uint a,b; for(a = x; a > 0; a--) for(b = 115; b > 0; b--); } void main() { uchar Led = 0x01, Direct = 0; ...