找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3025|回复: 17
收起左侧

单片机2个IO口6按键输入 源程序与仿真

  [复制链接]
ID:66287 发表于 2022-3-4 10:55 | 显示全部楼层 |阅读模式
网上见到别人写的2IO 6Key程序,但一直运行不成功,认真琢磨了一阵,终于成功。现分享出来,以供同好参考。
注意:Proteus仿真不行,但在开发板上正常运行。

//CPU:STC89C52单片机
#include <REG52.h>
#include <intrins.h>
sfr AUXR = 0x8E;
typedef  unsigned char  uchar;
typedef  unsigned int  uint;
#define key_state_0  0  //判断是否按下
#define key_state_1  1  //判断是否为抖动和取键值
uchar key=0;
bit KEY_1_ON=0;          //按键分为2组,1,2,3为第一组,4,5,6为第二组
                                   //KEY_1_ON 为第一组按下标志
sbit IO_1=P1^0;
sbit IO_2=P1^1;
void Timer0_Init();   
void keyboard();
void main()
{
  Timer0_Init();
  while(1)
   {
   switch(key)
    {  
    case 1:P2=0XFE;
           break;
    case 2:P2=0XFD;
           break;
    case 3:P2=0XFB;
           break;
    case 4:P2=0XF7;
           break;
    case 5:P2=0XEF;
           break;
    case 6:P2=0XDF;
           break;
   }
  }
}
f73ada89ef5dc0774e8d02a38672ee4.jpg 无标题.png
呵呵,重要的东东不能忘,这是按键部分的接线图
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
无标题.png

51hei.png

Keil代码与Proteus仿真下载: 2io6key.rar (29.17 KB, 下载次数: 58)

评分

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

查看全部评分

回复

使用道具 举报

ID:66287 发表于 2022-3-4 15:35 | 显示全部楼层

e230521d40e131bc3f7c0dbfa7ddcf0.jpg
这个运行图片清晰些,特别稳定!
回复

使用道具 举报

ID:66287 发表于 2022-3-7 10:14 | 显示全部楼层
“网上见到别人写的2IO 6Key程序,但一直运行不成功,认真琢磨了一阵,终于成功。”
这句话是笔误,我想说的是“”网上见到别人写的2IO 6Key程序,但一直运行不成功,自己琢磨了一阵,认真重写了代码,终于成功。“真正是自己创作的,非抄袭。
重申一遍:Proteus仿真不行,开发板上运行正常。
回复

使用道具 举报

ID:66287 发表于 2022-3-23 16:07 | 显示全部楼层

经努力,现完全仿真成功。
贴上运行图:
无标题.png
回复

使用道具 举报

ID:66287 发表于 2022-3-23 16:12 | 显示全部楼层
//这是主程序
#include <REG52.h>
#include <intrins.h>
sfr AUXR = 0x8E;
typedef  unsigned char  uchar;
typedef  unsigned int  uint;
#define key_state_0  0  //判断是否按下
#define key_state_1  1  //判断是否为抖动和取键值

sfr  P1M1 = 0x91;
sfr  P1M0 = 0x92;

uchar key=0;
bit KEY_1_ON=0;   //按键分成两组,1、2、3为第一组,4、5、6为第二组
                    //KEY_1_ON 为第一组按下标志
sbit IO_1=P1^0;
sbit IO_2=P1^1;

void Timer0_Init();     //定时器初始化
void keyboard();
void main()
{
  P1M1=0x03;    //P0^0及P0^1配置成开漏模式  
  P1M0=0x03;    //这样在要读外部状态时,对该位写"1"即可

  Timer0_Init();
  while(1)
   {
   switch(key)
    {  
    case 1:P2=0XFE;
           break;
    case 2:P2=0XFD;
           break;
    case 3:P2=0XFB;
           break;
    case 4:P2=0XF7;
           break;
    case 5:P2=0XEF;
           break;
    case 6:P2=0XDF;
           break;
   }
  }
}
回复

使用道具 举报

ID:66287 发表于 2022-3-23 16:14 | 显示全部楼层
void Timer0_Init()  //定时器初始化
  {    //10毫秒@12.000MHz
    AUXR &= 0x7F;                //定时器时钟12T模式
    TMOD &= 0xF0;                //设置定时器模式
    TMOD |= 0x01;                //设置定时器模式
    TL0 = 0xF0;                  //设置定时初始值
    TH0 = 0xD8;                  //设置定时初始值
    TR0 = 1;                    //定时器0开始计时
    ET0 =1;
   EA = 1;
}

void Timer0() interrupt 1 //定时器中断
{                     //16位自动重装模式         
   keyboard();
}       

keyboard() 函数在附件中,无变化。
回复

使用道具 举报

ID:399179 发表于 2022-3-23 21:03 来自手机 | 显示全部楼层
楼主真牛人!!!
回复

使用道具 举报

ID:977804 发表于 2022-3-23 22:21 来自手机 | 显示全部楼层
少引脚的芯片非常需要
回复

使用道具 举报

ID:66287 发表于 2022-3-24 08:28 | 显示全部楼层
这是更新后的Keil代码与Proteus仿真文件。

2io6key.rar (34.13 KB, 下载次数: 45)
回复

使用道具 举报

ID:170318 发表于 2022-3-24 09:47 | 显示全部楼层
楼主确实是大拿。不过用带有ADC口的,可以一个口实现好多个按键功能
回复

使用道具 举报

ID:977804 发表于 2022-3-24 12:51 | 显示全部楼层
可惜仿真是8.0以上版本的,下载下来想仿真试试,
回复

使用道具 举报

ID:66287 发表于 2022-3-25 08:29 | 显示全部楼层
Proteus低版本无STC芯片仿真模块,需要Proteus 8.9 sp2的,
我这是绿色免安装版。
回复

使用道具 举报

ID:136119 发表于 2022-3-25 08:51 | 显示全部楼层
我最多能实现3个按键,6个厉害了,程序保留后期研究。
回复

使用道具 举报

ID:430492 发表于 2022-3-26 14:13 | 显示全部楼层
回头找找一个IO,通用ADC整的4个按键的代码,几年前的看还能不能找着。
回复

使用道具 举报

ID:513507 发表于 2022-12-28 17:10 | 显示全部楼层
厉害!2线6按键
回复

使用道具 举报

ID:398219 发表于 2023-1-27 21:39 | 显示全部楼层
历害,但是研究了程序,有点点头绪,但是摸不准原理~!汉~
回复

使用道具 举报

ID:47652 发表于 2023-1-28 07:01 | 显示全部楼层
2线6键的实现省下很多io口啊,谢谢分享!
回复

使用道具 举报

ID:433219 发表于 2023-1-31 14:57 | 显示全部楼层
3个io识别22个按键,,,缺点,费脑瓜子
3io-22key-1.gif
3io-22key-2.jpg
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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