求大神帮我注释下这些C语言程序 这是个基于单片机的彩灯控制程序

#include <reg52 .h>
Unsigned char key =l;
bit speed = 0;
void delay()
{
unsigned int j, k ;
if(speed = = 0)
{
for (k=0; k<l000; k++)
for (j=0; j <l00; j++);
}
else
{
for (k=0;k<1000 ;k++ )
for(j =0;j<20;j++ );
}
}
void int _ init( )
{
IT0 = 1;
IT1 = 1;
EX1 = 1;
EX0 = 1;
EA = 1;
}
void show l (void)
{
unsigned char i;
while (1)
{
if (key != 1)
break;
for (1=0; i<8;i++)
{
if (key !=1)
break ;
P2 = ~ (1<<i );
delay ( );
}
}
}
void show 2 (void)
{
unsigned char i ;
while (1)
{
if (key != 2)
break ;
for (1 =0 ; i<8 ; i ++ )
{
if ( i < 7 )
P1 = ~(3<< i );
else
P2= ~(0x81) ;
delay ( ) ;
if (key != 2)
break ;
}
}
}
void show 3 ( void )
{
while (I)
{
if (key ! = 3)
break;
P2 = 0xaa ;
delay( );
P2 = 0x55;
delay( );
}
}
void show 4 (void)
{
while (1)
{
if (key != 4)
break;
P2 =~ 0x18;
delay( );
if (key != 4)
break ;
P2 = ~0x24 ;
delay ( );
if (key != 4)
break;
P2 = ~0x42;
delay ( );
if (key != 4)
break ;
P2 = ~0x81;
delay( ) ;
}
}
main( )
{
// timer_ init( );
int _init( );
while (1)
{
switch (key)
{
case 1: show 1( ); break;
case 2: show 2( ); break;
case 3: show 3( ); break ;
case 4: show 4( ); break ;
default : show l ( );
}
}
}
void interrupt_ int0 ( ) interrupt 0
{
speed =~speed;
}
void interrupt int1( ) interrupt 2
{
key ++;
if(key = = 5)
{ key= 1; }
}
最新回答
泽城美雪

2024-07-03 03:00:26

#include <reg52 .h>
Unsigned char key =l;
bit speed = 0;
void delay() //延时
{
unsigned int j, k ;
if(speed = = 0) //speed=0,较长时间延时,大约为1秒
{
for (k=0; k<l000; k++)
for (j=0; j <l00; j++);
}
else
{
for (k=0;k<1000 ;k++ ) //speed!=0,较短时间延时,大约为0.2秒
for(j =0;j<20;j++ );
}
}
void int _ init( ) //外部中断0,1初始化
{
IT0 = 1; //外部中断0下降沿触发
IT1 = 1; //外部中断1下降沿触发
EX1 = 1; //开中断1
EX0 = 1; //开中断0
EA = 1; //中断开
}
void show l (void) //显示1:LED从低到高位顺序显示(左右上下看你实际安排)
{ //这里没有做到循环显示
unsigned char i;
while (1)
{
if (key != 1)
break;
for (1=0; i<8;i++)
{
if (key !=1)
break ;
P2 = ~ (1<<i );
delay ( );
}
}
}
void show 2 (void) //显示2:从低到高两行循环显示
{ //这里仍然没有达到作者的想法
unsigned char i ;
while (1)
{
if (key != 2)
break ;
for (1 =0 ; i<8 ; i ++ )
{
if ( i < 7 )
P1 = ~(3<< i ); //第一次时,i=0~6时两行顺序显示,注意P1应该是P2
else
P2= ~(0x81) ; //i=7时最低最高两位显示,之后显示效果同1,
delay ( ) ;
if (key != 2)
break ;
}
}
}
void show 3 ( void ) //显示3:隔行交替显示
{
while (I)
{
if (key ! = 3)
break;
P2 = 0xaa ;
delay( );
P2 = 0x55;
delay( );
}
}
void show 4 (void) //显示4:从中间往两边移动显示
{
while (1)
{
if (key != 4)
break;
P2 =~ 0x18;
delay( );
if (key != 4)
break ;
P2 = ~0x24 ;
delay ( );
if (key != 4)
break;
P2 = ~0x42;
delay ( );
if (key != 4)
break ;
P2 = ~0x81;
delay( ) ;
}
}
main( )
{
// timer_ init( );
int _init( );
while (1)
{
switch (key)
{
case 1: show 1( ); break;
case 2: show 2( ); break;
case 3: show 3( ); break ;
case 4: show 4( ); break ;
default : show l ( );
}
}
}
void interrupt_ int0 ( ) interrupt 0 //S2键改变显示速度
{
speed =~speed;
}
void interrupt int1( ) interrupt 2 //S3键改变显示方式
{
key ++;
if(key = = 5)
{ key= 1; }
}
追问
大神  您可以帮我编一个吗 模式不要多 有俩个就好  或者帮我修改下上述的程序
追答
只能两个显示效果了,全加字数超了。
#include
unsigned char key,speed;
void delay(void)
{
unsigned int j, k ;
if(speed == 0)
{
for (k=0;k<1000;k++)
for (j=0;j<100;j++);
}
else
{
for (k=0;k<1000 ;k++ )
for(j =0;j<20;j++ );
}
}
void int_init( )
{
IT0 = 1;
IT1 = 1;
EX1 = 1;
EX0 = 1;
EA = 1;
}
void show_1 (void)
{
unsigned char i;
while (1)
{
if(key != 1)break;
for(i=0;i<8;i++)
{
if (key !=1)
break ;
P2 = ~ (1<<i );
delay( );
}
}
}
void show_2 (void)
{
unsigned char i ;
while (1)
{
if(key != 2)
break ;
for(i=0;i<8;i ++ )
{
if ( i < 7 )
P1 = ~(3<< i );
else
P2= ~(0x81) ;
delay ( ) ;
if (key != 2)
break ;
}
}
}
main( )
{
int_init( );
while (1)
{
switch (key)
{
case 1: show_1( ); break;
case 2: show_2( ); break;
default : show_1( );break;
}
}
}
void int0 ( ) interrupt 0
{
speed =~speed;
}
void int1( ) interrupt 2
{
key ++;
if(key == 3)
{ key= 1; }
}
追问
你好 我看了再俩个显示中 你只把1改成了i  主程序 减去了// timer_ init( );这个语句  这样就可以了吗  那个1可能是我 抄错了 我想知道改后是否可以实现循环
追答
恩,想了一下,还是可以的,这个程序我在KEIL上编译通过了,应该没什么问题,还有忘记了把P1改成P2,你改一下。
追问
我想问一下 俩个程序 整合  但俩个程序都用到 中断INT1  I NT0   变成俩个模块整合后 是否会冲突
追答
不行的,多个模块连接成一个的时候,同一中断必须是唯一的
浪居酒家

2024-07-03 03:03:46

参考答案:懒人无法享受休息之乐。——拉布克
撩妹被罚跪

2024-07-03 00:59:19

你这实际会出错.