1. 网站首页
  2. 社区
  3. 论坛
  4. 博客

《深入浅出玩转51单片机》配套例程(60例)

资料大小: 28710KB 所需积分: 1 下载次数: 用户评论: 0条评论,查看 上传日期: 2017-08-01 上 传 者: 夜梦星空他上传的所有资料

资料介绍

标签:单片机(11029)
深入浅出玩转51单片机书籍实例
  // 简单描述 : 本文件是行列扫描法实现矩阵按键扫描程序   /* ***************************************************** */   #include 《reg52.h》   /* ***************************************************** */   // 宏定义   /* ***************************************************** */   #define uInt16 unsigned int   #define uChar8 unsigned char   #define DATA P0 //数据口   #define KEYPORT P3 //键盘接入端口   /* ***************************************************** */   // 位定义   /* ***************************************************** */   sbit SEG_SELECT = P1^7; //段选控制端   sbit BIT_SELECT = P1^6; //位选控制端   /* ***************************************************** */   // 数组定义   /* ***************************************************** */   uChar8 code SEG_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,   0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};//段选显示表格   /* ***************************************************** */   // 全局变量定义   /* ***************************************************** */   uChar8 g_ucKeyNum = 16; //键值   /* ***************************************************** */   // 函数名称:MelayMS()   // 函数功能:毫秒延时   // 入口参数:延时毫秒数(ValMS)   // 出口参数:无   /* ***************************************************** */   void DelayMS(uInt16 ValMS)   {   uInt16 uiVal,ujVal;   for(uiVal = 0; uiVal 《 ValMS; uiVal++)   for(ujVal = 0; ujVal 《 121; ujVal++);   }   /* ***************************************************** */   // 函数名称:ScanKey()   // 函数功能:矩阵按键扫描   // 入口参数:无   // 出口参数:无   /* ***************************************************** */   void ScanKey(void)   {   uChar8 ucTemp;   KEYPORT = 0xfe; //检测第一行   ucTemp = KEYPORT; //读取键盘端口数值   if(ucTemp != 0xfe) //若是不等于0xF0表示有按键按下   {   DelayMS(5); //去抖   ucTemp = KEYPORT; //读端口值   if(ucTemp != 0xfe) //再次判断   {   ucTemp = KEYPORT; //取键值   switch(ucTemp) //判断键值对应键码   {   case 0xee:g_ucKeyNum = 0;break;   case 0xde:g_ucKeyNum = 1;break;   case 0xbe:g_ucKeyNum = 2;break;   case 0x7e:g_ucKeyNum = 3;break;   }   while(KEYPORT != 0xfe); //按键释放检测   }   }   KEYPORT = 0xfd;   ucTemp = KEYPORT;   if(ucTemp != 0xfd)   {   DelayMS(5);   ucTemp = KEYPORT;   if(ucTemp != 0xfd)   {   ucTemp = KEYPORT;   switch(ucTemp)   {   case 0xed:g_ucKeyNum = 4;break;   case 0xdd:g_ucKeyNum = 5;break;   case 0xbd:g_ucKeyNum = 6;break;   case 0x7d:g_ucKeyNum = 7;break;   }   while(KEYPORT != 0xfd);   }   }   KEYPORT = 0xfb;   ucTemp = KEYPORT;   if(ucTemp != 0xfb)   {   DelayMS(5);   ucTemp = KEYPORT;   if(ucTemp != 0xfb)   {   ucTemp = KEYPORT;   switch(ucTemp)   {   case 0xeb:g_ucKeyNum = 8;break;   case 0xdb:g_ucKeyNum = 9;break;   case 0xbb:g_ucKeyNum = 10;break;   case 0x7b:g_ucKeyNum = 11;break;   }   while(KEYPORT != 0xfb);   }   }   KEYPORT = 0xf7;   ucTemp = KEYPORT;   if(ucTemp != 0xf7)   {   DelayMS(5);   ucTemp = KEYPORT;   if(ucTemp != 0xf7)   {   ucTemp = KEYPORT;   switch(ucTemp)   {   case 0xe7:g_ucKeyNum = 12;break;   case 0xd7:g_ucKeyNum = 13;break;   case 0xb7:g_ucKeyNum = 14;break;   case 0x77:g_ucKeyNum = 15;break;   }   while(KEYPORT != 0xf7);
《深入浅出玩转51单片机》配套例程(60例)
 

用户评论

查看全部 条评论
发表评论请先 , 还没有账号?免费注册

发表评论

用户评论
技术交流、我要发言! 发表评论可获取积分! 请遵守相关规定。
上传电子资料

88lifa利发国际娱乐

百度360搜索搜狗搜索