设计一个具有8个LED灯,要求从右向左依次点亮一秒后熄灭,循环往复的单片机程序。跪求

如题所述

第1个回答  2017-11-30
#include<reg51.h>#include <intrins.h> void delayms(unsigned char ms) // 延时子程序{ unsigned char i; while(ms--) { for(i = 0; i < 120; i++); }} main(){ unsigned char LED; LED = 0xfe; P0 = LED; while(1) { delayms(250); LED = _crol_(LED,1); //循环右移1位,点亮下一个LED P0 = LED; }} REG51.H中定义的SFR:/* BYTE Register */sfr P0 = 0x80;sfr P1 = 0x90;sfr P2 = 0xA0;sfr P3 = 0xB0;sfr PSW = 0xD0;sfr ACC = 0xE0;sfr B = 0xF0;sfr SP = 0x81;sfr DPL = 0x82;sfr DPH = 0x83;sfr PCON = 0x87;sfr TCON = 0x88;sfr TMOD = 0x89;sfr TL0 = 0x8A;sfr TL1 = 0x8B;sfr TH0 = 0x8C;sfr TH1 = 0x8D;sfr IE = 0xA8;sfr IP = 0xB8;sfr SCON = 0x98;sfr SBUF = 0x99; /* BIT Register *//* PSW */sbit CY = 0xD7;sbit AC = 0xD6;sbit F0 = 0xD5;sbit RS1 = 0xD4;sbit RS0 = 0xD3;sbit OV = 0xD2;sbit P = 0xD0; /* TCON */sbit TF1 = 0x8F;sbit TR1 = 0x8E;sbit TF0 = 0x8D;sbit TR0 = 0x8C;sbit IE1 = 0x8B;sbit IT1 = 0x8A;sbit IE0 = 0x89;sbit IT0 = 0x88; /* IE */sbit EA = 0xAF;sbit ES = 0xAC;sbit ET1 = 0xAB;sbit EX1 = 0xAA;sbit ET0 = 0xA9;sbit EX0 = 0xA8; /* IP */ sbit PS = 0xBC;sbit PT1 = 0xBB;sbit PX1 = 0xBA;sbit PT0 = 0xB9;sbit PX0 = 0xB8; /* P3 */sbit RD = 0xB7;sbit WR = 0xB6;sbit T1 = 0xB5;sbit T0 = 0xB4;sbit INT1 = 0xB3;sbit INT0 = 0xB2;sbit TXD = 0xB1;sbit RXD = 0xB0; /* SCON */sbit SM0 = 0x9F;sbit SM1 = 0x9E;sbit SM2 = 0x9D;sbit REN = 0x9C;sbit TB8 = 0x9B;sbit RB8 = 0x9A;sbit TI = 0x99;sbit RI = 0x98;instric.h中定义的内函数有:extern void _nop_ (void);extern bit _testbit_ (bit);extern unsigned char _cror_ (unsigned char, unsigned char);extern unsigned int _iror_ (unsigned int, unsigned char);extern unsigned long _lror_ (unsigned long, unsigned char);extern unsigned char _crol_ (unsigned char, unsigned char);extern unsigned int _irol_ (unsigned int, unsigned char);extern unsigned long _lrol_ (unsigned long, unsigned char);extern unsigned char _chkfloat_(float);extern void _push_ (unsigned char _sfr);extern void _pop_ (unsigned char _sfr);此程序使用了内函数实现,也可以自己用移位操作实现。#include<reg51.h>Void delay(unsigned char ms){ unsigned int i; While(ms--) {for(i=0;i<120;i++);}}Main(){unsigned char Led,mid1,mid2; Led=0xfe; P0=Led; While(1){mid1=Led>>7; mid2=Led<<1; Led=mid1|mid2; delay(250); P0=Led;}
第2个回答  2017-11-20
可以参考郭天祥的视频教学,里面有应用例程
第3个回答  2017-11-04

不知道你是哪个大学的,给你c语言的吧,这个好歹兼容

复制出来真的不好看...建议多练练,对图敲一遍,这个东西多做就熟悉了,这个做大创或比赛很有用,汇编语言看情况,不搞硬件不推荐。

底下是复制的。

9          #include <reg52.h>

10          

11          void delay(void)

12          {

13   1              unsigned int i;

14   1              for(i=0;i<30000;i++);

15   1              

16   1      }

17          

18          void main(void)

19          {

20   1              int i;

21   1              while(1)

22   1              {

23   2                      P1=0xfe;

24   2                      delay();

25   2                      for(i=0;i<8;i++)

26   2                      {

27   3                       P1=(P1<<1)|0X01;

28   3                       if(P1==0XFF) P1=0XFE;

29   3                       delay();

30   3                      }

31   2              }

32   1      }

不知道为什么给我推荐一个13年的回答让我写....

