完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include
void main() { unsigned int i = 0; //定义循环变量i,用于软件延时 unsigned char cnt = 0; //定义计数变量cnt,用于移位控制 while (1) //主循环,程序无限循环执行该循环体语句 { P0 = (0x01 << cnt); //P0等于1左移cnt位,控制8个LED for (i=0; i<20000; i++); //软件延时 cnt++; //移位计数变量自加1 if (cnt >= 8) //移位计数超过7后,再重新从0开始 { cnt = 0; } P0 = (0x80 >> cnt); //P0等于0x80右移cnt位,控制8个LED for (i=0; i<20000; i++); //软件延时 cnt++; //移位计数变量自加1 if (cnt >= 8) //移位计数超过7后,再重新从0开始 { cnt = 0; } } } 这段程序为什么没有流水灯左右循环效果 |
|
相关推荐
8个回答
|
|
for循环往复不对,右移符号不对
|
|
|
|
醉了醉了。
|
|
|
|
大哥,左移号是一个大于号吗?2个吧
|
|
|
|
我给你附上一段循环左移的看看吧,你看看你的问题出哪里了
/*----------------------------------------------- 内容:循环左移,始终一个led点亮,并循环执行流水动作,左移符号 << 逻辑或符号 | ------------------------------------------------*/ #include void Delay(unsigned int t); //函数声明 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255 Delay(50000); P1=0xfe; //赋初始值 while (1) //主循环 { for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次 { Delay(50000); P1<<=1; P1=P1|0x01; //左移后,最右端自动赋值0,所以需要该语句赋值1 } P1=0xfe; //重新赋初始值 //主循环中添加其他需要一直工作的程序 } } /*------------------------------------------------ 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 0~65535 ------------------------------------------------*/ void Delay(unsigned int t) { while(--t); } |
|
|
|
/*-----------------------------------------------
内容:循环左移,始终一个led点亮,并循环执行流水动作,左移符号 << 逻辑或符号 | ------------------------------------------------*/ #include void Delay(unsigned int t); //函数声明 /*------------------------------------------------ 主函数 ------------------------------------------------*/ void main (void) { unsigned char i; //定义一个无符号字符型局部变量 i 取值范围 0~255 Delay(50000); P1=0xfe; //赋初始值 while (1) //主循环 { for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次 { Delay(50000); P1<<=1; P1=P1|0x01; //左移后,最右端自动赋值0,所以需要该语句赋值1 } P1=0xfe; //重新赋初始值 //主循环中添加其他需要一直工作的程序 } } /*------------------------------------------------ 延时函数,含有输入参数 unsigned int t,无返回值 unsigned int 是定义无符号整形变量,其值的范围是 0~65535 ------------------------------------------------*/ void Delay(unsigned int t) { while(--t); } |
|
|
|
建议你用_crol_循环左移_cror_循环右移,这个比较简单
|
|
|
|
for(i=0;i<8;i++) //加入 for循环,表明for循环大括号中的程序循环执行8次
{ Delay(50000); P1<<=1; P1=P1|0x01; //左移后,最右端自动赋值0,所以需要该语句赋值1 } |
|
|
|
学习学习,大家都好积极啊
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
503 浏览 0 评论
求助一下关于51系列单片机的Timer0的计时问题,TH0、TL0+1的时间是怎么算的?
1756 浏览 1 评论
【RA-Eco-RA4E2-64PIN-V1.0开发板试用】开箱+Keil环境搭建+点灯+点亮OLED
1183 浏览 0 评论
【敏矽微ME32G070开发板免费体验】使用coremark测试敏矽微ME32G070 跑分
1053 浏览 0 评论
【敏矽微ME32G070开发板免费体验】开箱+点灯+点亮OLED
1287 浏览 2 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12020 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 17:24 , Processed in 0.900900 second(s), Total 84, Slave 67 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号