找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机按键控制数码管源程序

[复制链接]
跳转到指定楼层
楼主
ID:368707 发表于 2018-7-11 15:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按键控制数码管

单片机源程序如下:
  1. # include <reg52.h>
  2.         sbit ADDR0 = P1^0;
  3.         sbit ADDR1 = P1^1;
  4.         sbit ADDR2 = P1^2;
  5.         sbit ADDR3 = P1^3;
  6.     sbit ENLED = P1^4;
  7.         sbit KEY_IN_1 = P2^4;
  8.     sbit KEY_IN_2 = P2^5;
  9.         sbit KEY_IN_3 = P2^6;
  10.     sbit KEY_IN_4 = P2^7;
  11.         sbit KEY_OUT_1 = P2^3;
  12.     sbit KEY_OUT_2 = P2^2;
  13.         sbit KEY_OUT_3 = P2^1;
  14.     sbit KEY_OUT_4 = P2^0;

  15.         unsigned char code LedChar[] = {
  16.         0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E
  17.         };
  18.         unsigned char KeySta[4][4] = {
  19.         {1,1,1},{1,1,1},{1,1,1},{1,1,1}
  20.         };
  21.         void main()
  22.         {
  23.           unsigned char i,j;
  24.           unsigned char backup[4][4] ={
  25.         {1,1,1},{1,1,1},{1,1,1},{1,1,1}
  26.         } ;

  27.         EA = 1;
  28.         ENLED = 0;
  29.         ADDR3 = 1;
  30.         ADDR2 = 0;
  31.         ADDR1 = 0;
  32.         ADDR0 = 0;
  33.         TMOD = 0x01;
  34.         TH0 = 0xFc;
  35.         TL0 = 0x67;
  36.         ET0=1;
  37.         TR0 = 1;

  38.         P0 = LedChar[0];
  39.        
  40.         while(1)
  41.         {
  42.            for(i=0;i<4;i++)
  43.            {
  44.                  for(j=0;j<4;j++)
  45.                  {
  46.           if( backup[i][j]!=KeySta[i][j])                                                                                                                                 
  47.           {
  48.            if( backup[i][j]!=0)
  49.            {
  50.              P0 = LedChar[i*4+j];
  51.                  }
  52.                  backup[i][j] = KeySta[i][j];
  53.                  }
  54.                  }
  55.          }
  56.          }
  57.         }
  58.           void InterruptTimer0()interrupt 1
  59.         {
  60.           unsigned char i;
  61.           static unsigned char keyout = 0 ;
  62.           static unsigned char keybuf[4][4] ={
  63.           {0xFF,0xFF,0xFF,0xFF}, {0xFF,0xFF,0xFF,0xFF},          {0xFF,0xFF,0xFF,0xFF},  {0xFF,0xFF,0xFF,0xFF}
  64.           };
  65.           TH0 =0xFC;
  66.           TL0 = 0x67;
  67.            keybuf[keyout][0] = (keybuf[keyout][0]<<1)|KEY_IN_1;
  68.            keybuf[keyout][1] = (keybuf[keyout][1]<<1)|KEY_IN_2;                                          
  69.            keybuf[keyout][2] = (keybuf[keyout][2]<<1)|KEY_IN_3;
  70.            keybuf[keyout][3] = (keybuf[keyout][3]<<1)|KEY_IN_4;
  71.            for(i=0;i<4;i++)
  72.            {
  73.              if((keybuf[keyout][i]&0xFF) == 0x00 )
  74.                  {
  75.                     KeySta[keyout][i] =0;
  76.                 }
  77.                 else if((keybuf[keyout][i]&0xFF) ==0x0F)
  78.                 {
  79.                    KeySta[keyout][i] =1;
  80.                    }
  81.                    }
  82.                    keyout++;
  83.                    keyout = keyout & 0x03;
  84.                    switch(keyout)
  85.                    {
  86.                      case 0:  KEY_OUT_4 =1;KEY_OUT_1 =0;break;
  87.                          case 1:  KEY_OUT_1 =1;KEY_OUT_2 =0;break;
  88.                        case 2:  KEY_OUT_2 =1;KEY_OUT_3 =0;break;
  89.                          case 3:  KEY_OUT_3 =1;KEY_OUT_4 =0;break;
  90.                          default: break;
  91.                          }
  92.                   }


复制代码

所有资料51hei提供下载:
shuma44.zip (854 Bytes, 下载次数: 7)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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