ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:17.56KB ,
资源ID:11435975      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11435975.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(键盘可控流水灯资料.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

键盘可控流水灯资料.docx

1、键盘可控流水灯资料;*; 平凡单片机工作室;作者:周坚 ;功能描述:;P3.2:开始,按此键则灯开始流动(由上而下);P3.3:停止,按此键则停止流动,所有灯为暗;P3.4:上,按此键则灯由上向下流动;P3.5:下,按此键则灯由下向上流动;本例可用TOP51-2005/TOPAV-2008单片机开发平台验证;*UpDown EQU 00H ;上下行标志StartEnd EQU 01H ;起动及停止标志LAMPCODE EQU 21H ;存放流动的数据代码ORG 0000HAJMP MAINORG 30HMAIN: MOV SP,#5FHMOV P1,#0FFHCLR UpDown ;启动时处于

2、向上的状态CLR StartEnd ;启动时处于停止状态MOV LAMPCODE,#0FEH ;单灯流动的代码 LOOP: ACALL KEY ;调用键盘程序JNB F0,LNEXT ;如果无键按下,则继续ACALL KEYPROC ;否则调用键盘处理程序LNEXT: ACALL LAMP ;调用灯显示程序AJMP LOOP ;反复循环,主程序到此结束;-DELAY: MOV R7,#10D1: MOV R6,#100DJNZ R6,$DJNZ R7,D1RET;-延时程序,键盘处理中调用KEYPROC:MOV A,B ;从B寄存器中获取键值JB ACC.2,KeyStart ;分析键的代码,

3、某位被按下,则该位为1JB ACC.3,KeyOverJB ACC.4,KeyUpJB ACC.5,KeyDownAJMP KEY_RETKeyStart:SETB StartEnd ;第一个键按下后的处理AJMP KEY_RETKeyOver:CLR StartEnd ;第二个键按下后的处理AJMP KEY_RETKeyUp: SETB UpDown ;第三个键按下后的处理AJMP KEY_RETKeyDown:CLR UpDown ;第四个键按下后的处理KEY_RET:RETKEY: CLR F0 ;清F0,表示无键按下。ORL P3,#00111100B ;将P3口的接有键的四位置1MO

4、V A,P3 ;取P3的值ORL A,#11000011B ;将其余4位置1CPL A ;取反JZ K_RET ;如果为0则一定无键按下ACALL DELAY ;否则延时去键抖ORL P3,#00111100BMOV A,P3ORL A,#11000011BCPL AJZ K_RETMOV B,A ;确实有键按下,将键值存入B中SETB F0 ;设置有键按下的标志K_RET:ORL P3,#00111100B ;此处循环等待键的释放MOV A,P3ORL A,#11000011BCPL AJZ K_RET1 ;直到读取的数据取反后为0说明键释放了,才从键盘处理程序中返回AJMP K_RETK_

5、RET1: RET;- D500MS: ;流水灯的延迟时间PUSH PSWSETB RS0MOV R7,#5 ;如果用实验仿真板,该值可根据你的机器运行情况更改,在1-255之间D51: MOV R6,#250D52: MOV R5,#200D53: DJNZ R5,D53DJNZ R6,D52DJNZ R7,D51POP PSWRET ;-LAMP:JB StartEnd,LampStart ;如果StartEnd=1,则启动MOV P1,#0FFHAJMP LAMPRET ;否则关闭所有显示,返回LampStart:JB UpDown,LAMPUP ;如果UpDown=1,则向上流动MOV

6、 A,LAMPCODERL A ;向上移动实际就是左移位MOV LAMPCODE,A MOV P1,ALCALL D500MSAJMP LAMPRETLAMPUP: MOV A,LAMPCODERR A ;向下流动实际就是右移MOV LAMPCODE,AMOV P1,ALCALL D500MSLAMPRET:RETEND这个是按键流水灯的汇编代码,当然还有很多问题的。没办法,也不想弄,现在就想快点把C入门的书看完,把板子光盘上的例子都跑一下,然后就研究一下RTXtiny。为了9月做一下准备。我的比较长期的目标就是把这个东西移植到MSP430F135上面_ 对了,这个例子成功了(好像我就没贴过不

7、成功的例子)updownBIT00H;上下显示标志startendBIT01H;起停标志LAMPCODEEQU21H;存放流水灯的代码ORG0000HAJMPMAINORG30HMAIN:MOVSP,#5FH;设置堆栈CLRupdownCLRstartendMOVLAMPCODE,#0FEH;单灯流动代码LOOP:ACALLKEY;调用键盘程序JNBF0,LNEXT;如果无键按下,则继续;某位位0跳转ACALLKEYPROC;否则调用键盘处理程序LNEXT:ACALLLAMP;调用流水灯显示程序AJMPLOOP;循环,主程序结束;延时程序DELAY:MOVR7,#100D1:MOVR6,#10

8、0DJNZR6,$DJNZR7,D1RET;键盘处理程序KEYPROC:MOVA,B;从B寄存器中取键值JBACC.2,KEYSTART;分析键代码,如果某位被按下,则该位为1JBACC.3,KEYOVER ;JB:某位为1跳转JBACC.4,KEYUPJBACC.5,KEYDOWNAJMPKEY_RETKEYSTART:SETBstartend;第一个按键被按下的处理AJMPKEY_RETKEYOVER:CLRstartend;第二个按键被按下的处理AJMPKEY_RETKEYUP:SETBupdown;第三个按键AJMPKEY_RETKEYDOWN:CLRupdownKEY_RET:RET

9、;读键值子程序KEY:CLRF0;PSW中的用户状态字,清F0,表示无键按下ORLP3,#00111100B;P3口中间4位置一MOVA,P3;取P3口状态(读键值)ORLA,#11000011B;屏蔽其余四位CPLA;取反,便于检查键值JZK_RET;如为0,无键按下;A为0跳转CALLDELAY;有按键按下,去抖ORLP3,#00111100BMOVA,P3ORLA,#11000011BCPLAJZK_RET;如果为0,无键按下,返回MOVB,A;否则键值存入B寄存器SETBF0;置位F0,表示有键按下K_RET:ORLP3,#0011100B;此处循环等待按键释放MOVA,P3ORLA,

10、#11000011BCPLAJZK_RET1;数据为0说明按键释放;A为0跳转AJMPK_RET;如果不为0,继续等待K_RET1:CALLDELAY;消除后沿抖动RET;流水灯延时子程序D500:MOVR7,#250D2:MOVR6,#250 DJNZR6,$;减1不为0跳转DJNZR7,D2RET;流水灯子程序LAMP:JBstartend,lampstart;如果startend1则启动;某位为1跳转MOVP1,#0FFH;否则关闭显示AJMPLAMPRET;返回lampstart:JBupdown,LAMPUP;如果updown=1,向上流动显示MOVA,LAMPCODE;循环左移RL

11、AMOVLAMPCODE,AMOVP1,A;显示LCALLD500AJMPLAMPRETLAMPUP:MOVA,LAMPCODERRA;循环右移MOVLAMPCODE,AMOVP1,ALCALLD500LAMPRET:RETEND不多说了:按键流水灯对应的C代码/实现按键控制流水灯功能/P3.2:开始,按此键则开始/P3.3:停止/P3.4:向上流动/P3.5:向下流动#include#include/包含了循环移位的函数原型#define uchar unsigned char#define uint unsigned intbit updown=0;/上下流动标志位bit startend

12、=0;/启动停止标志位/*我是无敌分割线*/ms延时子函数void mdelay(uint delay)uint i;for(;delay0;delay-)for(i=0;i124;i+);/*键值处理子函数*/void kproce(uchar kvalue)if(kvalue&0x04)=0)startend=1;if(kvalue&0x08)=0)startend=0;if(kvalue&0x10)=0)updown=1;if(kvalue&0x20)=0)updown=0;/*取键值子函数*/uchar key()uchar kvalue;uchar tmp;P3|=0x3c;/P3口

13、中间4位置一kvalue=P3;/取P3状态kvalue|=0xc3;/屏蔽头尾各2位if(kvalue=0xff)return(0);/没有键按下,返回0mdelay(10);/否则有键按下,取抖kvalue=P3;kvalue|=0xc3;/屏蔽其他位if(kvalue=0xff)return(0);/无按键,返回0for(;)/否则,有按键按下,等待按键放开tmp=P3;if(tmp|0xc3)=0xff)break;return(kvalue);/返回键值/*主函数*/void main()uchar kvalue;/存放键值uchar lampcode;/存放流水灯代码P1=0xff;/熄灭所有灯lampcode=0xfe;for(;)kvalue=key();/调用键盘程序,取得键值if(kvalue)/如果键值不为0kproce(kvalue);/键值处理程序if(startend)/开始标志为1,则显示流动代码P1=lampcode;if(updown)/上下流动标志lampcode=_cror_(lampcode,1);elselampcode=_crol_(lampcode,1);mdelay(500);/延时500mselseP1=0xff;/开始标志为0,关闭显示

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1