微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请大神解疑。

请大神解疑。

时间:10-02 整理:3721RD 点击:
什么我定义的595的管脚会提示重复定义呢?明明就定义了一次啊。这是我为了确认不是其他部分程序的问题而重新另打的一个空程序。这种错误是这么一起的呢?


因为你的程序头文件用的是reg52.h(里面有定义RCLK,如下图所示)所以会重复
人家用的是reg51.h(里面没有定义RCLK)

#include"reg51.h"
#include<intrins.h>
sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
/*******************************************************************************
* 函数名         : Hc595SendByte(unsigned char dat)
* 函数功能                   : 想74H595发送一个字节的数据
* 输入           : 无
* 输出                  : 无
*******************************************************************************/
void Hc595SendByte(unsigned char dat)
{
        unsigned char a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)
        {
                if(dat&0x80)
                        SER = 1;
                else
                        SER = 0;
                dat<<=1;
                SRCLK=1;
                _nop_();
                _nop_();
                SRCLK=0;       
        }
        RCLK=1;
        _nop_();
        _nop_();
        RCLK=0;
}
/*******************************************************************************
* 函数名         : Delay10ms
* 函数功能                   : 延时函数,延时10ms
* 输入           : c
* 输出                  : 无
*******************************************************************************/
void Delay10ms(unsigned int c)   //误差 0us
{
    unsigned char a,b;
    for(;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
void main(void)
{
        unsigned char i,num;
   while(1)
   {
                  
                num=0x01;
                   for(i=0;i<8;i++)
                {                         
                        Hc595SendByte(num);
                        P0=0x00;
                        num<<=1;
                        Delay10ms(50);
                }
                   num=0x01;               
                   for(i=0;i<8;i++)
                {
                          P0=~num;
                        Hc595SendByte(0xff);
                        num<<=1;
                        Delay10ms(50);
                }
                  
   
   }
}

这段代码同样也是这么定义管脚的为什么就能通过编译呢。

原理图~~~~~~~~~~~~~~~


上面有一句LICENCE ERROR 。

你可以把你的re52.h换成reg51.h验证下,保证没错误,

学习了!

非常感谢,已解决。祝生活愉快。

嗯,就是这个引起的,谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top