第4个回答  2017-10-22
/**************************************************************************************
* LED闪烁的简单试验 *
* 延时实现p2口LED流水灯效果 (用循环移位指令) *
* 连接方法: JP11(P2)和JP1(LED灯) 用8PIN排线连接起来 *
* *
***************************************************************************************/
#include <reg51.h> //此文件中定义了51的一些特殊功能寄存器
#include <intrins.h>

void delayms(unsigned char ms)
// 延时子程序
{
unsigned char i;
while(ms--)
{
for(i = 0; i < 120; i++);
}
}

main()
{
unsigned char LED;
LED = 0xfe; //0xfe = 1111 1110
while(1)
{
P2 = LED;
delayms(250);
LED = LED << 1; //循环右移1位,点亮下一个LED "<<"为左移位
if(P2 == 0x00 ) {LED = 0xfe; } // 0xfe = 1111 1110

}
}
第5个回答  2017-08-18
先看下你的硬件电路是怎么样的

单片机用汇编做一个控制8个LED灯泡从左到右依次点亮,最后全部亮,再全部...
while(1){ P0=0xfe;DelayMS(150);for(s=8;s>1;s--){ P0=_crol_(P0,1); \/\/P0 的值向左循环移动 DelayMS(150);} P0=0x00;DelayMS(150);p0=0xff;DelayMS(150);

用c语言编写单片机流水灯程序,(8个发光二极管从左至右循环点亮)
while(1){ P3=0xfe;\/\/第一个灯亮 delay();\/\/延时 P3=0xfd;\/\/第二个灯亮 delay();P3=0xfb;\/\/第三个灯亮 delay();P3=0xf7;\/\/第四个灯亮 delay();P3=0xef;\/\/第五个灯亮 delay();P3=0xdf;\/\/第六个灯亮 delay();P3=0xbf;\/\/第七个灯亮 delay();P3=0x7f;\/\/第八个灯亮...

...八盏发光二极管从左向右依次逐个点亮后再丛右向左逐个灭灯(延时1s...
START:MOV A,#0FFH CLR C MOV R1,#8 这里是二极管个数 MOV P1,#00H 用p1口输出给二极管 MOV P2,A 中断用的p2口,所以这里先给各位置一 WAIT_A:JB P2.0,WAIT_B 这是等待p2.0,看开关按钮有没有送入低电平 JMP LEFT 如果按下按钮开关,送入低电平,就跳到LEFT让二极...

C语言控制单片机,控制八个流水灯从左到右依次亮,最后又从右到左依次亮...
假设P1接8 个LED,高电平时LED点亮,主程序如下:void main(void){ uchar i;while(1){ for(i=0;i<7;i++){ P1=1<<i;delay_ms(500);} for(i=0;i<7;i++){ P1=0x80>>i;delay_ms(500);} } }

单片机的跑马灯C程序如何编写八个LED灯依次点亮而且速度渐变的代码
while(1) { for(j = 0; j < 8; j++) { P1 = 255; \/\/全灭, P1外接LED, 是低电平发光.delay_ms(500); \/\/稍等片刻.for(i = 0; i < 8; i++) { P1 <<= 1;delay_ms(900 - 100 * j); \/\/延时渐短 } } } } \/\/--- ...

...1.用单片机控制8个LED灯,8个LED灯从左到右依次点亮一
while(1){recy=0xfe;for(k=1;k<=8;k++){ P1=recy;Delay(50000);recy=recy<<1;} }

单片机C语言编程:让8个LED流水灯以0.2s时间间隔从左到右依次点亮然后重...
include<intrins.h> void delay(unsigned int z );void main(){ unsigned int a;unsigned char b=0xfe;for(a=0;a<8;a++){ P1=b;\/\/P1口接8个LED灯 delay(200);b=_crol_ (b,1);} } void delay(unsigned int z){ unsigned int i;for(;z>0;z--) \/\/延迟时间自己算吧 for(...

控制8个LED灯,完成从左到右依次点亮,然后从右到左依次熄灭,魂环10次...
P0=led; led=led<<1; delay(200); } led=0x80; for(j=0;i<8;i++) { P0=led; led=(led>>1)|0x80; delay(200); } } P0=0xff; while(1);}

求解,用一个开关控制八个LED灯间隔一秒依次点亮,点亮后不熄灭,用汇
KEY EQU P1.0 ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN:MOV TMOD,#01H MOV TH0,#HIGH(65536-50000)MOV TL0,#LOW(65536-50000)SETB ET0 SETB EA MOV A,#FEH MOV P0,A MOV R2,#20 JB KEY,JNB KEY,SETB TR0 SJMP T0ISR:CLR TR0 MOV TH0,#HIGH(65536-50000)...

51单片机开发板八个led灯依次点亮(就是流水灯)然后再全部
600);D7=0;delay(600);} } 延时函数delay的实现如下:void delay(uint z){ uint x,y;for(x=100;x>0;x--){ for(y=z;y>0;y--){ } } 这段代码实现了8个LED灯的流水点亮效果,先点亮第一个LED,等待600毫秒后,再点亮第二个LED,依此类推,直到所有LED都点亮,然后循环重复。

相似回答