单片机c语言字符串比较,代码对比

1.延时函数退出舞台

有了上一讲的理论讲解,代码的实现就比较简单了,实验现象就是高6位的6盏灯不停流水,我们用K4按键控制LED2的亮灭,并且途中并没有影响到6盏流水灯的运行。

我们知道以前流水灯是需要延时才能看得到流水现象的,那么现在再用延时函数的话,按键就没有意义了。比如流水灯的跳变需要间隔50ms才看得出是一个灯一个灯的亮,如果在死循环里使用“delay_ms(50);”,那么不支持连按代码里的times要加1都需要过了50ms才行,这样显然行不通,我们只能从流水灯的代码去思考了。

其实一次死循环里不一定就要求灯实现跳变,可以等到过了很多次死循环再去执行灯的跳变的,所以我们在死循环里让变量x每次加1,死循环了3000次之后再执行灯的跳变,这样不就能实现间隔50ms左右灯才跳变了吗,同时又不影响按键代码的times,也就是一次死循环所花费的时间被大大缩短了,扫描按键IO端口的机会更多了。那么延时函数在我们写一些高效率的代码的时候就很少去使用了,毕竟这样不仅影响执行效率,还会使某些功能模块失去作用。

2.流水灯代码新书写模式#include 

sbit ADDR2 = P1^2;

sbit ADDR1 = P1^1;

sbit ADDR0 = P1^0;

sbit ENLED = P1^4;

sbit ADDR3 = P1^3;

sbit LED2  = P0^0;

sbit KEY4  = P2^7;

void main()

{

unsigned char key_up=1;//定义记录按键状态值的变量,初始值为1避免程序一开始就进入了“if(key_up==0)”

unsigned char i=0;

unsigned int times=0;  //用来记录进入过按键判断语句的次数

unsigned int x;        //作为记录死循环的次数以达到间隔切换灯的跳变

ADDR3 = 1;//使能三八译码器

ENLED = 0;//

ADDR2 = 1;//**************************

ADDR1 = 1;//让三八译码器的IO6输出低电平

ADDR0 = 0;//**************************

P2 = 0xF7;//让K4能具备有被拉低的条件先

while(1)

{

if(key_up==0)

{

times++;

if(times>=1000&&KEY4==1)

{

times=0;

LED2=!LED2;

}

}

key_up=KEY4;

//以下是流水灯任务部分

x++;

if(x>=3000)//程序的运行已经过去50ms左右了

{

x=0;

P0=~(0x04<

i++;

if(i>=6)i=0;

}

}

}

还是不明白“P0=~(0x04<

然后当i等于1时“~(0x04<

我们这个例程代码是对比了用“while(KEY4==0);”的时候是多么的不足,这样吧,我们把上面例程的这部分代码if(key_up==0)

{

times++;

if(times>=1000&&KEY4==1)

{

times=0;

LED2=!LED2;

}

}

key_up=KEY4;

改为以前初步学习的代码如下if(KEY4==0)

{

delay_ms(10);//等待抖动过去

if(KEY4==0) //二次判断

{

LED2=!LED2;

while(KEY4==0);

}

}

延时函数大家再自己找以前的代码去添加,实验现象就是按键动作影响了流水灯的流速,如果按着不放直接导致停止流水。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值