1. 如何编写单片机上流水灯来回流的程序
/*-----------------------------------------------
名称:流水灯
内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
/*------------------------------------------------
延时子程序
------------------------------------------------*/
void delay(unsigned int cnt)
{
while(--cnt);
}
/*------------------------------------------------
主函数
------------------------------------------------*/
main()
{
P1=0xfe; //给初始化值 换算成二进制是1111 1110
while(1)
{
delay(30000);//延时程序
P1<<=1; //左移一位 该语句等效于 P1=P1<<1
P1|=0x01; //最后一位补1,该语句等效于 P1=P1|0x01 符号"|"表示"或"
if(P1==0x7f) //检测是否移到最左端?"=="表示检测符号2端的值是否相等
{
delay(30000);
P1=0xfe; //重新赋值
}
}
}
2. 如何用单片机实现流水灯,从一依次亮到八,再从八依次亮回一,一直循环
有个想法, 放一个字节LED做标志位,可位寻址。 每一位代表一个灯。
对字节LED附初值1,做一个200mS的时钟,每200ms对字节LED值做左移1位指令(汇编可循环)。
主程序中位寻址判断字节LED的bit(0-7)点亮相应的灯。或者直接P0=LED
纯想法、还没试过,感觉好玩,呵呵。 好像上述灯流的方式不对,不过可以改。。。
3. 求!! 如何用C51单片机中断系统实现循环五遍流水灯以后再循环10次闪烁
这个程序很简单的,只要掌握了循环表达方式就可以实现。首先,编写流水灯的循环函数,其次使用for语句进行循环。完成后可以修改画质后同样方法实现闪烁。
4. 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);
}
}
}
5. 如何用单片机实现流水灯,从一依次亮到八,再从八依次亮回一,一直循环
用GPIO寄存器比如PA、PB、PC这类的整段寄存器。配合循环、移位和延时(软硬都可以)操作,就能很优雅地实现。
单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。相当于一个微型的计算机,和计算机相比,单片机只缺少了I/O设备。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。
6. 单片机如下电路,让显示灯从上往下依次点亮,不断循环。
/* 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。 * 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。 */ /* 程序详细功能介绍: *做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上, *输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。 */ ORG 0000H LJMP START ORG 0030H START: MOV R2,#8 ;左移次数 MOV A,#0FEH ;A的初始值,即 P0.0的L0 点亮 SETB C LOOP: MOV P0,A LCALL DELAY RLC A ;左移流水灯(带进位的左移),即亮点向P0口的高位移动 DJNZ R2,LOOP MOV R2,#8 ;右移次数 LOOP1: RRC A ;右移流水灯 MOV P0,A LCALL DELAY DJNZ R2,LOOP1 LJMP START DELAY: MOV R5,#10 ;延时子程序,改变R5,R6,R7 的值,可以改变延时的时间,从而改变流水灯移动速度 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET END
7. 单片机如何控制流水灯每三秒循环一次
for循环三次后,执行while(1); ,这是一条死循环语句,相当于暂停指令,停止在此处。因单片机没有暂停指令,只好用这行语句代替了。
如果3次后,需要保持亮或灭,可以换一下:
led=1;
led=0;这两行就行了。
在实现流水灯之前,我们有必要提一点,C51代码在写之前,要参考电路图来写。拿流水灯来说,我们来看图二,LED灯,也就是二极管,八只LED的正极通过一根总线接在+5V的电压上,再看图一,可知八只LED灯的负极接在LED、P2的8个I/O口上。根据二极管的导通条件可知,在单片机的IO口输出低电平时,才能点亮LED灯。
8. 单片机AT89C51单片机流水灯修改成先亮一个后亮两个一直循环到亮八个怎么改
根据你的格式那就这样改吧:
主函数while(1)里面改成
P2=(P2<<1)|0x01;
delay500ms();
if(P2==0xFF)
P2=0x00;
9. 51单片机流水灯依次点亮循环两次怎么实现只循环两次!
#include<reg52.h> // 这是下图的程序,可以仿真 试试
#define uchar unsigned char
#define uint unsigned int
uchar i,t;
uchar code table[]={0xf6,0xed,0xdb,0xf6,0xed,0xdb}; // 发光二极管循环点亮可以有很多方法
uchar code tabled[]={0xaa,0x55,0xaa,0x55,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
void delay(uint z) // 延时程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void main()
{
t=30;
while(1)
{
t++;
if(t==100) t=10;
for(i=0;i<20;i++) // 发光二极管 循环亮
{
P1=tabled[i];
delay(250); // 调用延时程序
}
}
}