小会会的C51编程小技俩
jrcsh2013/05/28软件综合 IP:广东
[table=974px][tr][td]


if(aaa==1)
{
for(aaa=0;aaa<50;aaa++)
{
delaymma(50);
P1=~P1;
}
for(aaa=0;aaa<30;aaa++)
{
delaymma(100);
P1=~P1;
}
for(aaa=0;aaa<20;aaa++)
{
delaymma(500);
P1=~P1;
}
aaa=1;
}//aaa=1


aaa 原本是一个 标记  在进入后又利用aaa 来当临时变量, 用完后在还原 原来的值


//=============================================================








if(aaa==3)
{
delay2(bbb);
P1=~P1;
}
现在我想在加个数码管显示上去就~~~显示效果就相当糟糕了(不用定时器)

if(aaa==3)
{
delay2(bbb);
ccc++;
if(ccc==100)
{
P1=~P1;
ccc=0;
}

于是我把这个延时 砍成 100份(延时部分数值也同样改小了) 让主程序来其它程序不用等这么久 (其实引入状态标记会更好不用延时。。但我刚好在写这个小程序~~~实在烦得起框架)











//========================================================================



















//=========================================================================================


这次是结果复用 , 省下了2次运算的时间

原代码

ppp=1000000/(65535-eee);
aaa=(65535-eee)%256;
bbb=(65535-eee)/256;


小花样后
aaa=65535-eee
ppp=1000000/aaa;
bbb=aaa/256;
aaa=aaa%256;[table=974px][tr]数码管利用状态标记+程序流程上的占用代替,亮度保护保持时间,提升运行效率.

#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int
sbit w1=P2^4;
sbit w2=P2^5;
sbit w3=P2^6;
sbit w4=P2^7;
unsigned int bbb,aaa,smg,ccc;
uchar code table[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,0xff};
void delay()
{
   for(bbb=0;bbb<250;bbb++)
  {
;
}
}
void smg_xs()
{
smg++;
if(smg==5)
{
smg=1;
}
if(smg==1)
{
w2=w3=w4=1;
P0=table[aaa%10];
w1=0;
}
if(smg==2)
{
w1=w3=w4=1;
P0=table[aaa/10%10];
w2=0;
}
if(smg==3)
{
w1=w2=w4=1;
P0=table[aaa/100%10];
w3=0;
}
if(smg==4)
{
w1=w2=w3=1;
P0=table[aaa/1000%10];
w4=0;
}
}
void main()
{
smg=0;
aaa=1234;
ccc=0;
while(1)
{
smg_xs();
delay();
delay();//#%%%¥#%¥@%@¥#%#@
ccc++;
if(ccc>30)
{
ccc=0;
aaa++;
}
if(aaa>9999)
{
aaa=0;
}
}
}


//===================================================================

状态标记,    多路PWM[td]



void Timer0Interrupt(void) interrupt 1
{
    TL0 = 0x9C;        //设置定时初值
    TH0 = 0xFF;        //设置定时初值
    TR0 = 1;        //定时器0开始计时
   pwm++;
  
}


if(pwm>1000)
{
pwm=0;
len=0;
ren=0;
}




if(lpwm>pwm)//  L =======
{
len=1;
}
else
{
len=0;
}








if(rpwm>pwm)  //  R =======
{
ren=1;
}
else
{
ren=0;
}
}




if(pwm<3)
{
len=0;
ren=0;
} //强制死区


//=======================================================================
来自:计算机科学 / 软件综合
15
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
jrcsh 作者
11年7个月前 IP:未同步
534425
回 6楼(qq363606096) 的帖子
还有一些情况,节省代码空间, 这个对MCU小程序空间是很重要的直接关系到成本,  提升系统执行器的有校利用,  延时就是无用功,不得不作, 效率引伸出来的问题还是成本, 更高的效率,可节省在频率上的投入, 这点在ARM的表现的更明显, 25M 与50M  的差价,可以让老板宁愿给更多的开发代码费用, 一般也就500台机就收回这个额外投入,而500台机后这个额外投入变成额外盈利,这就是成本竞争。自己的成本能降得下来,别人的降不下来。(还有更极端的ARM用汇编),
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
jrcsh作者
11年7个月前 IP:未同步
534446
回 10楼(qq363606096) 的帖子
那么如果不使用DELAY,有没有更直观而且高效的解决方案呢?

如果按下;

等到不为按下; //(可能受到抖动干扰)

运行代码;  //变相延时

完;         // 不算太完美的处理方法,可能会发生,重复运行
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
jrcsh作者
11年7个月前 IP:未同步
534450
回 9楼(flion) 的帖子
  这个问题不在程序本身
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
jrcsh
学者 笔友
文章
491
回复
6730
学术分
4
2009/01/02注册,6年11个月前活动

.

主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}