找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1837|回复: 10
收起左侧

求助大佬简单的单片机键盘c语言编程问题

[复制链接]
回帖奖励 5 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
ID:207108 发表于 2018-1-6 19:28 | 显示全部楼层 |阅读模式
这个程序中是键盘连接P1.0-P1.7的时候用的,而我的电路因为某些原因键盘连接的是P1.1-P1.7和P5.4,求助大佬这部分程序应该怎么改
QQ截图20180106192205.png
回复

使用道具 举报

ID:272479 发表于 2018-1-6 19:47 | 显示全部楼层
首先在函数声明时,应该先要对P5.4进行声明和定义,sbit “某一位”=P5^4;然后具体程序具体看
回复

使用道具 举报

ID:157238 发表于 2018-1-6 19:52 | 显示全部楼层
我想问一下你的P1.0怎么用的
回复

使用道具 举报

ID:272508 发表于 2018-1-6 20:26 | 显示全部楼层
单片机哪来的P5.4啊
回复

使用道具 举报

ID:213173 发表于 2018-1-6 20:31 | 显示全部楼层
异组端口组成4*4矩阵键盘的端口状态读写方法
#include <AT89X51.H>
#define uint unsigned int                         //宏定义数据类型uint
#define uchar unsigned char                 //宏定义数据类型uchar
sbit code0=P3^0;                                        //定义4*4键盘端口
sbit code1=P3^1;
sbit code2=P3^2;
sbit code3=P3^3;
sbit code4=P3^4;
sbit code5=P3^5;
sbit code6=P2^2;
sbit code7=P2^4;       
uchar key=0xff;                                                //键值变量初始值

void PX(uchar i)                                        //写入8位数据
{   
    code0=i&0x01;i>>=1;       
    code1=i&0x01;i>>=1;
    code2=i&0x01;i>>=1;
    code3=i&0x01;i>>=1;
    code4=i&0x01;i>>=1;
    code5=i&0x01;i>>=1;
    code6=i&0x01;i>>=1;
    code7=i&0x01;
}

uchar PD()                                                        //读取8位数据
{
        uchar i;
        i=code7;
        i=(i<<1)|code6;
        i=(i<<1)|code5;
        i=(i<<1)|code4;
        i=(i<<1)|code3;
        i=(i<<1)|code2;
        i=(i<<1)|code1;
        i=(i<<1)|code0;
        return i;
}
void key_scan()                                                //矩阵键盘扫描函数
{
        uchar temp1,temp2,temp3;                //临时变量
        static bit sign=0;                                //按键自锁标志
        static uint count=0;                        //消抖计数变量
        PX(0xf0);                                                //先给矩阵端口赋一个初值0xf0
        if(PD()!=0xf0)                                         //判断矩阵端口不等于所赋初值,说明有健按下
        {
                if(sign==0)                                        //如果按键自锁标志为0
                {
                        count++;                                //消抖计数
                        if(count>=1000)                        //消抖计数自>=200,估算主循环周期调整
                        {                                                //摒弃Delay延时方式,
                                count=1000;                        //防止溢出
                                sign=1;                                //按键自锁标志置1,键不抬起,按其他键无效
                                temp1=PD();                        //temp1保存矩阵端口高4位变化
                                PX(0x0f);                        //再给矩阵端口赋值0x0f
                                temp2=PD();                        //temp2保存矩阵端口低4位变化
                                temp3=temp2|temp1;        //temp3=高4位+低4位
                                key=temp3;                        //保存键值
                        }
                }
        }
        else                                                         //按键抬起
        {
                sign=0;                                                //按键自锁标志清0
                count=0;                                        //消抖计数清0
        }
}
void main()
{        
        while(1)               
        {
                key_scan();                                        //键盘扫描
                P1=key;                                                //LED低电平亮显示键值
        }                                                                               
}
回复

使用道具 举报

ID:207108 发表于 2018-1-7 13:06 | 显示全部楼层
le51 发表于 2018-1-6 19:52
我想问一下你的P1.0怎么用的

用的是stc的15f2k16s2,p1.0是pwm输出口,要用到
回复

使用道具 举报

ID:207108 发表于 2018-1-7 13:06 | 显示全部楼层
110011 发表于 2018-1-6 20:26
单片机哪来的P5.4啊

用的是stc的15f2k16s2,有p5.4
回复

使用道具 举报

ID:207108 发表于 2018-1-7 13:08 | 显示全部楼层
wulin 发表于 2018-1-6 20:31
异组端口组成4*4矩阵键盘的端口状态读写方法
#include
#define uint unsigned int                         //宏定义数据类型u ...

还没试,先感谢一下大佬
回复

使用道具 举报

ID:272670 发表于 2018-1-7 13:48 | 显示全部楼层
才接触,学习了
回复

使用道具 举报

ID:266764 发表于 2018-1-7 22:05 | 显示全部楼层
建议7个按键都换个引脚,如果不想换的话就定义一个类似于“anjian 5=P4^5”的,然后把那个P1口控制不了的功能接P4^5
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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