找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3171|回复: 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;
   }
  }
}

呵呵,重要的东东不能忘,这是按键部分的接线图
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)




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

评分

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

查看全部评分

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

使用道具 举报

沙发
ID:66287 发表于 2022-3-4 15:35 | 只看该作者


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

使用道具 举报

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

使用道具 举报

地板
ID:66287 发表于 2022-3-23 16:07 | 只看该作者

经努力,现完全仿真成功。
贴上运行图:

回复

使用道具 举报

5#
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;
   }
  }
}
回复

使用道具 举报

6#
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() 函数在附件中,无变化。
回复

使用道具 举报

7#
ID:399179 发表于 2022-3-23 21:03 来自手机 | 只看该作者
楼主真牛人!!!
回复

使用道具 举报

8#
ID:977804 发表于 2022-3-23 22:21 来自手机 | 只看该作者
少引脚的芯片非常需要
回复

使用道具 举报

9#
ID:66287 发表于 2022-3-24 08:28 | 只看该作者
这是更新后的Keil代码与Proteus仿真文件。

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

使用道具 举报

10#
ID:170318 发表于 2022-3-24 09:47 | 只看该作者
楼主确实是大拿。不过用带有ADC口的,可以一个口实现好多个按键功能
回复

使用道具 举报

11#
ID:977804 发表于 2022-3-24 12:51 | 只看该作者
可惜仿真是8.0以上版本的,下载下来想仿真试试,
回复

使用道具 举报

12#
ID:66287 发表于 2022-3-25 08:29 | 只看该作者
Proteus低版本无STC芯片仿真模块,需要Proteus 8.9 sp2的,
我这是绿色免安装版。
回复

使用道具 举报

13#
ID:136119 发表于 2022-3-25 08:51 | 只看该作者
我最多能实现3个按键,6个厉害了,程序保留后期研究。
回复

使用道具 举报

14#
ID:430492 发表于 2022-3-26 14:13 | 只看该作者
回头找找一个IO,通用ADC整的4个按键的代码,几年前的看还能不能找着。
回复

使用道具 举报

15#
ID:513507 发表于 2022-12-28 17:10 | 只看该作者
厉害!2线6按键
回复

使用道具 举报

16#
ID:398219 发表于 2023-1-27 21:39 | 只看该作者
历害,但是研究了程序,有点点头绪,但是摸不准原理~!汉~
回复

使用道具 举报

17#
ID:47652 发表于 2023-1-28 07:01 | 只看该作者
2线6键的实现省下很多io口啊,谢谢分享!
回复

使用道具 举报

18#
ID:433219 发表于 2023-1-31 14:57 | 只看该作者
3个io识别22个按键,,,缺点,费脑瓜子


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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