预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<STC12C5A.h> //键盘扫描 unsignedchars60,s61,s62,s63,temp; //定义四个按键 voiddelay(unsignedintn) {unsignedinta,b; for(a=0;a<10*n;a++) for(b=0;b<75;b++); //1ms延时函数 } voidmain(void) { voidkeyask(void); unsignedchari,d[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//1-9数字编码 P1M1&=0xef; P1M0|=0x10;//推挽输出,以驱动蜂鸣器 P1=0x00; P2=0x10; while(1) { keyask();//按键扫描 if((s60+s61+s62+s63)!=0) { if(s60==1) P0=d[1]; if(s61==1) P0=d[2]; if(s62==1) P0=d[3]; if(s63==1) P0=d[4]; for(i=0;i<20;i++)//每按一次,响一次 { P1=0x10; delay(1); P1=0x00; delay(1); } } } } voidkeyask(void)//按键扫描函数 {s60=0; s61=0; s62=0; s63=0; P3=0xb0; //第一行扫描 temp=P3&0x30; if(temp!=0x30) { delay(10); if(temp!=0x30) //消除抖动 switch(temp) { case(0x20):s60=1;while(!(P3&0x10));break;//while消除松开抖动 case(0x10):s61=1;while(!(P3&0x20));break; } } P3=0x70; // 第二行扫描 temp=P3&0x30; if(temp!=0x30) { delay(10); if(temp!=0x30) switch(temp) { case(0x20):s62=1;while(!(P3&0x10));break; case(0x10):s63=1;while(!(P3&0x20));break; } } }