找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2510|回复: 1
收起左侧

51单片机+8279 3*8键盘输入程序 数码管向前滚动输入0~f Proteus仿真

[复制链接]
ID:767266 发表于 2020-6-15 15:59 | 显示全部楼层 |阅读模式
3*8 键盘输入  led数码管向前滚动输入 0~f   C51 单片机 protues仿真+代码

压缩包里有 protues仿真工程 和keil 代码
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png 51hei.png 51hei.png

单片机源程序如下:
  1. #include<reg51.h>
  2. #include<absacc.h>
  3. #define COM8279 XBYTE[0x7fff]           //这个是命令口。是CS
  4. #define DAT8279 XBYTE[0x7eff]           //这个是数据口。是A0
  5. #define uchar unsigned char         

  6. uchar code   table[]={0x3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x40};//0-F,-

  7. uchar idata keybuffer[6]={16,16,16,16,16,16};                          //   临时放需要显示的数字的地方

  8. sbit clflag=ACC^7;
  9. uchar key;
  10. uchar Keyflag;
  11. uchar run_once=1;
  12. uchar flag_display;
  13. uchar p;


  14. void delay(uchar x)                       //延时子程序
  15. {
  16.    uchar i;
  17.    for(i=0;i<x;i++);
  18.    
  19. }

  20. void Display()                                  //显示函数
  21. {
  22.                
  23.     uchar i;
  24.         COM8279=0X90;

  25.         for(i=0;i<6;i++)
  26.   {
  27.         COM8279=i+0x80;
  28.         DAT8279=table[keybuffer[i]];
  29.         delay(10);
  30.          }   
  31. }


  32. void Disp(d)                                                                            //显示函数,
  33.     {                    
  34.         COM8279=0X90;
  35.         COM8279=0x80;
  36.         DAT8279=table[d];
  37.         delay(10);
  38.          }   

  39.      
  40. void Key_0(void) interrupt 0 using 1          //键盘按键使用外部中断0
  41. {
  42.    uchar ch;
  43.    COM8279=0x40;
  44.    ch=DAT8279;
  45.    ch&=0x3f;
  46.    key=ch;
  47.    
  48.           flag_display=1;
  49.    
  50.    
  51.    
  52.    
  53.     if(key==0)
  54.     {
  55.         if(run_once==1)
  56.         {
  57.            run_once=0;
  58.         return;
  59.         }

  60.    
  61.     }

  62.      if(key!=0x00&&key!=0x01&&key!=0x02&&key!=0x03&&key!=0x04&&key!=0x05&&key!=0x06&&key!=0x07&&key!=0x08
  63.         &&key!=0x09&&key!=0x0a&&key!=0x0b&&key!=0x0c&&key!=0x0d&&key!=0x0e&&key!=0x0f)
  64.     {
  65.    
  66.             key=17;
  67.     }   
  68.    
  69.    
  70.    
  71.    

  72.    if(p>6)
  73.    {
  74.       p = 0;
  75.    
  76.    }


  77.      keybuffer[5]=keybuffer[4];         
  78.      keybuffer[4]=keybuffer[3];         
  79.      keybuffer[3]=keybuffer[2];      
  80.      keybuffer[2]=keybuffer[1];
  81.      keybuffer[1]= keybuffer[0];
  82.      keybuffer[0]=key;  


  83.     Keyflag=1;
  84.         p++;   
  85.    
  86.    
  87.    

  88. }
  89. void KeyTest(uchar keyh)                    //键盘按键处理及通道选择程序
  90. {  
  91.    
  92.     if(key!=0x00&&key!=0x01&&key!=0x02&&key!=0x03&&key!=0x04&&key!=0x05&&key!=0x06&&key!=0x07&&key!=0x08
  93.         &&key!=0x09&&key!=0x0a&&key!=0x0b&&key!=0x0c&&key!=0x0d&&key!=0x0e&&key!=0x0f)
  94.     {
  95.    
  96.     Disp(0x10);
  97.     }
  98.    
  99.    
  100.    
  101.    switch (keyh)
  102.      {         
  103.       case 0x00:{//按键0   
  104.          Disp(key);

  105.          break;}
  106.       case 0x01:{//按键1      
  107.           Disp(key);

  108.                  break;}
  109.       case 0x02:{//按键2        
  110.         Disp(key);

  111.          break;}
  112.       case 0x03:{//按键3        
  113.             Disp(key);

  114.          break;}
  115.       case 0x04:{//按键4            
  116.             Disp(key);

  117.          break;}
  118.       case 0x05:{//按键5        
  119.             Disp(key);

  120.          break;}
  121.       case 0x06:{//按键6        
  122.                Disp(key);

  123.          break;}
  124.       case 0x07:{//按键7        
  125.         Disp(key);

  126.            break;}
  127.       case 0x08:{//按键0      
  128.             Disp(key);

  129.          break;}
  130.       case 0x09:{//按键1      
  131.               Disp(key);

  132.                  break;}
  133.           case 0x0a:{//按键5        
  134.              Disp(key);

  135.          break;}
  136.       case 0x0b:{//按键6        

  137.              Disp(key);

  138.          break;}
  139.       case 0x0c:{//按键7        

  140.              Disp(key);

  141.       case 0x0d:{//按键0      


  142.              Disp(key);

  143.          break;}
  144.       case 0x0e:{//按键1      

  145.              Disp(key);

  146.                  break;}
  147.       
  148.          case 0x0f:{//按键1      

  149.                  Disp(key);

  150.                  break;}
  151.      
  152.          default:



  153.       break; }
  154.          }
  155. }

  156. void main(void)
  157. ……………………

  158. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
多键值输入显示.zip (147.26 KB, 下载次数: 55)

评分

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

查看全部评分

回复

使用道具 举报

ID:988777 发表于 2021-12-14 15:55 | 显示全部楼层
麻烦问一下这个void KeyTest(uchar keyh) 函数在哪里调用了,我根本没有看到
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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