单片机流水灯程序 16

作者&投稿:杭英 (若有异议请与网页底部的电邮联系)
51单片机16路流水灯怎么用C语言写,并求每个步骤的讲解~

我给你个简单的例子:
#include //预处理文件里面定义了特殊寄存器的名称如P1 口定义为P1
void main(void)
{
//定义花样数据
const unsigned char design[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,
0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF,
0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0,
0xE7,0xDB,0xBD,0x7E,0xFF};
unsigned int a; //定义循环用的变量
unsigned char b; //在C51 编程中因内存有限尽可能注意变量类型的使用
//尽可能使用少字节的类型,在大型的程序中很
受用
do{
for (b=0; b<32; b++)
{
for(a=0; a<30000; a++); //延时一段时间
P1 = design[b]; //读已定义的花样数据并写花样数据到P1 口
}
}while(1);
}
程序中的花样数据可以自以去定义,因这里我们的LED 要AT89C51 的P1 引脚为低电平才
会点亮,所以我们要向P1 口的各引脚写数据O 对应连接的LED 才会被点亮,P1 口的八个引
脚刚好对应P1 口特殊寄存器的八个二进位,如向P1 口定数据0xFE,转成二进制就是
11111110,最低位D0 为0 这里P1.0 引脚输出低电平,LED1 被点亮。如此类推,大家不难算
出自己想要做的效果了。
留个邮箱给你发个入门文档

程序基本没大错误,你这个程序执行一次就结束了,要想程序实现无限循环的从P0口到P2口又回到P0口,只需稍加改动。
在主函数定义局部变量的下面加:
while(1)
{

在程序最后加:
}

#include<reg52.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 = 0xff;
P0 = LED;

while(1)
{
delayms(1000);
LED = LED<<1; //循环右移1位,点亮下一个LED

if(LED==0x00)
{
LED=0xff;
}
P0 = LED;
}
}

16个流水灯
org 0000h
ljmp start
org 1000h
start:mov sp,#4fh 堆栈段
MOV R0,#08H 循环6次
mov A,#0feH 123灯亮
ATT: mov P1,A
acall delay
RL A 左移1位
DEC R0 循环次数自减1
CJNE R0,#00H,ATT 自减完后的数和00比较不相等跳到ATT相等往下执行
MOV P1,#0FFH
MOV A,#0F8H
MOV R0,#06H
ATL: MOV P2,A
ACALL DELAY
RL A
DEC R0
CJNE R0,#00H,ATL
MOV P2,#0FFH
AJMP START
delay:MOV R1,#0FFH
LOOP0:MOV R2,#0FFH
LOOP1:nop
nop
NOP
NOP
DJNZ R2,LOOP1
DJNZ R1,LOOP0
ret
END

#include <reg51.h> //包含单片机的头文件
/****************************************
函数功能:延时60ms(3*100*200=60000us)
***************************************/
void delay()
{
unsigned int i,j;
for(i=0;i<500;i++)
for(j=0;j<110;j++) ;
}
/***************************************
函数功能: 主函数
***************************************/
void main()
{
do
{
P0=0xfe; //第一个LED亮
delay();
P0=0xfd;
delay();
P0=0xfb;
delay();
P0=0xf7;
delay();
P0=0xef;
delay();
P0=0xdf;
delay();
P0=0xbf;
delay();
P0=0x7f;
delay();
}
while(1);
}

#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
void delay(uint );
void main()
{
uchar i,temp,frick,k;
while(1)
{
temp=0x01;
P1=~temp;
delay(500);
for(i=0;i<7;i++)
{
temp=temp<<1;
P1=~temp;
delay(500);
}
for(i=0;i<7;i++)
{
temp=temp>>1;
P1=~temp;
delay(500);
}
for(i=0;i<5;i++)
{
frick=0x00;
P1=frick;
delay(500);
k=0xff;
P1=k;
delay(500);
}
}
}
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

