unsigned char PData; //整体结果unsigned char CurrData;//变化的最高位//延时,本函数是非精确延时,若需要精确延迟则需要根据本函数的汇编语句进行精确计算后调整循环体次数void delay(unsigned int ms){

k++){ ;} } } } void main() //假设低电平有效 { int i=0,temp;while(1){ temp=0xFF;for(i=0;i<9;i++){ delay(500); //延时500ms P0=temp;temp<<=1;} } } OK了,楼主这个没问题了

delay(500); //调用延时函数 temp>>=1; } temp=0xFE; for(i=0;i<8;i++) //8个流水灯依次全部点亮 { P2=temp; delay(500); //调用延时函数 temp<<=1; } temp=0x7F;

MAIN:MOV P1,#01111111B ;P1口低电平 对应灯亮 点亮P1.7对应的LED LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况 MOV P1,#10111111B LCALL DLY_500MS ;延时500ms 可以清晰看到每个LED的亮灭情况

for(num1=0;num1<3;num1++) //八个发光二极管从上到下依次被点亮3三次 { for(num=0;num<8;num++) //八个发光二极管依次被点亮 { P1=temp; //点亮一个发光二极管 delay(100); //延时 temp=_crol

1、用精确定时的方法,设置流水灯运行时的时间间隔,延时时间为500MS。2、#include "reg51.h"首先写出单片机的头函数。3、#include "intrins.h"输入位移函数。4、unsigned int count=0,led;定义函数。5、输入主函数,定

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个流水灯依

单片机流水灯C语言程序(8个灯,依次点亮每个灯,延时500MS)

#255 ; 8个led灯不亮 MOV R2, #200 LP2:SETB P1.0 ; 蜂鸣器不响 DJNZ R6,DJNZ R7, $ - 2 DJNZ R2, LP2 MOV P0, #255 ; 8个led灯灭 RET ;--- END

