找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1565|回复: 0
打印 上一主题 下一主题
收起左侧

单片机矩阵键盘用Proteus仿真在数码管显示

[复制链接]
跳转到指定楼层
楼主
矩阵键盘用Proteus仿真在数码管显示


单片机源程序如下:
  1. /*******************************************************************************  
  2. 文件名称: main.c
  3. 作 者:   
  4. 版 本:    V1.00
  5. 说 明:    矩阵键盘扫描实验
  6. 修改记录:  
  7. *******************************************************************************/
  8. /*******************************************************************************   
  9. * 功能描述:                                                              *
  10. *          扫描矩阵键盘                                                  *
  11. *          当有键按下时按照按键的位置                                    *
  12. *          显示当前的键值

  13. *接线说明:P00~P07-SA~SG,P10~P13-R1~R4,P14~P17-C1~C4,P20-C0                                               
  14. *******************************************************************************/
  15. #include <reg52.h>
  16. #include<intrins.h>

  17. #define uchar unsigned char
  18. #define uint unsigned int

  19. #define PSEG P0
  20. #define PKEY P1

  21. sbit C0  = P2^0;//位定义

  22. void delayms(uint);
  23. uchar scan(void);

  24. uchar code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  25. /**********主函数******************************************/
  26. void main(void)
  27. {
  28.         uchar key;
  29.         C0=1;
  30.         while(1)
  31.         {
  32.                 key=scan();     //读取键盘值
  33.                 if(key!=16)
  34.                 PSEG=seg[key];  //显示
  35.         }
  36. }
  37. /***********延时函数***************************************/
  38. void delayms(uint j)
  39. {
  40. uchar i;
  41. for(;j>0;j--)
  42.           {
  43.          i=250;
  44.             while(--i);
  45.             i=249;
  46.             while(--i);
  47.            }
  48. }
  49. /***********键盘扫描函数***********************************/
  50. uchar scan(void)
  51. {
  52. uchar k=16,m,n,in;
  53. PKEY=0xf0;                //扫描所有行
  54. if((PKEY&0xf0)!=0xf0)
  55.         {
  56.         for(m=0;m<4;m++)
  57.                 {
  58.                  PKEY=~(0x01<<m);
  59.                  for(n=0;n<4;n++)
  60.                         {
  61.                          in=PKEY;
  62.                          in=in>>(4+n);
  63.                          if((in&0x01)==0)
  64.                                 {
  65.                                  delayms(10);
  66.                                  if((in&0x01)==0){k=n+m*4;break;}
  67.                                 }
  68.                         }
  69.                  if(k!=16){break;}
  70.                 }
  71.         }
  72. return(k);
  73. }
复制代码

所有资料51hei提供下载:
Proteus.zip (24.5 KB, 下载次数: 28)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表