用51单片机中断编写的4x4键盘程序_第1页
用51单片机中断编写的4x4键盘程序_第2页
用51单片机中断编写的4x4键盘程序_第3页
用51单片机中断编写的4x4键盘程序_第4页
用51单片机中断编写的4x4键盘程序_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、用51单片机中断编写的4x4键 盘程序用51单片机中断编写的4x4键盘程序应用查询扫描编写键盘 程序,由于要给按键去抖动,程序 变得比较复杂和冗长(详见2013年 9月29日博文MSP430和AT89C51单片机4x4键盘C程 序),如果用中断编写,设置中 断响应在下降沿时执行中断,则程 序编写不用去抖动判断,所以相比 较要简单很多!下面用汇编和C语言两种方式编写4X4键盘程序! 一、汇编程序ORG 0000HLJMP MAINORG 0003hLjmp ZD0ORG 000BhLJMP TZD0ORG 0013hLjmp ZD1ORG 001BhLJMP TZD1ORG 0040HMAIN:

2、 Mov TMOD,#66hMOV TH0,#0ffhMOV TL0,#0ffhMOV TH1,#0ffhMOV TL1,#0ffhSETB EASETB ET0SETB TR0SETB ET1SETB TR1SETB IT0SETB IT1SETB EX0SETB EX1xh:mov P1,#0fehLcall Delay mov P1,#0fdh Lcall Delay mov P1,#0fbh Lcall Delay mov P1,#0f7h Lcall Delay SJMP xhZD0: JNB P1.0,dat1JNB P1.1,dat2 JNB P1.2,dat3 JNB P1.3

3、,dat4 dat1: mov P2,#06h;1sjmp ZD0R dat2: mov P2,#5bh;2sjmp ZD0R dat3: mov P2,#4fh;3sjmp ZD0R dat4: mov P2,#66h;4ZD0R: retiZD1: JNB P1.0,dat5sjmp ZD0RJNB P1.1,dat6JNB P1.2,dat7JNB P1.3,dat8dat5: mov P2,#6dh;5 0110sjmp ZD1Rdat6: mov P2,#7dh;6sjmp ZD1Rdat7: mov P2,#07h;7sjmp ZD1Rdat8: mov P2,#7fh;8ZD1R

4、: retiTZD0: JNB P1.0,dat9JNB P1.1,dat0JNB P1.2,dat10JNB P1.3,dat11dat9:mov P2,#6fh;9sjmp ZD0Rdat0:mov P2,#3fh;0sjmp ZD0Rdat10: mov P2,#77h ;Adatll: mov P2,#7ch;BTZD0R:retiTZD1: JNB P1.0,dat12JNB P1.1,dat13JNB P1.2,dat14JNB P1.3,dat15dat12: mov P2,#39h ;Csjmp TZD1Rdat13:mov P2,#5eh ;Dsjmp TZD1Rdat14:

5、mov P2,#79h ;Esjmp TZD1Rdat15:mov P2,#71h ;FTZD1R:retiDelay:mov r7,#10ddjnz r7,$ ret end20pFr fC3区1RSTimaP0.7fAD72QuF TEXTWkR210029 F1( :FL1 :F12 :Fin23圭5 6f-' 7" 8-O-iPSENALE EAF1 0F1.1P1.2P1 3P1.4F1 5P1 6P1 7P2.mP2,WA9P2.2/A10 P2.3/A11 P2.4/A12 F25VAi3 P2.6/A14 P2.7/A15P3.D/RKDF3.1HXDP3.2

6、TiTrP3.3/INTTP3.4/TDP3.5/TLP36迎P3.7/RD22也32412a-QiEQ 11 131 14f16cr>AT89C510.BB3«飞.C语言程序(扫描P1) #include"reg51.h"int yu=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;int i,j,k,time,temp,dat;void delay(time)while(time-) for(i=0;i<120;i+);void main

