51单片机学习笔记(三)

  感觉现在每一天写的程序都在增加难度,或者是因为我太心急,书中的一些过渡程序我觉得太简单就只看书上的例程,理解后没有亲自在电脑上调试,结果编写进阶的程序就感觉很困难了。所以以后要一个一个程序慢慢递进,不能太心急了。

    今天这个程序是在昨天按键控制led灯的基础上改为按键控制数码管了,要实现按一个键数码管显示的数字加一,按另一个键数码管的数字减一。虽然这个功能简单,但实现起来却很复杂。我调试了一个小时还找不出错误,最后还是打开书本参考了一下例程才豁然开朗。

    调试记录:

  (1)程序中的,inc count语句我第一次写的时候把它调到去process子程序中,结果是没有任何操作的时候,数码管不断自加,debug的时候程序卡住了,连keil软件都无反应,只好用Ctrl+alt+del强制关闭。原因是按照我的主程序,无论按键处理后收到高电平还是低电平,都会执行放在process中的inc count。也就是不断自加。实验失败。所以以后收集到信息后要第一时间处理,或用内存空间来记录,否则错了还找不出来。

   (2)

   书中已指出的可能会出现的错误,即自加的数据超过99,和为负数的时候会溢出,我设置了一个判断,对数据为99时再加1已不再处理,为0时再减1也不再理会,停在99或0的位置。

(3)

   如果按照之前控制led灯的程序照抄的话会出现按下键不释放的话数码管会熄灭,于是在不断循环检测按键释放的指令之前,也循环call display,即数码管循环输出原来的数字,保证看起来数码管没有熄灭。

 

 

最大的收获:

  写这个程序我最大的收获不只是调试的经验,还有一点模块化编程的意识,最后算是比较深刻地区分sjmp和ret的关系吧,感觉汇编的跳转很容易让人头痛,c语言的逻辑性似乎看起来要清晰很多。

 

 

 

附代码如下 :









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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值