交通灯程序的闪,很有趣的一段程序,第一第二句省了200B

{
rtimer_flag=timer_flag & 64;
rtimer_flag=rtimer_flag/2;
if(data_rtled*100-timer_flag<750 && data_rtled*100-timer_flag>250 && rtimer_flag==0)
{
switch(direction)
{
case 1: turnleft(data_down); break;
case 2: gostraight(data_down); break;//某方向绿灭; break;
case 3: turnright(data_down); break;
}
}
else if(data_rtled*100-timer_flag<300)
{
switch(direction)
{
case 1: turnleft(data_yelow); break;
case 2: gostraight(data_yelow); break; //绿灭亮黄; break;
case 3: turnright(data_yelow); break;
}
}
else
switch(direction)
{
case 1: turnleft(data_normal); break;
case 2: gostraight(data_normal); break; //绿亮; break;
case 3: turnright(data_normal); break;
}
}
关键词: 交通 有趣 有趣

void takertimerflag(uchar direction,uchar data_rtled,uchar data_down,uchar data_yelow,uchar data_normal)
//uchar direction 方向,1左转,2直行,3右转
//uchar data_rtled 时间,相位的停留时间(这是太阳能移动交通灯的相位时间共4个相位16个模式)
//uchar data_down, IO口控制灭的数据 为0x__
//uchar data_yelow, IO口控制绿灭红灭亮黄的数据 为0x__
//uchar data_normal ,IO口控制正常绿灯亮的数据 为0x__
{rtimer_flag=timer_flag & 64;
//timer_flag是个定时器自加标志10ms自加1,rtimer_flag是一个变量uchar型------>x<64的数按位与64都得0,64<=x<128的数按位与64都得64,128<=x<128+64的数按位与64都得0, 128+64<=x<256的数按位与64都得64, 256<=x<256+64的数按位与64都得0,256+64<=x<256+128的数按位与64都得64,、、、、、、、依次以时间间隔为64在0与64两个数之间切换循环
rtimer_flag=rtimer_flag/2;//由上步可知此处的值是以时间间隔为64,在0和32之间切换if(data_rtled*100-timer_flag<750 && data_rtled*100-timer_flag>250 && rtimer_flag==0)
//如果相位运行时间低于设定时间7.5s并且大于2.5s时 每64*10ms进入一次
{switch(direction)
{
case 1: turnleft(data_down); break;
case 2: gostraight(data_down); break;//某方向绿灭; break;
case 3: turnright(data_down); break;
}
}
else if(data_rtled*100-timer_flag<300)
{
switch(direction)
{
case 1: turnleft(data_yelow); break;
case 2: gostraight(data_yelow); break; //绿灭亮黄; break;
case 3: turnright(data_yelow); break;
}
}
else
switch(direction)
{
case 1: turnleft(data_normal); break;
case 2: gostraight(data_normal); break; //绿亮; break;
case 3: turnright(data_normal); break;
}
}
程序的重点在于用&代替了%, 就是
rtimer_flag=timer_flag/64;-----------------------------以时间间隔为64 做奇偶变换
rtimer_flag=rtimer_flag%2;由上步导致此处--------在时间间隔为64做0 1 变换
这是在完整的太阳能移动交通灯里拿出来的闪的程序,我不知道别人怎么写的,我是这样写了。。。这程序第一次写了7K,第二次用指针简化成4K,其中有掉电保存和LED的显示,和一个相位时间的设置。这么大的程序主要是数码管用错了,用成共阳的(多花费了大约300B),还有就是16个模式。。这是程序的大头。这对于51的初学者是个拿来练手的好程序。有兴趣的朋友可以回帖问我拿这个程序完整的功能要求。
以上是目前所知道的个人看法。关于& 代替% 网上有很多介绍,大家自己体会。
回复
有奖活动 | |
---|---|
【EEPW电子工程师创研计划】技术变现通道已开启~ | |
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】STM32的硬件通讯调试过程的“坑”被打赏50分 | |
【我踩过的那些坑】晶振使用的问题被打赏100分 | |
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 |