2024年5月30日发(作者:休顺美)
用AT89C51单片机的P2口控制8个Led的流水灯的C程序看不懂?
悬赏分:80 - 解决时间:2009-4-1 23:55
用AT89C51单片机的P2口控制8个Led的流水灯的C程序看不懂?
从P2-0到P2-7灯依次单独点亮后,又从P2-7到P2-0灯依次单独点亮
如此反复循环,程序如下(低电平被点亮):
#include <REGX52.H>
void Delay1ms(unsigned int count)
{
unsigned int i,j;
for(i=0;i for(j=0;j<120;j++); } main() { unsigned char LEDIndex = 0; bit LEDDirection = 1; while(1) { if(LEDDirection) P2 = ~(0x01< else P2 = ~(0x80>>LEDIndex); if(LEDIndex==7) LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%8; Delay1ms(500); } } 我这程序我真的看不懂, 这个bit LEDDirection = 1;是什么意思? 从主函数开始,麻烦高手帮我解释每一句的意思以及它有用途? 越详细越好! 在下在此先谢谢了! 提问者: twp16899168 - 二级最佳答案#include <REGX52.H> void Delay1ms(unsigned int count) /*延时函数,延迟时间为count×1ms)*/ { unsigned int i,j; for(i=0;i for(j=0;j<120;j++); } main() { nsiguned char LEDIndex = 0; /*声明8位变量LEDIndex,用来指示8个LED中哪个 被点亮,初始值为00000000*/ bit LEDDirection = 1; /*声明位变量LEDDirection,用来指示点亮的方向,初始值为 1*/ while(1) /*一直循环执行大括号里面的语句*/ { if(LEDDirection) /*当LEDDirection=1时,0000 0001左移LEDIndex位,取反后送 给P2端口,点亮一个LED*/ P2 = ~(0x01< else /*当LEDDirection=0时,1000 0000右移LEDIndex位,取反后送给P2端口, 点亮一个LED*/ P2 = ~(0x80>>LEDIndex); if(LEDIndex==7) /*当一次循环结束时,把LEDDirection取反,下次循环时将以相 反的顺序点亮*/ LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%8; /*LEDIndex+1对8取余,保证LEDIndex在0~7之 间*/ Delay1ms(500); /*延时500ms,即LED的点亮间隔为0.5s*/ } } 22回答者: 紫翅zhidao - 四级 2009-3-23 12:20 我来评论>> 提问者对于答案的评价:谢谢一楼的回答,三楼回答好一点,谢谢! 相关内容 ? 求:单片机控制双色LED灯流水亮起的程序 1 2010-1-9 流水灯 利用单片机的P1口控制LED的发光闪烁,在利用编程实现模拟广告灯 2009-11-8 ? 怎样让单片机在P1.和P2口同时控制两个不同花样的流水灯呢? 2009-6-29 基于at89c51单片机的led彩灯控制器管内LED板模块硬件图中的芯片CD4076在 电路中有何作用? 5 2009-5-23 用Protues软件实现AT89C51单片机控制的跑马灯的仿真,8个LED实现左移和 右移。(用定时) 4 2009-7-27 更多相关问题>> 查看同主题问题: at89c51 单片机 控制 led 流水 等待您来回答 韩国SZ服装批发/全实物拍摄 什么样的激励政策更能激发人的能动性和积极性,且具有持续性 创设一个好的教学情境对教师的基本要求是什么 红豆手套什么时候有定货会 寻访哈莫雷特的族人 没有完成 联想题:唐太宗、阿基米德、白雪公主、反射(2个字) 寻找韩国SZ代理商 激发个人创新力的因素有哪些 其他回答 共 3 条 #include <REGX52.H> void Delay1ms(unsigned int count) count毫秒的延时函数,count=1,2, 3,4………… { unsigned int i,j; for(i=0;i for(j=0;j<120;j++); 一毫秒 } main() { unsigned char LEDIndex = 0; 声明一个实数变量LEDIndex,初值为0 bit LEDDirection = 1; 声明一个位变量 LEDDirection,初值为1 while(1) 循环语句 { if(LEDDirection) 如果LEDDirection=1, P2 = ~(0x01< else 如果LEDDirection不等于1, P2 = ~(0x80>>LEDIndex); 则P2口每隔500毫秒从P2.7---P2.0输出低电平 if(LEDIndex==7) 如果测试到LEDIndex的值为7 LEDDirection = !LEDDirection; LEDDirection取反(是1就为0,是0就为1) LEDIndex = (LEDIndex+1)%8; LEDIndex从0开始加1,一直加到8,再从0开始加1 加到8,一直循环下去 Delay1ms(500); 每加一次1,延时 500毫秒 } } 2024年5月30日发(作者:休顺美) 用AT89C51单片机的P2口控制8个Led的流水灯的C程序看不懂? 悬赏分:80 - 解决时间:2009-4-1 23:55 用AT89C51单片机的P2口控制8个Led的流水灯的C程序看不懂? 从P2-0到P2-7灯依次单独点亮后,又从P2-7到P2-0灯依次单独点亮 如此反复循环,程序如下(低电平被点亮): #include <REGX52.H> void Delay1ms(unsigned int count) { unsigned int i,j; for(i=0;i for(j=0;j<120;j++); } main() { unsigned char LEDIndex = 0; bit LEDDirection = 1; while(1) { if(LEDDirection) P2 = ~(0x01< else P2 = ~(0x80>>LEDIndex); if(LEDIndex==7) LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%8; Delay1ms(500); } } 我这程序我真的看不懂, 这个bit LEDDirection = 1;是什么意思? 从主函数开始,麻烦高手帮我解释每一句的意思以及它有用途? 越详细越好! 在下在此先谢谢了! 提问者: twp16899168 - 二级最佳答案#include <REGX52.H> void Delay1ms(unsigned int count) /*延时函数,延迟时间为count×1ms)*/ { unsigned int i,j; for(i=0;i for(j=0;j<120;j++); } main() { nsiguned char LEDIndex = 0; /*声明8位变量LEDIndex,用来指示8个LED中哪个 被点亮,初始值为00000000*/ bit LEDDirection = 1; /*声明位变量LEDDirection,用来指示点亮的方向,初始值为 1*/ while(1) /*一直循环执行大括号里面的语句*/ { if(LEDDirection) /*当LEDDirection=1时,0000 0001左移LEDIndex位,取反后送 给P2端口,点亮一个LED*/ P2 = ~(0x01< else /*当LEDDirection=0时,1000 0000右移LEDIndex位,取反后送给P2端口, 点亮一个LED*/ P2 = ~(0x80>>LEDIndex); if(LEDIndex==7) /*当一次循环结束时,把LEDDirection取反,下次循环时将以相 反的顺序点亮*/ LEDDirection = !LEDDirection; LEDIndex = (LEDIndex+1)%8; /*LEDIndex+1对8取余,保证LEDIndex在0~7之 间*/ Delay1ms(500); /*延时500ms,即LED的点亮间隔为0.5s*/ } } 22回答者: 紫翅zhidao - 四级 2009-3-23 12:20 我来评论>> 提问者对于答案的评价:谢谢一楼的回答,三楼回答好一点,谢谢! 相关内容 ? 求:单片机控制双色LED灯流水亮起的程序 1 2010-1-9 流水灯 利用单片机的P1口控制LED的发光闪烁,在利用编程实现模拟广告灯 2009-11-8 ? 怎样让单片机在P1.和P2口同时控制两个不同花样的流水灯呢? 2009-6-29 基于at89c51单片机的led彩灯控制器管内LED板模块硬件图中的芯片CD4076在 电路中有何作用? 5 2009-5-23 用Protues软件实现AT89C51单片机控制的跑马灯的仿真,8个LED实现左移和 右移。(用定时) 4 2009-7-27 更多相关问题>> 查看同主题问题: at89c51 单片机 控制 led 流水 等待您来回答 韩国SZ服装批发/全实物拍摄 什么样的激励政策更能激发人的能动性和积极性,且具有持续性 创设一个好的教学情境对教师的基本要求是什么 红豆手套什么时候有定货会 寻访哈莫雷特的族人 没有完成 联想题:唐太宗、阿基米德、白雪公主、反射(2个字) 寻找韩国SZ代理商 激发个人创新力的因素有哪些 其他回答 共 3 条 #include <REGX52.H> void Delay1ms(unsigned int count) count毫秒的延时函数,count=1,2, 3,4………… { unsigned int i,j; for(i=0;i for(j=0;j<120;j++); 一毫秒 } main() { unsigned char LEDIndex = 0; 声明一个实数变量LEDIndex,初值为0 bit LEDDirection = 1; 声明一个位变量 LEDDirection,初值为1 while(1) 循环语句 { if(LEDDirection) 如果LEDDirection=1, P2 = ~(0x01< else 如果LEDDirection不等于1, P2 = ~(0x80>>LEDIndex); 则P2口每隔500毫秒从P2.7---P2.0输出低电平 if(LEDIndex==7) 如果测试到LEDIndex的值为7 LEDDirection = !LEDDirection; LEDDirection取反(是1就为0,是0就为1) LEDIndex = (LEDIndex+1)%8; LEDIndex从0开始加1,一直加到8,再从0开始加1 加到8,一直循环下去 Delay1ms(500); 每加一次1,延时 500毫秒 } }