找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4348|回复: 5
收起左侧

为什么与p2_0有关的都无定义?

[复制链接]
ID:279020 发表于 2018-1-23 17:25 | 显示全部楼层 |阅读模式
#include<reg52.h>    //包含单片机寄存器的头文件
#define uchar unsigned char       
sbit p2_0 = p2^0;
sbit p2_1 = p2^1;
sbit p2_2 = p2^2;
sbit p2_3 = p2^3;

#define uint unsigned int


uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/* 函数申明 -----------------------------------------------*/
void delay(uint z);

/* 变量定义 ----------------------------------------------*/
sbit key1=P3^5;
sbit key2=P3^4;
sbit key3=P3^3;
sbit key4=P3^2;




void display()
{
                   uchar m;
                for(m=9;m>0;m--)
                {
                        p0=table[m];
                        p2_0 =0;
                        delay(2000);
                        p2_0 = 1;
                }
                for(m=0;m<10;m++)
                {
                        p0=table[m];
                        p2_1=0;
                        delay(2000);
                        p2_1= 1;
                }
                for(m=9;m>0;m--)
                {
                        p0=table[m];
                        p2_2 = 0;
                        delay(2000);
                        p2_2 = 1;
                }
                for(m=0;m<10;m++)
                {
                        p0=table[m];
                        p2_3 = 0;
                        delay(2000);
                        p2_3 = 1;
                }
}

/*
********************************************************************************
** 函数名称 : main(void)
** 函数功能 : 主函数
********************************************************************************
*/
void main(void)
{       
   unsigned int a;
         P0 = 0;
         for(a=100;a>0;a--)
          {
                  display();
          }
         while(1)                         //无限扫描
         {
                 if(key1==0)
                {
                        delay(5);          //消抖动
                        if(key1==0)          //确认按键被按下
                        {
                                while(!key1);//松手检测
                                P1=0;
                                delay(200);
                                P1=0XFF;
                        }
          
                }
          

                if(key2==0)
                {
                        delay(5);          //消抖动
                        if(key2==0)          //确认按键被按下
                        {
                                while(!key2);//松手检测
                            P1=0;
                                delay(200);
                                P1=0XFF;
                                delay(200);
                                P1=0;
                                delay(200);
                                P1=0XFF;
                        }
                }
                if(key3==0)
                {
                        delay(5);          //消抖动
                        if(key3==0)          //确认按键被按下
                        {
                                while(!key3);//松手检测
                                P1=0;
                                delay(200);
                                P1=0XFF;
                                delay(200);
                                P1=0;
                                delay(200);
                                P1=0XFF;
                                delay(200);
                                P1=0;
                                delay(200);
                                P1=0XFF;
                                delay(200);
                        }
                }
                if(key4==0)
                {
                        delay(5);          //消抖动
                        if(key4==0)          //确认按键被按下
                        {
                                while(!key4);//松手检测
                                P1=0;
                                delay(200);
                                P1=0XFF;
                                delay(200);
                                P1=0;
                                delay(200);
                                P1=0XFF;
                                delay(200);
                                P1=0;
                                delay(200);
                                P1=0XFF;
                                delay(200);
                                P1=0;
                                delay(200);
                                P1=0XFF;
                                delay(200);
                        }
                }
                delay(10);       
        }
}

/*
********************************************************************************
** 函数名称 : delay(uint z)
** 函数功能 : 延时函数
********************************************************************************
*/
void delay(uint z)
{                                                                                                                                                                                          
    uint i,j;
    for(i=z;i>0;i--)
        for(j=110;j>0;j--);
}
回复

使用道具 举报

ID:258566 发表于 2018-1-23 18:04 | 显示全部楼层
捕获.PNG
大小写问题
回复

使用道具 举报

ID:213173 发表于 2018-1-23 18:08 | 显示全部楼层
字母大小写错误
回复

使用道具 举报

ID:164602 发表于 2018-1-24 10:43 | 显示全部楼层
看来你是懂那个“REG52.H”头文件的作用。
看看我翻译的REG51.H的内容:
/*--------------------------------------------------------------------------
REG51.H

Header file for generic 80C51 and 80C31 microcontroller.
Copyright (c) 1988-2002 Keil Elektronik GmbH and Keil Software, Inc.
All rights reserved.
--------------------------------------------------------------------------*/

#ifndef __REG51_H__
#define __REG51_H__