LED = LED|0x80;} else { P2 = LED;LED = LED << 1; // 左移 LED = LED | 0x01;} } void delay(unsigned int b){ unsigned char j;for(b; b > 0; b--) //机器在这里执行需要一段时间

用CD4017外加NE555做脉冲即可。

1. 假设 单片机输出低电平(0) LED 亮;2. 假设晶振为12M,则计数器 计数一次则为1uS;3. 假设你说的LED是一排(8个)都接在单片机P0口;4. 假设你说的是8个都同时亮,同时灭;5. 假设你说的是 亮 1S 然后

很简单,用rand函数和srand函数,这样将得到的值对8取余数,即rand%8,就可以点亮随机的灯了,至于其他如何点亮环节还有延时的你可以自己编写,想学单片机的人是必须学的,我也就不提示了,这只是个思路,要是全给你完整代

1:首先设定一个变量i,可以是从0到3循环的变化,2:再检测一个经过消抖处理的按键,按一下,即i+1 3:当i值为各个值时,执行相应的变换花样。流水灯参考程序 include include define uchar unsigned char uchar j,tmp

单片机 8个LED灯随机闪烁怎么做?

bit key_on=0;//按键标识位,1则有按键按下 void main(void){ uchar i=0;EX0=1;IT0=1;EA=1;P1=0XFF;while(1){ if(key_on){ key_on=0;P1=~(1<

EA=1; //开总中断 ET0=1; //定时器T0中断允许 TMOD=0x01; //使用定时器T0的模式2 TH0=(65536-46083)/256; //定时器T0的高8位赋初值 TL0=(65536-46083)%256; //定时器T0的高8位赋初值 TR0=1;

LED灯的一端接P1口的各各引脚,另一端接地。同时在P1口的每个管脚上加1K的上拉电阻,电阻另一端连接至+5V即可 ORG 0000H AJMP START ORG 0030H START:MOV SP,#07H MOV P1,#00H MOV A,#0AAH LOOP:CPL A MOV

void main(void){ while(1){ P0=0x0f; delay(); //延时 0.5S P0=0xf0; delay();} }

用定时器,每隔0.5秒中断一次,在中断服务程序中用P1和0xff异或再赋值给P1,可实现两组交替亮灭

试编写程序实现:利用89C51单片机的P1口控制8个发光二极管,相临的4个发光二极管为一组,使两组每隔0.5...

Delay(100);p1 = 0x7c;Delay(100);p1 = 0x3e;Delay(100);p1 = 0x1f;Delay(100);} } 用此代码,LED 必须是共阴极接法,也就是高电平点亮。

{ while(1){ P3=0xfe;//第一个灯亮 delay();//延时 P3=0xfd;//第二个灯亮 delay();P3=0xfb;//第三个灯亮 delay();P3=0xf7;//第四个灯亮 delay();P3=0xef;//第五个灯亮 delay();P3=0xdf;//第

P1口接8个LED灯,P3口接4个按键K1~K4,用于控制流水灯的四种效果,仿真图如下。

delay();LED_IO6= 0;delay();LED_IO7= 0;delay();LED_IO8= 0;delay();} //开始灯全灭 void LED_dengmie(void){ LED_IO1 = 1;LED_IO2 = 1;LED_IO3 = 1;LED_IO4 = 1;LED_IO5 = 1;LED_IO6

求一个51单片机的C语言程序,8个LED4种亮法,自上而下,自下而上,高低4位交替亮,一个个灭直到全灭。

#include sbit M=P1^0;void delayms(unsigned char ms) { unsigned int i; while(ms--) { for (i=0 ;i<100;i++); } } main () { unsigned char LED; LED =0xff; P1=LED; while(1) { LED=0xe7; P1=LED; delayms(1000); LED=0xdb; P1=LED; delayms(1000); LED=0xbd; P1=LED; delayms(1000); LED=0x7e; P1=LED; delayms(1000); } }
走马灯的程序到处是吧。给你贴一个杜洋的流水灯,自己参考着改。 /********************************************************************************************* 程序名:    8路流水灯 编写人:    杜洋  编写时间:  2009年5月13日 硬件支持:  STC12C2052 内部RC或外部12MHZ晶振 接口说明:  8个LED彩灯接P1口 修改日志:     NO.1-2009年5月14日 在程序前面加入参数定义项  /********************************************************************************************* 说明: 根据参数设置产生流水LED效果。 /*********************************************************************************************/ #include //51头文件 /*********************************************************************************************/ #define DY_PORT P1 //设置LED连接的I/O组 #define DY_SPEED 100 //设置每一个明亮级的停留时间(值域:0~65535) /********************************************************************************************* bit [自定义名] ; //定义一个位(位的值只能是0或1)例:bit LED #define [代替名] [原名] //用代替名代替原名(可以方便修改常改或调试的值)例:#define LED P1 sbit [自定义名] = [系统位名] ; //自定义系统位名。例:sbit Add_Key = P3 ^ 1; unsigned char [自定义名] ; //定义一个0~255的整数变量.例:unsigned char a; unsigned int [自定义名] ; //定义一个0~65535的整数变量 /*********************************************************************************************/ void delay (unsigned int a){ // 1ms延时程序 unsigned int i; while( --a != 0){ for(i = 0; i < 600; i++);//STC单片机在外部晶振为12MHz时i值上限为600 } //AT89C51单片机在外部晶振为12MHz时i值上限为125 } /*********************************************************************************************/ void main(void){ unsigned int i; unsigned int temp; while(1){ temp=0x01; for(i=0;i<8;i++){ //8个流水灯逐个闪动 DY_PORT=~temp; delay(DY_SPEED); //调用延时函数 temp<<=1; } temp=0x80; for(i=0;i<8;i++){ //8个流水灯反向逐个闪动 DY_PORT=~temp; delay(DY_SPEED); //调用延时函数 temp>>=1; } temp=0xFE; for(i=0;i<8;i++){ //8个流水灯依次全部点亮 DY_PORT=temp; delay(DY_SPEED); //调用延时函数 temp<<=1; } temp=0x7F; for(i=0;i<8;i++){ //8个流水灯依次反向全部点亮 DY_PORT=temp; delay(DY_SPEED); //调用延时函数 temp>>=1; } } } /*********************************************************************************************/
这是只是百点亮P1口的程序 #include void main() { while(1) { p1=0x00; } } 这是闪烁度P1口回程序 #include void delay(unsigned int i) //延时函数 { unsigned int k; for(k=0;k<i;k++); } void main() //主函数 { while(1) //循环函数 { P1=0x00; //点亮P1口 delay(2000); //延时 P1=0xff; //熄灭P1口 delay(200); //延时 } } 纯手打,答对你有帮助的话请采纳 谢谢
交替时间太短,最快也要0.5秒的。用一块74LS164串进并出IC,51的RXD接164的AB端,TXD接164的CP.作为移位脉冲。 ORG 0000H LJMP MAIN ORG 0030H MAIN:MOV SCON,#10H MOV A,#0FEH MOV SBUF,A ST0:JNB TI,ST0 CLR TI CALL DELAY MOV A,#0FDH MOV SBUF,A ST1:JNB TI,ST1 CLR TI CALL DELAY MOV A,#0FBH MOV SBUF,A ST2:JNB TI,ST2 CLR TI CALL DELAY MOV A,#0F7H MOV SBUF,A ST3:JNB TI,ST3 CLR TI CALL DELAY MOV A,#0EFH MOV SBUF,A ST4:JNB TI,ST4 CLR TI CALL DELAY MOV A,#0DFH MOV SBUF,A ST5:JNB TI,ST5 CLR TI CALL DELAY MOV A,#0BFH MOV SBUF,A ST6:JNB TI,ST6 CLR TI CALL DELAY MOV A,#7FH MOV SBUF,A ST7:JNB TI,ST7 CLR TI CALL DELAY LJMP MAIN DELAY:MOV R0,#250 D2:MOV R1,#250 D1:DJNZ R1,D1 DJNZ R0,D2 RET END