• 大小: 176KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签:

资源简介

基于51单片机3x4拨号系统,附加详细代码注释讲解,给大家带来方便

资源截图

代码片段和文件信息

#include
#include 
#define null
#define u8  unsigned  char
#define u16 unsigned  long int 
unsigned char h=0;
sbit LCDEN=P3^4;
sbit RS=P3^5;
sbit RW=P3^6;
sbit BF=P0^7;
sbit dx=P2^0;
sbit wx=P2^1;
u8 ycount=0;
u8 key=12;//按键号,初值设置为12,目的是:没有按键按下时返回12;
u8 code keyval[]=“123456789*0#“; //按键对应的符号 unsigned int code chr1[]={7890456012300000};
unsigned char code chr2[]=“input number:“;
unsigned char code chr3[100];
//////////////////// 延时函数/////////////////////////////////

void delay(unsigned int xms)
{
int ij;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
////////////////扫描获取按键值函数/////////////////////////////

u8 keypad4_3()//按键扫描函数:要去抖,若有按键按下,返回对应的按键值(0-11)没有按键按下返回12
{
u8 irowtemp;

          //若不设初值(默认值为0),没有按键按下时,将返回0,会误认为0被按下  
row=0xef; //从第一行开始      
for(i=0;i<4;i++)
{
P1=0xff;  
P1=row; //第i行信号,对应行为低,其他全为高
row=_crol_(row1);    //生成下一行信号
temp=P1; //读入扫描信号
temp=temp&0x07; //屏蔽高5位信号,只保留低3位列信号 
if(temp!=0x07)//有按键被按下,因为第i行某列有按键按下,则低3位中有一位为低  
  {  
delay(20);  //延时去抖
temp=P1;  
temp=temp&0x07;  
if(temp!=0x07)   //再次确认有按键被按下
   {  
         switch(temp)  //根据低3位列信号,判断哪个按键被按下
            {  
             case 0x06:key=0+3*i;break; //第i行第1列按键被按下 
                case 0x05:key=1+3*i;break; //第i行第2列按键被按下  
                case 0x03:key=2+3*i;break; //第i行第3列按键被按下     
            }

do
{
temp=P1;       //再次扫描按键
   temp=temp&0x07;  
   }while(temp!=0x07); //等待按键释放   
   }  
     }
}  
return(key);//扫面结束,返回按键值
}

///////////////////////////////////////////////////////////////////////




//////////////////////////////4x4按键扫描//////////////////////////////////
u8 keypad4_4()//按键扫描函数:要去抖,若有按键按下,返回对应的按键值(0-15)没有按键按下返回16
{
u8 irowtemp;
u8 key=16;//按键号,初值设置为16,目的是:没有按键按下时返回16;
          //若不设初值(默认值为0),没有按键按下时,将返回0,会误认为0被按下  
row=0xef; //从第一列开始      
for(i=0;i<4;i++)
{
P1=0xff;  
P1=row; //第i列信号,对应列为低,其他全为高
row=_crol_(row1);    //生成下一列信号
temp=P1; //读入扫描信号
temp=temp&0x0f; //屏蔽高4位列信号,只保留低4位行信号 
if(temp!=0x0f)//有按键被按下,因为第i列某行有按键按下,则低4位中有一位为低  
  {  
delay(20);  //延时去抖
temp=P1;  
temp=temp&0x0f;  
if(temp!=0x0f)   //再次确认有按键被按下
   {  
         switch(temp)  //根据低4位行信号,判断哪个按键被按下
            {  
             case 0x0e:key=0+i;break; //第i列第1行按键被按下 
                case 0x0d:key=4+i;break; //第i列第2行按键被按下  
                case 0x0b:key=8+i;break; //第i列第3行按键被按下
case 0x07:key=12+i;      //第i列第4行按键被按下 
            }

do
{
temp=P1;       //再次扫描按键
   temp=temp&0x0f;  
   }while(temp!=0x0f); //等待按键释放   
   }  
     }
}  
return(key);//扫面结束,返回按键值
}

//////////////////////////////////////////////////////////////////////////
unsigned char DectectBusyBit(void)//状态判断函数(忙/闲?)
{   
bit result;
P0 = 0xff; //读状态前先置高电平,防止误判
RS = 0;
delay(5);
    RW = 1;
LCDEN = 1;
delay(5);
result=BF; //若LCM忙则反复测试在此处原地踏步;当LCM闲时,才往下继续
LCDEN = 0;
return resu

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2019-02-24 14:05  3x4拨号\
     文件      126487  2018-10-21 20:50  3x4拨号\3x4电话.DSN
     文件         742  2018-11-05 23:37  3x4拨号\3x4电话.PWI
     文件      132396  2018-10-16 23:47  3x4拨号\Last Loaded 3x4电话.DBK
     目录           0  2019-02-24 14:05  3x4拨号\project\
     文件        7022  2018-10-16 20:00  3x4拨号\project\34text.c
     文件         742  2018-10-17 10:35  3x4拨号\project\3x4电话.PWI
     文件        2074  2018-10-06 17:50  3x4拨号\project\4x4矩阵按键扫描.c
     文件      132396  2018-10-16 23:47  3x4拨号\project\Last Loaded 3x4电话.DBK
     文件      127682  2018-10-10 08:48  3x4拨号\project\Last Loaded 液晶1602.DBK
     文件      124283  2018-10-06 15:52  3x4拨号\project\Last Loaded 矩阵按键扫描keypad4_4.DBK
     目录           0  2019-02-24 14:05  3x4拨号\project\Listings\
     文件       14151  2018-10-16 18:32  3x4拨号\project\Listings\34text.lst
     文件        4459  2018-10-06 17:46  3x4拨号\project\Listings\4x4矩阵按键扫描.lst
     文件       14138  2018-10-21 21:40  3x4拨号\project\Listings\STARTUP.lst
     文件       13401  2018-10-21 21:40  3x4拨号\project\Listings\text6.lst
     文件       18915  2018-10-21 21:40  3x4拨号\project\Listings\text6.m51
     文件        4458  2018-10-06 15:45  3x4拨号\project\Listings\定时扫描.lst
     文件         613  2018-10-06 16:29  3x4拨号\project\Listings\矩阵按键定时扫描.lst
     目录           0  2019-02-24 14:05  3x4拨号\project\objects\
     文件       11625  2018-10-16 18:32  3x4拨号\project\objects\34text.obj
     文件        4929  2018-10-06 17:46  3x4拨号\project\objects\4x4矩阵按键扫描.obj
     文件         819  2018-10-21 21:40  3x4拨号\project\objects\STARTUP.obj
     文件       13317  2018-10-21 21:40  3x4拨号\project\objects\text6
     文件        1252  2018-10-21 21:40  3x4拨号\project\objects\text6.build_log.htm
     文件        2772  2018-10-21 21:40  3x4拨号\project\objects\text6.hex
     文件         102  2018-10-21 21:40  3x4拨号\project\objects\text6.lnp
     文件       14518  2018-10-21 21:40  3x4拨号\project\objects\text6.obj
     文件        4810  2018-10-06 15:45  3x4拨号\project\objects\定时扫描.obj
     文件        6376  2015-05-29 12:09  3x4拨号\project\STARTUP.A51
     文件        6001  2018-10-17 10:16  3x4拨号\project\text6.c
............此处省略5个文件信息

评论

共有 条评论