/*  BYTE Register  所有8位寄存器申明*/
sfr P0   = 0x80;//PO口寄存器
sfr P1   = 0x90;//P1口寄存器
sfr P2   = 0xA0;//P2口寄存器
sfr P3   = 0xB0;//P3口寄存器
sfr PSW  = 0xD0;//程序状态寄存器
sfr ACC  = 0xE0;//累加器(ACC)
sfr B    = 0xF0;//寄存器B 主要用于乘、除等操作
sfr SP   = 0x81;//栈指针(SP)
sfr DPL  = 0x82;//数据指针(DPTR)是一个16 位的特殊功能寄存器,此为低8位
sfr DPH  = 0x83;//此为高8位
sfr PCON = 0x87;//程序计数器(PC)用于保存下一条要执行的指令的地址
sfr TCON = 0x88;//TCON 寄存嚣的高4位为定时/计数器控制寄存器,低4位为控制外部中断的中断触发方式选择
sfr TMOD = 0x89;//TMOD 用于控制定时/计数器的工作方式及4 种工作模式
sfr TL0  = 0x8A;//8051 单片机内含有两个16 位定时/计数嚣,这是第一个定时/计数器赋初值的低位
sfr TL1  = 0x8B;//这是第二个定时/计数器赋初值的低位
sfr TH0  = 0x8C;//这是第一个定时/计数器赋初值的高位
sfr TH1  = 0x8D;//这是第二个定时/计数器赋初值的高位
sfr IE   = 0xA8;//IE 寄存器用于开放或屏蔽单片机的各个中断源
sfr IP   = 0xB8;//通过设置IP 寄存器的相应位对各个中断源的中断优先级
sfr SCON = 0x98;//寄存器用于设置串行口的工作方式
sfr SBUF = 0x99;//串行数据缓冲器


/*  BIT Register  所有寄存器的位申明*/
/*  PSW   *///通过PSW 的各状态位,可以实现程序跳转、多字节运算等功能
sbit CY   = 0xD7;//进位标志位,表示在字节运算时发生进位或借位
sbit AC   = 0xD6;//辅助进位标志位,当ACC 低4 位发生进位时置位该标志位
sbit F0   = 0xD5;//通用标志位,由用户定义
sbit RS1  = 0xD4;//工作寄存器组选择位
sbit RS0  = 0xD3;
sbit OV   = 0xD2;//溢出标志位,表示运算时发生溢出
sbit P    = 0xD0;//奇偶校验标志位

/*  TCON  *///
sbit TF1  = 0x8F;//定时器1中断标志,定时到,计数满,为溢出标志,进入中断服务函数
sbit TR1  = 0x8E;//定时器1开关,1打开,0关闭
sbit TF0  = 0x8D;//定时器0中断标志,定时到,计数满,为溢出标志,进入中断服务函数
sbit TR0  = 0x8C;//定时器0开关,1打开,0关闭
sbit IE1  = 0x8B;//外部中断1中断标志
sbit IT1  = 0x8A;//设置外部中断1的触发方式,0低电平触发,1负跳变触发
sbit IE0  = 0x89;//外部中断0中断标志
sbit IT0  = 0x88;//设置外部中断0的触发方式,0低电平触发,1负跳变触发

/*  IE   */
sbit EA   = 0xAF;//总中断允许位
sbit ES   = 0xAC;//串行通讯口中断允许位
sbit ET1  = 0xAB;//定时器1中断允许位
sbit EX1  = 0xAA;//外部中断1允许位
sbit ET0  = 0xA9;//定时器0中断允许位
sbit EX0  = 0xA8;//外部中断0允许位

/*  IP   */
sbit PS   = 0xBC;//串行通讯口中断优先级设置
sbit PT1  = 0xBB;//定时器1中断优先级设置
sbit PX1  = 0xBA;//外部中断1优先级设置
sbit PT0  = 0xB9;//定时器0中断优先级设置
sbit PX0  = 0xB8;//外部中断0优先级设置

/*  P3  */
sbit RD   = 0xB7;//外部数据存贮器读脉冲
sbit WR   = 0xB6;//外部数据存贮器写脉冲
sbit T1   = 0xB5;//定时器1外部输入口
sbit T0   = 0xB4;//定时器0外部输入口
sbit INT1 = 0xB3;//外部中断1输入口
sbit INT0 = 0xB2;//外部中断0输入口
sbit TXD  = 0xB1;//串行输出口
sbit RXD  = 0xB0;//串行输入口

/*  SCON  *///寄存器用于设置串行口的工作方式和查询接收、发送中断产生标志
sbit SM0  = 0x9F;//串口通讯的工作方式
sbit SM1  = 0x9E;
sbit SM2  = 0x9D;//多机通讯控制位
sbit REN  = 0x9C;//串行通讯接收允许位
sbit TB8  = 0x9B;//用于存放发送的第9位数据
sbit RB8  = 0x9A;//用于存放接收到的第9位数据
sbit TI   = 0x99;//发送数据中断标志位,发送结束,硬件置1,发中断请求,要软件复位,一般是在中断服务程序中执行复位操作
sbit RI   = 0x98;//接收数据中断标志位,接收结束,硬件置1,发中断请求,要软件复位,一般是在中断服务程序中执行复位操作

#endif
这个头文件定义了I/O口为P0、P1、P2、P3,都是大写的P,你搞个小写的,当然找不到了。
回复

使用道具 举报

ID:279341 发表于 2018-1-24 16:20 | 显示全部楼层
一般预定义的都是大写的,C语言是大小写敏感的!!!
回复

使用道具 举报

ID:279516 发表于 2018-1-25 10:09 | 显示全部楼层
大小写出了问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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