p1口接8个发光二极管,通过编程实现至少3种花样循环显示的编程与电路图。单片机89c51,先谢了!

如题所述

/*******************************************
文件:sld.C
环境:编译为ICC AVR6.25A,仿真为AVR Studio4.14
硬件:ATMEGA16芯片
日期:2008年12月10日
功能:驱动开发板上的LED。流水灯
备注:
/******************************************/
#include <D:\开发板\OK100E\程序\avr程序\OK100E.H>
/*******************************************
函数名称: One_led
功 能: 点亮或者熄灭指定的LED
参 数: number--指定的LED
light--为TRUE的时候为点亮LED,为FALSE的时候为熄灭LED
返回值 : 无
/********************************************/
void One_led(uchar number,uchar light)
{
uchar i;
if(light==TRUE) //点亮操作
{
PORTB&=~BIT(number); //输出数据
PORTC|=BIT(LEDLK); //更新数据
Delayms(5); //调整时序
PORTC&=~BIT(LEDLK); //锁存数据
}
else
{
PORTB|=BIT(number); //输出数据
PORTC|=BIT(LEDLK); //更新数据
Delayms(5); //调整时序
PORTC&=~BIT(LEDLK); //锁存数据
}
}
/*******************************************
函数名称: All_led
功 能: 点亮或者熄灭全部LED
参 数: light--为TRUE的时候为点亮全部LED,为FALSE的时候为熄灭全部LED
返回值 : 无
/********************************************/
void All_led(uchar light)
{
if(light)
{
PORTB&=~ALLLED; //ALLLED=0xFF,使全部LED都亮
PORTC|=BIT(LEDLK); //输出数据
Delayms(5); //调整时序
PORTC&=~BIT(LEDLK); //锁存数据
}
else
{
PORTB|=ALLLED; //ALLLED=0xFF,使全部LED都灭
PORTC|=BIT(LEDLK); //输出数据
Delayms(5); //调整时序
PORTC&=~BIT(LEDLK); //锁存数据
}
}

/*******************************************
函数名称: main
功 能: 流水灯
参 数: MS--点亮相邻LED的时间间隔,单位是毫秒
返回值 : 无
/********************************************/
void main()
{
Board_init();
PORTC|=BIT(BEEP);
while(1)
{
uchar i;
for(i=0;i<8;i++) //循环8次,8个LED依次点亮
{
All_led(FALSE); //全部熄灭
One_led(i,TRUE); //点亮指定的LED
Delayms(200); //延时指定的时间
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-03-28
授之以渔如下:
流水灯:让P1口一位为低,如置0XFE。然后左移或右移(<</>>).判断CY是否为1.然后反向。
其它花样与此一样。可以举一反三。
第2个回答  2011-03-28
啊哈哈,就是顺序执行程序。很简单的,追问

三种循环哦!

追答

是啊,几种都可以,左移,右移。闪动。隔行,都可以

本回答被网友采纳

p1口接8个发光二极管,通过编程实现至少3种花样循环显示的编程与电路图...
uchar i;for(i=0;i<8;i++) \/\/循环8次,8个LED依次点亮 { All_led(FALSE); \/\/全部熄灭 One_led(i,TRUE); \/\/点亮指定的LED Delayms(200); \/\/延时指定的时间 } } }

用89C51单片机设计多功能低频函数信号发生器,能产生方波、正弦波、三角...
在AT89S51的P2口接5个按扭,通过软件编程来选择各种波形、幅值电压和频率,另有3个P2口管脚接TEC6122芯片,以驱动数码管显示电压幅值和频率,每种波形对应一个按钮。此方案的有点是电路原理比较简单,实现起来比较容易。缺点是,采样频率由单片机内部产生故使整个系统的频率降低。 1、波形发生器技术指标 1)波形:方波、正弦...

单片机设计家电状态检测电路
如P3.6、P3.7分别是WR、RD信号,当微片理机外接RAM或有外部I\/O口时,它们被用作第二功能,不能作为通用I\/O口使用,只要一微处理机一执行到MOVX指令,就会有相应的信号从P3.6或P3.7送出,不需要事先用指令说明。事实上‘不能作为通用I\/O口使用’也并不是‘不能’而是(使用者)‘不会’将其作为通用I\/O口使用...

如何找到STC89C52RC单片机RXD TXD GND VCC及各针脚的定义
89C51是一种低电压、高性能的CMOS 8位微处理器,具有4K字节闪存可编程只读存储器e68a847a643133433616238,俗称单片机,单片机的可擦除只读存储器可重复擦除100次,该器件采用ATMEL高密度非易失性存储器,与MCS-51指令集和输出管脚兼容。单片机的可擦除只读存储器可重复擦除100次,该器件采用ATMEL高密度...

关于单片机的种类问题
(2)8-BIT 单片机8 位单片机 8 位单片机的控制功能较强,品种最为齐全。和4 位单片机相比,它不仅具有较大的存储容量和寻址范围,而且中断源、并行I\/O 接口和定时器\/计数器个数都有了不同程度的增加,并集成有全双工串行通信接口。在指令系统方面,普遍增设了乘除指令和比较指令。特别是8 位机中的高性能增强型...

AT89C51与AT89S51的区别
它们之间主要区别在于以下几点:1.引脚功能 引脚几乎相同,改变是,在AT89S51 P1.5中,P1.6,P1.7具有第二功能,即这三个引脚的第二功能构成一个串行ISP编程接口。2.编程功能 AT89C51仅支持并行编程,而AT89S51不仅支持并行编程,还支持ISP在线编程。在编程电压方面,AT89C51除5V外还需要12V Vpp才能...

89C52单片机的内存8K不够用了怎么办?
答:可以扩展.典型的并行存储芯片一般都可.电路非常经典.程序设计上做配合,参考Keil的Band模式.另外,要不直接扩一个足够大的外部程序芯片算了.3.如果改用大内存的单片机芯片,那程序又不一样了吧?答:只要单片机还是51系列的,程序基本不会大变动,甚至不用变动.价格方面不要贵啊,我只会52的C程序的(...

《单片机C语言程序设计实训100例——基于8051+Proteus仿真》 第03...
实例32:用指针作函数参数控制P0口8位LED流水点亮 实例33:用函数型指针控制P1口灯花样 实例34:用指针数组作为函数的参数显示多个字符串 单片机c语言编程100个实例目录2 实例35:字符函数ctype.h应用举例 实例36:内部函数intrins.h应用举例 实例37:标准函数stdlib.h应用举例 实例38:字符串函数string.h...

80c51单片机和c8051单片机有什么区别呢?
外部时钟可以是晶体RCC或外部时钟脉冲,以上的功能在低功耗应用系统中非常有用。片内资源增加如下:8~12位多通道ADC1~2路12位DAC1~2路电压比较器内部或外部电压基准内置温度传感器±316位可编程定时\/计数器阵列PCA可用于PWM等3~5个通用16位定时器8~64个通用I\/O口带有I2C\/SMBusSPI1~2个UART多类型串行总线8~...

有关单片机的几个问题!跪求高手回答
2.这个看你的单片机的硬件电路了,你最好也先看懂硬件电路才编程。通常LED的公共端是用三极管选通的!看来你的LED是共阳极接法的,就是8个LED正极共同接到三极管的发射极,集电极接VCC,基极连到P1口的接法,如果你会三极管,应该就能看懂为什么了!P1=0,三极管正向导通,VCC加到LED上,如果LED的另...

相似回答