单片机基础(5)

2019-03-28 17:18

MOV COUNT#5 LJMP DK

K6: CJNE A#0BHK7 MOV COUNT#9 LJMP DK

K7: CJNE A#07HK8 MOV COUNT#13 K8: NOP LJMP DK

SW2: MOV P3#0FFH CLR P3.6 MOV AP3 ANL A#0FH XRL A#0FH JZ SW3

LCALL DELAY10MS JZ SW3 MOV AP3 ANL A#0FH

CJNE A#0EHK9 MOV COUNT#2 LJMP DK

K9: CJNE A#0DHKA MOV COUNT#6 LJMP DK

KA: CJNE A#0BHKB MOV COUNT#10 LJMP DK

KB: CJNE A#07HKC MOV COUNT#14 KC: NOP LJMP DK

SW3: MOV P3#0FFH CLR P3.7 MOV AP3 ANL A#0FH XRL A#0FH JZ SW4

LCALL DELAY10MS JZ SW4 MOV AP3 ANL A#0FH

CJNE A#0EHKD MOV COUNT#3

LJMP DK

KD: CJNE A#0DHKE MOV COUNT#7 LJMP DK

KE: CJNE A#0BHKF MOV COUNT#11 LJMP DK

KF: CJNE A#07HKG MOV COUNT#15 KG: NOP LJMP DK

SW4: LJMP PANDUAN

DK: RET

;;;;;;;;;;显示程序;;;;;;;;;;

XIANSHI: MOV ACOUNT MOV DPTR#TABLE MOVC A@A+DPTR MOV P0A LCALL DELAY SK: MOV AP3 ANL A#0FH XRL A#0FH JNZ SK RET

;;;;;;;;;;10ms延时程序;;;;;;;;;; DELAY10MS: MOV R6#20 D1: MOV R7#248 DJNZ R7$ DJNZ R6D1 RET

;;;;;;;;;;200ms延时程序;;;;;;;;;; DELAY: MOV R5#20

LOOP: LCALL DELAY10MS DJNZ R5LOOP RET

;;;;;;;;;;共阴码表;;;;;;;;;;

TABLE: DB 3FH06H5BH4FH66H6DH7DH07H DB 7FH6FH77H7CH39H5EH79H71H ;;;;;;;;;;结束标志;;;;;;;;;; END

八、C语言源程序

#include

unsigned char code table[]={0x3f0x660x7f0x39

0x060x6d0x6f0x5e 0x5b0x7d0x770x79 0x4f0x070x7c0x71}; void main(void)

{ unsigned char ijkkey; while(1)

{ P3=0xff; //给P3口置1//

P3_4=0; //给P3.4这条线送入0// i=P3;

i=i&0x0f; //屏蔽低四位//

if(i!=0x0f) //看是否有按键按下// { for(j=50;j>0;j--) //延时// for(k=200;k>0;k--);

if(i!=0x0f) //再次判断按键是否按下//

{ switch(i) //看是和P3.4相连的四个按键中的哪个// { case 0x0e: key=0; break;

case 0x0d: key=1; break;

case 0x0b: key=2; break;

case 0x07: key=3; break; }

P0=table[key]; //送数到P0口显示// } }

P3=0xff;

P3_5=0; //读P3.5这条线// i=P3;

i=i&0x0f; //屏蔽P3口的低四位//

if(i!=0x0f) //读P3.5这条线上看是否有按键按下// { for(j=50;j>0;j--) //延时// for(k=200;k>0;k--);

i=P3; //再看是否有按键真的按下// i=i&0x0f; if(i!=0x0f)

{ switch(i) //如果有显示相应的按键// { case 0x0e: key=4;

break;

case 0x0d: key=5; break;

case 0x0b: key=6; break;

case 0x07: key=7; break; }

P0=table[key]; //送入P0口显示// } }

P3=0xff;

P3_6=0; //读P3.6这条线上是否有按键按下// i=P3; i=i&0x0f; if(i!=0x0f)

{ for(j=50;j>0;j--) for(k=200;k>0;k--); i=P3; i=i&0x0f; if(i!=0x0f) { switch(i) { case 0x0e: key=8; break;

case 0x0d: key=9; break;

case 0x0b: key=10; break;

case 0x07: key=11; break; }

P0=table[key]; } }

P3=0xff;

P3_7=0; //读P3.7这条线上是否有按键按下// i=P3;

i=i&0x0f; if(i!=0x0f)

{ for(j=50;j>0;j--) for(k=200;k>0;k--); i=P3; i=i&0x0f; if(i!=0x0f) { switch(i) { case 0x0e: key=12; break;

case 0x0d: key=13; break;

case 0x0b: key=14; break;

case 0x07: key=15; break; }

P0=table[key]; } } } }

九、注意事项

在硬件电路中,要把8联拨动拨码开关JP2拨下,把8联拨动拨码开关JP3拨上去

C51矩阵键盘

在一个4乘4的矩阵键盘中,本人的基本识别程序。。。(P1口低四位对应键盘行线,高四位对应键盘列线,P2口为6个动态LED数码管)

#i nclude #i nclude void delay(unsigned int i);

const unsigned char leddigit[12]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,

0x20,0x60,0xff,0xdf}; /* 字符 0-9 编码,0xff为关显示,0xdf为小数点 */

#define disp(a,b) P2=~(1<<(a));P0=leddigit[b] #define uchar unsigned char


单片机基础(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:梁希优秀学子奖奖励办法(林科)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: