普中开源电子分享网

 找回密码
 立即注册
搜索
查看: 2130|回复: 2

51单片机 为啥端口不可控呀

[复制链接]

1

主题

1

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2021-1-25 10:35:39 | 显示全部楼层 |阅读模式
#include<reg52.h>//定义头文件

typedef unsigned char u8;//重新定义关键词u8
typedef unsigned int u16;//        重新定义关键词u16

#define key16 P1  //接4*4键盘
#define dianjikouzhi1 P0  // 输出电机控制信号
#define dianjikouzhi2 P2 //        输出电机控制信号


u8 jianzhi;//        定义变量
u8  shoukongdianji[]={0x01,0x02,0x04,0x08,0x05,0x0a,0x10,
   0x20,0x40,0x80,0x01,0x02,0x04,0x08,0x00,0x00};
        //P2,P3输出电机控制电平信号组
void delay(u16 i)//i=1,  10us .。延时子程序
{
        while(i--);
}

void anjianshibie()        //按键识别子程序
{
        key16=0x0f;//高4位置0,放入4行
        if(key16!=0x0f)//判断是否有按键按下,即低4位非1111
        {
                delay(1000);//延时10ms,消抖
                if(key16!=0x0f)        //key16!=0x0f,再次确认,有按键按下
                {
                        switch(key16) //确认哪列
                        {
                                case(0x07):jianzhi=0;break;
                                case(0x0b):jianzhi=1;break;
                                case(0x0d):jianzhi=2;break;
                                case(0x0e):jianzhi=3;break;
                        }
                        key16=0xf0;//低4位置0,放入4列
                        switch(key16)//确认哪行
                        {
                                case(0x70):jianzhi=jianzhi;break;
                                case(0xb0):jianzhi=jianzhi+4;break;
                                case(0xd0):jianzhi=jianzhi+8;break;
                                case(0xe0):jianzhi=jianzhi+12;break;       
                        } //将确定的键值存在jianzhi中
                }
        }
                if(key16==0xff)// 没有按键按下
                {
                         dianjikouzhi1=1; //P2口置1
                         dianjikouzhi2=1;//P3口置1       
                }
}
void main()//主程序
{
        while(1)//死循环
        {
       
                        anjianshibie();        //调用按键识别子程序
                        if(jianzhi <7)//判断数组位数
                {
                        dianjikouzhi1=shoukongdianji[jianzhi];//调用0~7的数组

                }
                dianjikouzhi2=shoukongdianji[jianzhi+7];//调用8~15的数组
        }
}
回复

使用道具 举报

10

主题

44

帖子

278

积分

中级会员

Rank: 3Rank: 3

积分
278
发表于 2021-1-25 18:40:15 | 显示全部楼层
shoukongdianji[]  数组中没有定义长度   if(key16==0xff)// 没有按键按下之前 都给KEY16 赋值为0F 和F0 这个应该永远用不上    dianjikouzhi1=shoukongdianji[jianzhi];//调用0~7的数组 dianjikouzhi2=shoukongdianji[jianzhi+7];//调用8~15的数组 我想不到你这个能控制什么电机   我也是初学 说错了下面的大佬包含
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

站长推荐上一条 /1 下一条

Archiver|手机版|小黑屋|普中开源电子分享网 粤ICP备16123577号-2

GMT+8, 2024-4-27 05:18 , Processed in 0.089889 second(s), 33 queries .

Powered by 论坛搭建 X3.4

Copyright © 2001-2021, Tencent Cloud.

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