#include"reg52.h"
#define uchar unsigned char
uchar n;
void delay(uchar t)
{
uchar t1;
while(t--)
{
for(t1=0; t1<114;t1++);
}
}
void main()
{
whie(1)
{
n=0xfe;
P1=n;
if(P1!=0x00)
{
n=n<<1|0x01;
delay(100);
p1=n;
}
}
}


广东省14751433745: 单片机流水灯程序 16 -
陈子氯氮: #includevoid delayms(unsigned char ms) // 延时子程序 { unsigned char i; while(ms--) { for(i = 0; i < 120; i++); } } main() { unsigned char LED; LED = 0xff; P0 = LED; while(1) { delayms(1000); LED = LED<<1; //循环右移1位,点亮下一个LED if(LED==0x00) { LED=0xff; } P0 = LED; } }

广东省14751433745: 16单片机用八位学号控制流水灯的程序 -
陈子氯氮: 低电平点亮 START:MOV R0,#8 MOV R1,#8 SETB C MOV A,#0FEH MOV P1,A S1:RLC A CALL DELAY MOV P1,A DJNZ R0,S1 SETB C MOV A,#0FEH MOV P2,A S2:RLC A CALL DELAY MOV P2,A DJNZ R1,S2 AJMP START DELAY:MOV R5,#0FFH //改变值变延时时间 LOOP2: MOV R4,#0FFH//改变值变延时时间 LOOP1:DJNZ R4,LOOP1 DJNZ R5,LOOP2RET END

广东省14751433745: 单片机16个流水灯c语言编程问题 -
陈子氯氮: 程序基本没大错误,你这个程序执行一次就结束了,要想程序实现无限循环的从P0口到P2口又回到P0口,只需稍加改动. 在主函数定义局部变量的下面加: while(1) {在程序最后加: }

广东省14751433745: 谁有这样的单片机流水灯程序16盏灯中同时从两端相向点亮交替循环 -
陈子氯氮: P0,P1口1个左移1个右移.

广东省14751433745: 单片机c语言,流水灯,时钟的程序! -
陈子氯氮: 网友您好!流水灯程序如下: #include<reg51.h> sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3; sbit P1_4=P1^4; sbit P1_5=P1^5; sbit P1_6=P1^6; sbit P1_7=P1^7; sbit P3_0=P3^0; sbit P3_1=P3^1; sbit P3_2=P3^2; sbit P3...

广东省14751433745: 求ATmega16流水灯程序 -
陈子氯氮: /******************************************* 文件:sld.C 环境:编译为ICC AVR6.25A,仿真为AVR Studio4.14硬件:ATMEGA16芯片 日期:2008年12月10日功能:驱动开发板上的LED.流水灯 备注:/******************************************/#include...

广东省14751433745: 51单片机,控制流水灯的两种状态程序 -
陈子氯氮: #include<reg51.h> #include<intrins.h> #define uchar unsigned char sbit key=P2^0; bit flag=0; uchar cnt; void t1isr() interrupt 3 { TH1=(65536-50000)/256; TL1=(65536-50000)%256; cnt++; if(cnt>=5){cnt=0;if(flag)P1=_crol_(P1,1);else P1=_cror_...

广东省14751433745: AT89C52单片机制作16*16流水灯显示汉字危的程序? -
陈子氯氮: 流水形式的就是程序中加了延时,你按照危的笔画先在16方阵上找到应该亮的小灯,然后根据共阴还是共阳,设置高低电平就可以了!

广东省14751433745: c51单片机中如何用汇编语言编写流水灯 -
陈子氯氮: 51单片机用汇编语言编写流水灯程序,就是控制多个LED ,使其在特定时间间隔内,只有一个LED 发光,其他熄灭,用这种方式顺序移动点亮LED的位置,就形成了流水灯的效果.以下是程序: ;假设晶振12MHZ,P1控制8个LED低电平亮 ;...

广东省14751433745: 单片机,流水灯c语言程序 -
陈子氯氮: P1_0==0时 ,key()是死循环,程序不会往下走的 ,P1_0==1时只会执行 if(k==0) {i=0x01; for(j=0;j { P2=i;P1_1=!P1_1; i=(i flay();}

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网