51单片机左右循环移动的流水灯功能,求解答每一句具体含义!
#include<reg52.h>#defineucharunsignedchar#defineuintunsignedint#defineDataPortP0sbitP...
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0
sbit P21=P2^0;
uchar code ScanCode[ ]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void DelayMs(uint n)
{
uchar j;
while(n--)
{
for(j=0;j<113;j++);
}
}
void main(void)
{
uchar i;
P21=1;
while(1)
{
for(i=0;i<8;i++)
{
DataPort=ScanCode[i];
DelayMs(500);
}
for(i=0;i<8;i++)
{
DataPort=ScanCode[7-i];
DelayMs(500);
}
}
} 展开
#define uchar unsigned char
#define uint unsigned int
#define DataPort P0
sbit P21=P2^0;
uchar code ScanCode[ ]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void DelayMs(uint n)
{
uchar j;
while(n--)
{
for(j=0;j<113;j++);
}
}
void main(void)
{
uchar i;
P21=1;
while(1)
{
for(i=0;i<8;i++)
{
DataPort=ScanCode[i];
DelayMs(500);
}
for(i=0;i<8;i++)
{
DataPort=ScanCode[7-i];
DelayMs(500);
}
}
} 展开
1个回答
展开全部
#include<reg52.h>//头文件包含,包括51硬件寄存器的宏定义,延时函数等
#define uchar unsigned char//宏定义,uchar被定义成unsigned char的简写
#define uint unsigned int//同上,uint被定义成unsigned int 的简写
#define DataPort P0//dataport(数据端口)被定为成P0口
sbit P21=P2^0;sbit是设置端口的某一位为一个变量,这样就可以直接对变量进行操作(等价于对端口该位的操作),如sbit led1=P1^1;如果P1^1接的是led的话,led1=1;就可以使led灯点亮了!
uchar code ScanCode[ ]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
code表示让单片机把这个定义的ScanCode的值存在ROM(程序存储区)
定义一个无符号的字符型变量数组ScanCode,其值存放在程序存储区,写入之后不可更改
void DelayMs(uint n)//毫秒延时函数,通过设置循环次数,来设定时间
{
uchar j;
while(n--)//直到n减为0退出循环
{
for(j=0;j<113;j++);空循环114次,即延时114个指令周期
}
}
void main(void)主函数
{
uchar i;
P21=1;p2口第1位引脚置高电平
while(1)无限循环
{
for(i=0;i<8;i++)以下大括号中两句代码循环8次,即将ScanCode数组中8字节数据依次送到p0口
{
DataPort=ScanCode[i];向数据口(即p0口)送数据,数据为ScanCode数组中第i个元素
DelayMs(500);延时500毫秒
}
for(i=0;i<8;i++)同上,将scancode数字的8字节数据按相反顺序再送一次
{
DataPort=ScanCode[7-i];
DelayMs(500);
}
}
}
#define uchar unsigned char//宏定义,uchar被定义成unsigned char的简写
#define uint unsigned int//同上,uint被定义成unsigned int 的简写
#define DataPort P0//dataport(数据端口)被定为成P0口
sbit P21=P2^0;sbit是设置端口的某一位为一个变量,这样就可以直接对变量进行操作(等价于对端口该位的操作),如sbit led1=P1^1;如果P1^1接的是led的话,led1=1;就可以使led灯点亮了!
uchar code ScanCode[ ]=
{0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
code表示让单片机把这个定义的ScanCode的值存在ROM(程序存储区)
定义一个无符号的字符型变量数组ScanCode,其值存放在程序存储区,写入之后不可更改
void DelayMs(uint n)//毫秒延时函数,通过设置循环次数,来设定时间
{
uchar j;
while(n--)//直到n减为0退出循环
{
for(j=0;j<113;j++);空循环114次,即延时114个指令周期
}
}
void main(void)主函数
{
uchar i;
P21=1;p2口第1位引脚置高电平
while(1)无限循环
{
for(i=0;i<8;i++)以下大括号中两句代码循环8次,即将ScanCode数组中8字节数据依次送到p0口
{
DataPort=ScanCode[i];向数据口(即p0口)送数据,数据为ScanCode数组中第i个元素
DelayMs(500);延时500毫秒
}
for(i=0;i<8;i++)同上,将scancode数字的8字节数据按相反顺序再送一次
{
DataPort=ScanCode[7-i];
DelayMs(500);
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询