




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、硬件PIC16F883芯片,10个按键,4位数码管。【芯片引脚】 【数码管连接】PORTC连接数码管的8段LED,PORTA<3:0>连接数码管的4个共阴极(控制选通位)。【按键连接】 按键扫描程序在上一篇博文里面有说明,现在还是使用上面的扫面方式(代码都是一样的)。用记录按键按下和弹起的时间判断是不是长按和双击。TMR1设置,1:4分频、1:8预分频,计数周期为8uS。TMR1溢出一次时间为0.524288 S keypress记录TMR1溢出的次数。keypress大于等于2就跳出检测,认为他是长按(时间为1.048576S)。keypress<1 且
2、keyrelease <1 ,再次按下的keypress<1就认为是双击。如下图:KP按键按下,KR按键弹起。【实现代码】?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131
3、141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132
4、142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133
5、143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134
6、144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135
7、145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136
8、146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137
9、147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138
10、148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139
11、14915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992#include<p16f883.inc> _CONFIG
12、 _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT _CONFIG _CONFIG2, _WRT_OFF & _BOR21V udata_shr counter res 1 ;计数
13、个位 counter0 res 1 ;计数十位 counter1 res 1 ;扫描按键变量 counter2 res 1 ;延时程序微调参数 key_state res 1 ;按键状态 keynum res 1 ;按键标号 swap res 1 ;确认按键转换值 keypress res 1 keypressbak res 1 keyrelease res 1 LED1 res 1 LED2 res 1 LED3 res 1 LED4 res 1
14、60; UDATA counter3 res 1 counter4 res 1 sign res 1 reset code 0x0000 pagesel start goto start int_vector code 0x0004 code start banksel ANSEL ;设置PORTA为数字模式 clrf ANSEL banksel ANSELH ;设置PO
15、RTB为数字模式 clrf ANSELH banksel TRISB ;设置PORTB为输入模式 movlw b'11111111' movwf TRISB banksel WPUB ;设置PORTB弱上拉 movlw b'11111111' movwf WPUB banksel OPTION_REG movlw b'01000101' ;TMR0 64分频 movwf OPTION_REG banksel T1CON movl
16、w b'10010001' ;打开TMR1,设置1:8预分频,内部时钟源1:4分频 movwf T1CON banksel TRISA ;设置PORTA<3:0>为输出,接数码管的共阴极 movlw b'11110000' movwf TRISA banksel PORTA clrf PORTA banksel TRISC movlw b'00000000' ;设置PORTC为输出,接8段数码管 movwf TRISC clrf cou
17、nter1 loop movlw HIGH Table1 movwf PCLATH movf counter1,0 call Table1 banksel TRISB movwf TRISB movf counter1,0 call Table1 banksel PORTB movwf PORTB movf PORTB,0 movwf key_state movlw b'11001000' io
18、rwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto case1 incf counter1,1 movf counter1,0 call Table1 banksel TRISB movwf TRISB movf counter1,0
19、0;call Table1 banksel PORTB movwf PORTB movf PORTB,0 ;读取I/O状态 movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto case2
20、160;incf counter1,1 movf counter1,0 call Table1 banksel TRISB movwf TRISB movf counter1,0 call Table1 banksel PORTB movwf PORTB movf PORTB,0 ;读取I/O状态 movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call
21、 Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto case3 incf counter1,1 movf counter1,0 call Table1 banksel TRISB movwf TRISB movf counter1,0 call Table1 banksel PORTB movwf PORTB movf PORT
22、B,0 ;读取I/O状态 movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto case4 goto continue case1 btfsc key_state,4 goto ke
23、y2 movlw d'1' movwf keynum call DealKeyPress goto continue key2 btfsc key_state,2 goto key3 movlw d'2' movwf keynum call DealKeyPress goto continue key3 btfsc key_state,1 goto key4 movlw d'3' movw
24、f keynum call DealKeyPress goto continue key4 btfsc key_state,0 goto continue movlw d'4' movwf keynum call DealKeyPress goto continue case2 - 下面代码实现K10K8K5的按键处理
25、 btfsc key_state,2 goto key8 movlw d'10' movwf keynum call DealKeyPress goto continue - 处理K8 key8 btfsc key_state,1 goto key5 movlw d'8' movwf keynum call DealKeyPress goto continue - 处理K5 key5&
26、#160;btfsc key_state,0 goto case3 movlw d'5' movwf keynum call DealKeyPress goto continue case3 - 处理K6/K9 btfsc key_state,1 goto key6 movlw d'9' movwf keynum call DealKeyPress goto continue k
27、ey6 btfsc key_state,0 goto case4 movlw d'6' movwf keynum call DealKeyPress goto continue case4 - 处理K7 btfsc key_state,0 goto continue movlw d'7' movwf keynum call DealKeyPress continue c
28、all display clrf counter1 goto loop - 按键去抖,约8mS delay movlw d'4' movwf counter2 LOOP2 banksel TMR0 clrf TMR0 LOOP1 banksel INTCON btfss INTCON,T0IF goto LOOP1 bcf INTCON,T0IF d
29、ecfsz counter2,1 goto LOOP2 return delay2 incfsz counter3,1 goto delay2 return - 按键处理程序 DealKeyPress clrf LED1 clrf LED2 clrf LED3 clrf LED4 call delay banksel TMR1H
30、 clrf TMR1H banksel TMR1L clrf TMR1L clrf keypress presstime banksel PIR1 btfss PIR1,TMR1IF goto next bcf PIR1,TMR1IF incf keypress movlw d'2' subwf keypress,0 banksel STATUS btfsc STATUS,C goto longpress next
31、60;movf counter1,0 call Table1 banksel TRISB movwf TRISB banksel PORTB movwf PORTB movf PORTB,0 ;读取I/O状态 movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swa
32、p,1 incfsz swap,1 goto presstime call delay banksel TMR1H clrf TMR1H banksel TMR1L clrf TMR1L clrf keyrelease releasetime banksel PIR1 btfss PIR1,TMR1IF goto next1 bcf PIR1,TMR1IF incf keyrelease movlw
33、 d'1' subwf keyrelease,0 banksel STATUS btfsc STATUS,C goto click next1 movf counter1,0 call Table1 banksel TRISB movwf TRISB banksel PORTB movwf PORTB movf PORTB,0 ;读取I/O状态 movwf key_state movlw b'11001000' i
34、orwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto over goto releasetime over call delay banksel TMR1H clrf TMR1H banksel TMR1L clrf TMR1L clrf keypress presstime1
35、60;banksel PIR1 btfss PIR1,TMR1IF goto next2 bcf PIR1,TMR1IF incf keypress movlw d'1' subwf keypress,0 banksel STATUS btfsc STATUS,C goto click next2 movf counter1,0 call Table1 banksel TRISB movwf TRISB banksel PORTB
36、 movwf PORTB movf PORTB,0 ;读取I/O状态 movwf key_state movlw b'11001000' iorwf key_state,1 movf counter1,0 call Table1 xorwf key_state,0 movwf swap comf swap,1 incfsz swap,1 goto presstime1 movf keynum,0
37、0; ;双击 movwf LED1 movlw d'10' movwf LED2 incf counter goto back longpress
38、60; ;长按 movf keynum,0 movwf LED2 movlw d'10' movwf LED1 goto back click ;单击 m
39、ovf keynum,0 movwf LED1 movwf LED2 back call CountNum return - 按键计数 CountNum movlw d'9' subwf counter,0 banksel STATUS btfsc STATUS,C goto add incf counter g
40、oto over1 add incf counter0 clrf counter movlw d'10' subwf counter0,0 banksel STATUS btfsc STATUS,C goto clear goto over1 clear clrf counter0 over1 movf counter,0 movwf LED4 movf counter0,0 movwf LED3 return
41、 - 显示数码管 display banksel PORTA movlw b'11111110' movwf PORTA movf LED1,0 call Table3 banksel PORTC movwf PORTC call delay2 &
42、#160;banksel PORTA movlw b'11111101' movwf PORTA movf LED2,0 call Table3 banksel PORTC movwf PORTC call delay2 banksel PORTA movlw b'11111011' movwf PORTA movf LED3,0 call Table3 banksel PORTC movwf PORTC call delay2 banksel PORTA movlw b'11110111' movwf PORTA movf LED4,0 call Table3 banksel PORTC movwf POR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海纽约大学《语言学与语文教学》2023-2024学年第二学期期末试卷
- 海南卫生健康职业学院《中学思想政治学科课程标准与教材分析》2023-2024学年第二学期期末试卷
- 北京工业大学耿丹学院《童装设计》2023-2024学年第二学期期末试卷
- 青岛大学《分析型大数据系统》2023-2024学年第二学期期末试卷
- 北京信息职业技术学院《机器人学》2023-2024学年第二学期期末试卷
- 山东华宇工学院《供应商质量管理》2023-2024学年第二学期期末试卷
- 2025年高中信息技术学业水平考试模拟试卷四套(含答案详解)
- 安徽电气工程职业技术学院《系统设计与分析》2023-2024学年第二学期期末试卷
- 江西医学高等专科学校《公共事业管理案例分析》2023-2024学年第二学期期末试卷
- 2024年坤泰胶囊投资申请报告代可行性研究报告
- 《车载充电器》课件
- 区块链赋能金融提升交易透明度
- 2024年沈阳市三支一扶考试真题
- wps表格考试试题及答案
- 《绝经后出血》课件
- 食品合作商合同协议
- 2025年吉林省四平市梨树县中考二模历史试题(含答案)
- 生物柴油项目申报材料范文模板 (一)
- 私人店铺用工合同协议
- 猪保价合同协议
- 玉石代理销售合同协议
评论
0/150
提交评论