PHPWIND
HELLOCQ
UID:33518
UID:43
UID:1666
用中断事件触发
UID:36032
UID:2714
UID:3796
UID:17497
我刚开始学单片机的时候也遇到过像你一样的困惑,后来看了一点书,加上自己的尝试,也就摸索出一些门路了。首先,把整个工程分成几个功能独立的模块,最好在开始编程的时候就预先规划好寄存器和内存等的使用和分配,确定模块的出入口传递参数。然后分别编制和调试各模块,如果需要压缩程序量,可以在编制好各模块以后,把一些各模块都需要的功能提取出来作为子程序供调用。之后在主程序中按照实际操作的顺序对各模块进行调用。对于需要同时交叉处理的模块,可以采用中断方式进行调用,进行交叉调用时注意设立数据交换区以利于各模块相互衔接调用。具体到你现在这个工程,我看你自己也已经分成了若干个模块了,我大致想了一下,如果我做的话,首先建立三个数据交换区,第一个收音机参数交换区,第二个lcd显示缓冲区,第三个键盘数据交换区。lcd显示模块和接收机控制模块可以在主程序中循环调用,时钟模块可以采用定时器中断处理,键盘输入可以采用外部中断处理。平时,程序只是负责把lcd显示缓冲区的数据进行显示,把pll数据、波段和音量等参数送往收音机。当内部定时器溢出产生中断时进行有关时钟计时、闹钟和控制收音机动作等处理。通常内部定时器是设置成秒溢出,如果嫌计时不够准确,可以设置为1/10秒溢出。时钟中断程序通过收音机参数交换区和lcd显示缓冲区进行数据交换,由主程序中的有关模块进行处理。当有按键按下,触发外部中断,中断程序进行按键处理,如果需要判断按键的长短,可以启动定时器2进行计数,根据计数值多少就就可很方便分辨出是短按键还是长按键甚至还可以加个超长按键呢。按键参数放入键盘数据交换区,由主程序中的有关模块进行后续处理。
看了6楼的帖子有些感触,老ham对新手的细心和耐心帮助,值得我去学习。让我对ba的理解更加深入了,ba不只是技术,更是人品。
UID:50795
UID:2093
UID:39727
UID:43380
UID:43590
UID:43148
UID:53396
读键盘应该用统计的方法来防抖动,例如在100ms内采样10次,7次有效即当作有效输入。我都是这样做的,效果很好。