7、()P2=0x40;TMOD=0x66; /设定定时计数器 T0、T1为方式2 计数模式TH0=0xFF;TL0=0xFF;TH1=0xFF;TL1=0xFF;IE=0x8F; /开总中断和定时计数器两个中断,两个外中断IT0=1;IT1=1;/设置外中断为下降沿触发/打开定时计数器开始计TR0=1;TR1=1;while(1) P1=0xfe;delay(1);P1=0xfd;delay(1);P1=0xfb;delay(1);P1=0xf7;delay(1);using 1void intsvrO(void) interrupt 0(temp=P1;switch(temp) (case 0

8、xfe:key=0;break;case 0xfd:key=1;break;case 0xfb:key=2;break; case 0xf7:key=3;break;default:break;P2=yudat;void timerO(void) interrupt 1 using 1temp=P1;if(temp=0xfe) dat=4;if(temp=0xfd) dat=5;if(temp=0xfb) dat=6;if(temp=0xf7) dat=7;P2=yudat;void intsvr1(void) interrupt 2 using 1temp=P1;if(temp=0xfe)

9、dat=8;if(temp=0xfd) dat=9;if(temp=0xfb) dat=10;if(temp=0xf7) dat=11;P2=yudat;void timeH(void) interrupt 3 using 1int dat;temp=P1;switch(temp)case 0xfe:key=12;break;case 0xfd:key=13;break;case 0xfb:key=14;break;case 0xf7:key=15;break;default:break;P2=yudat;/* */三、C语言(扫描 P3的 P3.0、P3.1、P3.6、P3.7) 从这个程序

10、也可以看出51单片机I/O 口没有方向性, 输入输出都可读写,而且在一个寄存器中。注意该程 序对应电路图与上图的区别。RB3QV" 工 PW501234 5671 4 1- 1 1 1 1- 1 ppppppppXTAL2RSIU1X130pF9 R1CRYSTAL<TEXT> -530pFTEXT'Wk<TRY.T> r51OQ <TFXT:&M2AT89C511 XC2PO.O/ADO PO 1/AD1P0.2/AD2P0.3/AD3 PO 4/AD4 P05/ADS PO 8/AD6 P0.7W7P2 mAeP2.1/A9P2.2M

11、0P2.3/A11 P24W12 P2.5M13 P2.6rA14P2.7M15P3.OJRXDP31/TXDP3.2J1ZWF'3,.3W5P34n'(3P35TlP3E怛 P3.7布-23 以4 El .盟 吟 工胃口 L.12P和前程序 不同j都 诩SP3% 中断也对#include"reg51.h"sbit pp0=P3八0;sbit pp1=P3八1;sbit pp2=P3八6;sbit pp3=P3八7;int yu=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,

12、0x5e,0x79,0x71;int i,j,k,time,temp,dat;void delay(time)while(time-) for(i=0;i<120;i+);void main()P2=0x40;TMOD=0x66; /设定定时计数器 T0、T1为方式2 计数模式TH0=0xFF;TL0=0xFF;TH1=0xFF;TL1=0xFF;IE=0x8F; /开总中断和定时计数器两个 中断,两个外中断/设置外中断为下降沿触发IT0=1;IT1=1;TR0=1;TR1=1;/打开定时计数器开始计数while(1)pp0=0;delay(5);pp0=1;pp1=0;delay(5)

13、;pp1=1;pp2=0;delay(5);pp2=1;pp3=0;delay(5);pp3=1;/*以上可用下列这段代替P3=0xfe;delay(5);P3=0xfd;delay(5);P3=0xbf;delay(5);P3=0x7f;delay(5);*/void intsvr0(void) interrupt 0using 1temp=P3;switch(temp)case 0xfa:dat=0;break;case 0xf9:dat=1;break;case 0xbb:dat=2;break;case 0x7b:dat=3;break;default: break;P2=yudat;void timerO(void) interrupt 1 using 1 temp=P3;if(temp=0xee) dat=8;if(temp=0xed) dat=9;if(temp=0xaf) dat=10;if(temp=0x6f) dat=11;P2=yudat;void intsvr1(void) interrupt 2 using 3(temp=P3;if(temp=0xf6) dat=4;if(temp=0xf5) dat=5;if(temp=0xb7) d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论