找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机矩阵键盘数码管显示代码

[复制链接]
跳转到指定楼层
楼主
  1. #include <REGX51.H>
  2. #include<intrins.h>
  3. unsigned code LedChar[16]={
  4.     0xc0,0xf9,0xa4,0xb0,
  5.         0x99,0x92,0x82,0xf8,
  6.         0x80,0x90,0x88,0x83,
  7.         0xc6,0xa1,0x86,0x8e
  8.         };
  9. void KeyScan_First_Row();
  10. void delay(unsigned int);
  11. void KeyScan();
  12. unsigned char Key_val=1;
  13. void main()
  14. {
  15.   EA = 1;
  16.   EX0 = 1;
  17.   EX1 = 1;
  18.   IT0 = 1;
  19.   IT1 = 1;
  20.   PX0 = 0;
  21.   PX1 = 1;
  22.    while(1)
  23.   {
  24.         P0 =  0xff;
  25.      KeyScan();
  26.         P2 = LedChar[Key_val-1];
  27.   }
  28. }
  29. void InterruptInt0() interrupt 0
  30. {
  31. unsigned char temp = 0xfe;
  32. unsigned char i;
  33. for(i=0;i<10;i++)
  34. {  
  35.   P0 = temp;
  36.   delay(200);
  37.   temp = _crol_(temp,1);
  38. }
  39. }
  40. void InterruptInt1() interrupt 2
  41. {
  42. unsigned char i;
  43. for(i=0;i<4;i++)
  44.    {
  45.      P0 = 0xff;
  46.      delay(200);
  47.      P0 = 0x00;
  48.      delay(200);
  49.    }
  50. }
  51. void KeyScan_First_Row()
  52. {
  53.   unsigned char temp;
  54.   P1 = 0xef;
  55.   if(P1!=0xef)
  56.   {
  57.   delay(10);
  58.     if(P1!=0xef)
  59.     {
  60.       temp = P1&0x0f;
  61.       switch(temp)
  62.           {
  63.             case 0x0e:Key_val=1;break;
  64.                 case 0x0d:Key_val=2;break;
  65.                 case 0x0b:Key_val=3;break;
  66.                 case 0x07:Key_val=4;break;
  67.                 default:break;
  68.           }
  69.     }
  70.   }
  71. }
  72. void KeyScan()
  73. {
  74.    unsigned char temp,i;
  75.    unsigned char code Key_rows_char[]={
  76.       0xef,0xdf,0xbf,0x7f
  77.       };
  78.         for(i=0;i<4;i++)
  79.         {
  80.            P1 = Key_rows_char;
  81.            if(P1!=Key_rows_char);
  82.            {
  83.               delay(10);
  84.                   if(P1!=Key_rows_char)
  85.                   {
  86.                   temp = P1&0x0f;
  87.                   while(P1!=Key_rows_char);
  88.                   switch(temp)
  89.                     {
  90.                             case 0x0e:Key_val=4*i+1;break;
  91.                                 case 0x0d:Key_val=4*i+2;break;
  92.                                 case 0x0b:Key_val=4*i+3;break;
  93.                                 case 0x07:Key_val=4*i+4;break;
  94.                                 default:break;
  95.                         }
  96.                   }
  97.            }
  98.     }
  99. }
  100. void delay(unsigned int z)
  101. {
  102.      unsigned x, y;
  103.       for(x=z;x>0;x--)
  104.          for(y=114;y>0;y--);
  105. }
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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