前两天发了1,还有兄弟过来捧场,谢谢板砖啊……
今天先说说主程序基准时间的选取吧
我个人理解是最小优先的选取方法
举个例子来说
我要做个闹钟
板上有4个数码管,有按键若干
一个数码管的扫描间隔如果超过12ms也许就会发现闪烁现象,当然我说的是大多数的数码管啊
4个数码管分四次扫描 12/4=3
也就是说我主程序每扫一次数码管的时间间隔不能超过3ms
按键扫描时间间隔可以随意定,但是最好是要定在10ms以内,因为如果是定义为40ms以上有效我们可以
扫描4次这样有利于干扰排除
所以主程序的基准时基就不能超过3ms
我一般定的是2ms(能扫描完各个子程序就行 当然得按实际需要定)
下面再给大家介绍一下 在《工作之后这样写程序1》中介绍给大家如何解决 扫描频率不一样
的问题,和如何实现四个数码管分四次扫描。
这样的问题都归为一个程序的“指针”
main:
bts1 ftc1irq
jmp main
bclr ftc1irq //2ms
call display
call key_scan
jmp main
下面结合程序来看一下
display:
mov a,display_dptr
b0add pcl,a
jmp scan_com1 //第一个2ms
jmp scan_com2 //第二个2ms
jmp scan_com3 //第三个2ms
jmp scan_com4 //第四个2ms 第五个2ms再回到scan_com1
scan_com1:
bclr com4 //关四数码管显示
mov a,ledbuf[0] //送显示数据
call com_num
b0bset com1 //开一数码管显示
jmp display_timer //对显示指针进行加一,跳出显示程序
scan_com2:
bclr com1
mov a,ledbuf[1]
call com_num
b0bset com2
jmp display_timer
scan_com3:
bclr com2
mov a,ledbuf[2]
call com_num
b0bset com3
jmp display_timer
scan_com4:
bclr com3
mov a,ledbuf[3]
call com_num
b0bset com4
jmp display_timer
display_timer: //对显示指针的操作,每次加一,加到4后清零 跳出数码管扫描程序
incms display_dptr
mov a,#4
cmprs a,display_dptr
ret //和4不等时跳出
clr display_dptr//和4相等时清零
ret
key_scan:
键盘处理有很多种要求,常用的有三种,这里要是说程序就有点太麻烦了,明天先介绍第一种。
先介绍一下有那三种吧
1,功能键模式,按下去只有一次动作。之后一直按也不会有效果
2,加减键,一般要求有连按,按下40ms就有动作,之后每到500ms在动作一次(时间不固定)
3,按下无动作,键弹起看是否有效。这样一般是大模式转换,比如+-键和模式键复用,
当按下3s一上转换模式,3秒以下是+-功能。我现在做的案子这三种都有命苦啊
今天就不说怎么扫描了,说下在《工作之后这样写程序1》中扫描频率的解决吧,其实这个按键扫描频率不
解决也没事,2ms扫一次也可以,但是以后在程序中总会碰到这样的问题。就说一下吧
同样也是用指程序针来做
mov a,key_scan_dptr
b0add pcl,a
jmp key_dptr_pro //对指针进行操作 不近扫描 之后跳出
jmp key_dptr_pro //对指针进行操作 不近扫描 之后跳出
jmp key_dptr_pro //对指针进行操作 不近扫描 之后跳出
jmp key_dptr_pro //对指针进行操作 不近扫描 之后跳出
jmo key_scan_pro //近按键扫描 对指针操作
扫描方法就是一种了,主程序都采用分时复用了,其它程序都得分时复用了。
明天来说一下按键扫描,在论坛中戒指320写的键盘程序就是分时复用的典型应用,没事多去踩下
我俩同事哈哈……:lol |