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

#include<reg52.h>Unsignedcharkey=l;bitspeed=0;voiddelay(){unsignedintj,k;if(speed==0)... #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; }
}
展开
 我来答
zhxiufan
2012-05-24 · 知道合伙人软件行家
zhxiufan
知道合伙人软件行家
采纳数:14923 获赞数:38387
国家科技进步奖

向TA提问 私信TA
展开全部
#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; }
}
清斯年0dv
2015-04-16
知道答主
回答量:59
采纳率:0%
帮助的人:103万
展开全部
参考答案:懒人无法享受休息之乐。——拉布克
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linshaoyi1977
2012-05-24 · TA获得超过313个赞
知道答主
回答量:121
采纳率:0%
帮助的人:109万
展开全部
你这实际会出错.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式