51单片机流水灯左右循环
答:单片机的流水灯程序,因为程序就这么写的,决定了流水灯左移7次,再右移7次,结束两个循环后,才能执行下面的while(!key),按键才有效,而在循环过程中,不执行while(!key),所以按键无效。下图画红框内的两个循环。要想按键随时有效,应该把两个移位函数_cror_,_crol_ 放在主程中,检测key也放在...
答:include<intrins.h> define uchar unsigned char define uint unsigned int //延时 void DelayMS(uint x){ uchar i;while(x--){ for(i=0;i<120;i++);} } //主程序 void main(){ uchar i;P2=0x01;while(1){ for(i=0;i<7;i++){ P2=_crol_(P2,1); //P2 的值向左循环移动...
答:{ //--- for(i=0;i<8-j;i++) //内循环8、7、6...0次 { P1=a; //第一次,只有右边1个发光 delay(200);a=_crol_(a,1); //左移一位 } //以上单个LED发光,移位8、7、6...次 //--- a = _crol_(a, j); //左移,第一次,移动0位,以后渐多 //前...
答:include<reg51.h> voiddelay(void){ unsignedinti,j;for(i=0;i<200;i++)for(j=0;j<1000;j++);} voidmain(void){ while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0x...
答:include<reg52.h> include<intrins.h> define unit unsigned int define uchar unsigned char void delay(unit z){ unit x, y;for(x = 100; x > 0; x--) for(y = z; y > 0; y--);} void main(){ uchar temp, i;temp = 0xfe;while(1) { for (i = 0; i < 8...
答:这个流水灯程序最好用数组定义8个状态的灯,这样用for循环就可以实现了。简洁明了,易读性强,也容易理解。include<reg51.h> define uchar unsigned char code uchar ledtab[10]= { 0xff,0xe7,0xc3,0x81,0x00,//中间开始逐渐点亮 0xff,0x7e,0x3c,0x18,0x00//两边开始逐渐点亮 } void ...
答://上面这段改完也不是两边同时向中间流水,只是左到右,左到右的来回流水灯 两边向中间流水,直接用查表法,//11111111B, 01111110B, 10111101B, 11011011B, 11100111B uchar MB[]={0xFF, 0x7E, 0xBD, 0xDB, 0xE7};uchar i=0;while(1){ P1 = MB[i++];if(i>=5) i=0;delayms(...
答:单片机流水灯代码:#include<reg51.h>//51头文件void delay(int t)//定义延时函数{int j;while(t--){for(j=0;j<500;j++);}}void main(){int i;while(1){for(i=0;i<7;i++)//循环点亮LED,到第7个LED延时一会就结束循环。在这个单片机流水灯代码中,假设使用的是8051...
答:KEYR EQU P1.0//改下端口 忘记 p3口 是低还是高了KEYL EQU P1.1LED EQU P0ORG 0000HLJMP MAINORG 000BHLJMP T0ISRORG 0030HMAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-50000) MOV TL0,#LOW(65536-50000) SETB ET0 SETB EA MOV A,#0FEH MOV LED,A MOV...
答:include<reg51.h> define uchar unsigned char sbit key=P1^0;uchar led;void delay(uchar x){ uchar i,j;for(i=0;i<x;i++)for(j=0;j<125;j++);} void disled(){ uchar i,j;led=0xfe;for(j=0;j<2;j++){ for(i=0;i<8;i++){ P0=led;delay(200);P0=0xff;delay(...
网友评论:
胡熊18957317818:
51 单片机一个左右同时向中间流动的流水灯,keil编译通过,就是实现不了.这是为什么? -
68302庄行
: 逻辑错误了,把两个while中的相等改为不相等: a=0xfe; //<<P1 = a; //<< while(1){while(a!=0x7f) //主要错误 while(a==0x7f){//P1=0xfe; //<< //a=P1; //<< delayms(500);a=_crol_(a,1);P1 = a; //<< }while(a != 0xfe) //主要错误 while(a...
胡熊18957317818:
求一个用c语言编译的流水灯程序,要求灯从中间向两边亮 -
68302庄行
: #include<reg52.h> #define uchar unsigned char void delay(z); uchar code t[]={0x18,0x24,0x42,0x81};//这是编码表 void main() {int i=0;while(1)//死循环{for(i=0;i<4;i++)P1=t[i];//取码,我用的P1口,你要用其他的端口你就把取出来的码送给你要用的端口delay(5);}} void delay(z) { int a,i; for(a=0;a<z;a++) for(i=0;i<110;i++); }
胡熊18957317818:
求51单片机C语言定时中断流水灯(先左移后右移,一直循环),不要延迟的,只能定时中断 -
68302庄行
: 那就是用定时器啊,定时器计数器累加,到达一定时间就去对串口处理,就是对LED灯做处理
胡熊18957317818:
51单片机我写的流水灯程序,效果是灯亮依次向左传递无限循环,想知道这段代码哪错了. -
68302庄行
: 每次都是第二个灯亮,不流动?是因为你的temp没有保存移位后的值.这样改改: for(i=1;i<8;i++){temp<<=1;P0=temp;delay()}
胡熊18957317818:
51单片机8位流水灯8种变化程序 -
68302庄行
: 第一种:1个LED发光,循环右移. 第二种:2个LED发光,循环右移. 第三种:3个LED发光,循环右移. 第四种:4个LED发光,循环右移.再改成左移,就又有四种. 这就有八种了.一边移动,一边闪烁; 再改变一下速度;这能有多少种了?
胡熊18957317818:
51单片机流水灯程序 -
68302庄行
: 程序4102错1653误回 #include <reg51.h> #define uchar unsigned char; #define uint unsigned int; void delay(uint x) {uchar i;while(x--){for(i=0;i<120;i++);} } void main() {uchar a=0xfe;while(1){P0=0xfe;for(i=0;i<7;i++){P0=_crol_(P0,1);delay(150) ;}if(a==0xff)答 a=0xfe;}
胡熊18957317818:
51单片机 流水灯 1.3.5.7.2.4.6.8循环亮 -
68302庄行
: 你不都写出来怎么写了吗?哈哈 D1,2,3,4,5,6,7,8 =OFF; D1,8=ON; Delay(5S); D1,2,3,4,5,6,7,8 =OFF; D2,7=ON; Delay(5S) 以此类推
胡熊18957317818:
51单片机流水灯右移?我只知道怎么样左移. -
68302庄行
: c语言的话,左移用<<,右移用>> 循环移位可以调用函数.
胡熊18957317818:
求教大婶们~51单片机单个按键控制流水灯C程序 -
68302庄行
: 很简单啊,只提供一个简单思路, 所以只提供简单的程序,自己理解 char flag=0;viod main() { while(1) { if(key==0 ) //假设0 按下按键 { flag=~flag; } if(flag==0) { leds(); //流水灯函数 } } }
胡熊18957317818:
51单片机用独立按键控制不同流水灯,那个流水灯的循环放哪里?我放流水灯里,不能正常工作?求大神指教 -
68302庄行
: 重点是你要在 “那个流水灯的循环放” 里 放上检测按键的语句,没按键正常循环,有按键要根据按键的值 去做别的(例如转到另外一种流水灯的循环,或者是改变流水模式,具体咋样与你的程序编写方式有关)