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);
}
}
}
展开
 我来答
百度网友15b7a57
2015-11-02 · TA获得超过894个赞
知道小有建树答主
回答量:357
采纳率:100%
帮助的人:167万
展开全部
#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);
}
}
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式