本函数实现连接在P1.0到P1.7阴极控制的LED点亮与熄灭控制,
点亮时间由第二个FOR结构实现。
*/
#include <AT89X51.h> //预处理命令
void main(void) //主函数名
{
unsigned int a; //定义变量a 为int 类型
do{ //do while 组成
P1_0 =0; //设P1.0 口为低电平,点亮LED
for (a=0; a<60000; a++); //这是一个循环
P1_0 =1; //设P1.0 口为高电平,熄灭LED
P1_1 =0; //设P1.1 口为低电平,点亮LED
for(a=0;a<60000;a++); //这是一个循环
P1_1 =1; //设P1.1 口为高电平,熄灭LED
P1_2 =0; //设P1.2 口为低电平,点亮LED
for(a=0;a<60000;a++); //这是一个循环
P1_2 =1; //设P1.2 口为高循环,熄灭LED
P1_3 =0; //设P1.3 口为低电平,点亮LED
for(a=0;a<60000;a++); //这是一个循环
P1_3 =1; //设P1.3 口为高电平,熄灭LED
P1_4 =0; //设P1.4 口为低电平,点亮LED
for(a=0;a<60000;a++); //这是一个循环
P1_4 =1; //设P1.4 口为高电平,熄灭LED
P1_5 =0; //设P1.5 口为低电平,点亮LED
for(a=0;a<60000;a++); //这是一个循环
P1_5 =1; //设P1.5 口为高电平,熄灭LED
P1_6 =0; //设P1_6 口为低电平,点亮LED
for(a=0;a<60000;a++); //这是一个循环
P1_6 =1; //设P1_6 口为高电平,熄灭LED
P1_7 =0; //设P1.7 口为低电平,点亮LED
for(a=0;a<60000;a++); //这是一个循环
P1_7 =1; //设P1.7 口为高电平,熄灭LED
}
while(1);
}
能不能在我的程序上继续添加代码来实现,刚接触单片机不太懂,所以麻烦大神们把程序写出来,拜托了~
请问一下if循环中第二个while是什么意思,延时消抖是什么意思?
追答按键,按下的过程中,会有多次接触、断开。
如果没有延时消抖过程,按下一次键,单片机就会进行多次的操作。
看看我的百度空间吧,有许多的例程。
好的,谢谢啦。
对,就是一个开关按下去在松开是8盏流水灯亮,再按下去松开就灭了!
追答你知道怎么使用定时器没,可以用定时器实现,在定时器中断里面进行流水灯的操作。
然后,如果按键按下的话,改变标志位的值为1,就停止定时器不让定时器计时,同时熄灭所有的灯。
如果按键再按下,改变标志位的值为0,继续计时,从刚才保存的数里读出流水灯的值,继续流水灯的操作
我还没接触定时器啊,怎么办?在我这个程序上不能实现吗?
追答#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define LED_PORT P1
sbit Key = P3 ^ 7;
void Delayms( uint ms )
{
uint x,y;
for( x=0; x<ms; x++ )
for( y=0; y<124; y++ );
}
void InitTimer0( void )
{
TMOD = 0x01;
TH0 = ( 65536 - 50000 ) / 256;
TL0 = ( 65536 - 50000 ) % 256;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void main( void )
{
bit LEDFlag = 0;
LED_PORT = 0xff;
InitTimer0();
while(1)
{
if( !Key )
{
Delayms( 30 );
if( !Key )
{
LEDFlag =!LEDFlag;
if( LEDFlag )
{
TR0 = 0;
LED_PORT = 0xff;
}
else
{
TR0 = 1;
}
while( !Key );
}
}
}
}
void Timer0_ISR( void ) interrupt 1
{
static uchar cnt = 0;
static uchar LEDData = 0xfe;
TH0 = ( 65536 - 50000 ) / 256;
TL0 = ( 65536 - 50000 ) % 256;
cnt++;
if( cnt >= 10 )
{
cnt = 0;
LED_PORT = LEDData;
LEDData = _crol_( LED_PORT, 1 );
}
}
请问这个程序哪地方有流水的语句?还请详细讲解一下,麻烦了!
追答Timer0_ISR函数里面
本回答被提问者采纳怎么用89C51单片机实现用一个开关控制8个流水灯,要求开关按下去松开是亮...
w(1); P1_7 = 0; w(0); P1_7 = 1;} }
单片机89C51用汇编制作跑马灯P1控制8个LED(D1~D8)灯实现流水灯的效果...
for(i=254; i>0; i--){ while ( Maikuan!=20){ LED = 0x00;} while ( Maikuan!=200){ LED = 0x55;} Maikuan = 0;} \/\/最难的:8个灯从第一个开始依次渐亮,直到最后一个。再从最后一个起渐暗,直到第一个。如此循环往复。for(j = 0;j<=7;j++){ i = 0;while(i!=2...
怎么使89c51单片机用键盘的左右键控制8个led灯左右流水?
单片机流水灯的程序,在百度知道里是最多的,随便搜索一下,就可以搜索到无数个答案,有仿真图和程序,再根据你的仿真图,稍做修改就成了。那两个左右按键,要用按纽BUTTON。如下图所示的接法。要写程序,财富值太少了,恐怕没有人写。
8个LED循环点亮,延时程序
rlf PORTC,1 ;C口左移1位 call delay call delay CALL delay ;调用三次延时程序(保证亮度,以及流水灯闪烁速度)bcf STATUS,C ;清0进位标志位(永远只有一只LED亮)DECFSZ count,1 ;判断是否一轮循环结束 goto loop ;否,继续循环移位 GOTO main ;...
单片机问题:利用中断实现彩灯控制系统,当没有下降沿出现时8个彩灯全灭...
一、P1口是输出还是输入?P1口是输入:如果你用的是89C51单片机的话,外部中断是在P3.2和P3.3引脚,P1口是没有的。所以,如果你既想用外部中断又想用P1口做控制输入端,就需要用“与(或)”逻辑电路从P1口导出中断信号给P3.2和P3.3引脚。P1口是输出(也就是P1口的引脚连着LED灯):用P3...
跪求单片机89C51控制交通灯的课程设计
1 设计思路 AT89C52是一个低电压,高性能CMOS 8位单片机, 可以用来做单片机流水灯、跑马灯。。。等实验 电路原理图见下图1,如果我们想让接在P1.0口的LED1亮起来,那么我们只要把P1.0口的电平变为低电平就可以了;相反,如果要接在P1.0口的LED1熄灭,就要把P1.0口的电平变为高电平就可以;同...
如何实现51单片机的按键k1按下,LED流水灯向右移动,按键k2被按下,LED...
51单片机实现方法:按键控制标志位flag取反。然后把下面的代码放到循环里:U8 temp0 = 1。U8 temp1 = 0x80。U8 i = 0。if(flag == 1)。{。for(i=0;i<8;i++)。{。P1=temp0<<i。}。}。else。{。for(i=0;i<8;i++)。{。P1=temp1>>i。}。}。}。对控制LED口的寄存器进行位...
89C51单片机 4*4矩阵键盘加流水灯问题,求个汇编程序代码。
;其实很简单,都不用判断键值,有键按下暂停2S程序如下:ORG 0000H LJMP STA ORG 000BH LJMP T0ISR ORG 0030H STA:MOV TMOD,#01H MOV TH0,#3CH MOV TL0,#0B0H SETB ET0 SETB EA MOV 30,#0FEH MOV R2,#0 CLR 00H LOOP:MOV P1,#0F0H MOV A,P1 CJNE A,#0F0H,LOOP1 SJMP LOOP...
...编程实现至少3种花样循环显示的编程与电路图。单片机89c51,先...
功 能: 流水灯 参 数: 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); \/\/点亮指定的LE...
某单片机控制系统有8个发光二极管。试画出89C51与外设的连接图并编程...
网上很多的,另外给你介绍一本书:《单片机C语言程序设计实训100例——基于8051+Proteus仿真》。这本书介绍了51单片机的详细应用。如果你想学51的话是一本很不错的书。