交通灯程序的闪,很有趣的一段程序,第一第二句省了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的初学者是个拿来练手的好程序。有兴趣的朋友可以回帖问我拿这个程序完整的功能要求。
以上是目前所知道的个人看法。关于& 代替% 网上有很多介绍,大家自己体会。
回复
我要赚赏金打赏帖 |
|
|---|---|
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
| AG32VH407下光照强度传感器BH1750及其检测被打赏¥22元 | |
| AT32VH407下使用温湿度传感器DHT22进行检测被打赏¥20元 | |
| DIY一个婴儿澡盆温度计被打赏¥34元 | |
| 【FreeRtos】FreeRtos+MPU region 配置规则被打赏¥23元 | |
| 【分享开发笔记,赚取电动螺丝刀】三分钟快速上手驱动墨水屏(ArduinoIDE)被打赏¥28元 | |
| 【S32K3XX】LIN 通讯模块使用被打赏¥31元 | |
| 【FreeRtos】FreeRtos + MPU模块的配置使用被打赏¥32元 | |
我要赚赏金
