(77): 'lcd_writecmd': requires ANSI-style prototype求指导

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD1602_DATAPINS P0


sbit RS = P1^0;
sbit EN = P2^5;
sbit RW = P1^1;
sbit CS88 = P2^2;
sbit DU = P2^0;
sbit WEI = P2^1;
sbit DSIO=P2^7;
sbit RST=P1^2;
sbit SCLK=P1^7;


//---定义全局函数---//
void Ds1302Write(uchar addr, uchar dat);
uchar Ds1302Read(uchar addr);
void Ds1302Init();
void Ds1302ReadTime();
void delay();
void Init();
void Init1();
void lcd_writecmd();
void lcd_writedat();



//---DS1302写入和读取时分秒的地址命令---//
//---秒分时日月周年 最低位读写位;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d}; 
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};

//---DS1302时钟初始化2016年5月7日星期六12点00分00秒。---//
//---存储顺序是秒分时日月周年,存储格式是用BCD码---//
uchar TIME[7] = {0, 0, 0x12, 0x07, 0x05, 0x06, 0x18};
//u8 Dispup[]=" Time:";
//u8 Dispdown[]=" Parrword:" ;


void Lcd1602_Delay1ms(uint c)   //误差 0us
{
    uchar a,b;
    for (; c>0; c--)
    {
         for (b=199;b>0;b--)
         {
              for(a=1;a>0;a--);
         }      
    }
        
}
void delay(uchar t)
{
while(t--);
}

void Init()
{
    P0 =0xFF;
    WEI=1    ;
    delay(100);
    WEI=0;
    P0=0x00;
    DU=1;
    CS88=1;
    delay(100);
    DU=0;
    CS88=0;
}


void Init1()
{
    lcd_writecmd(0x38);  //开显示
    lcd_writecmd(0x0c);  //开显示不显示光标
    lcd_writecmd(0x06);  //写一个指针加1
    lcd_writecmd(0x01);  //清屏
    lcd_writecmd(0x80);  //设置数据指针起点
}

void lcd_writecmd(uchar cmd)
{
    EN = 0;     //使能
    RS = 0;       //选择发送命令
    RW = 0;       //选择写入
    
    LCD1602_DATAPINS = cmd;     //放入命令    P0=com;
    Lcd1602_Delay1ms(1);        //等待数据稳定 重要的一点

    EN = 1;              //写入时序  
    Lcd1602_Delay1ms(5);      //保持时间  重要的一点
    EN = 0;}

void lcd_writedat(uchar dat)
{
    EN = 0;    //使能清零
    RS = 1;    //选择输入数据
    RW = 0;    //选择写入

    LCD1602_DATAPINS = dat; //写入数据
    Lcd1602_Delay1ms(1);

    EN = 1;   //写入时序
    Lcd1602_Delay1ms(5);   //保持时间
    EN = 0;
}

/*******************************************************************************
* 函 数 名         : Ds1302Write
* 函数功能           : 向DS1302命令(地址+数据)
* 输    入         : addr,dat
* 输    出         : 无
*******************************************************************************/
void Ds1302Write(uchar addr, uchar dat)
{
    uchar n;
    RST = 0;
    _nop_();

    SCLK = 0;//先将SCLK置低电平。
    _nop_();
    RST = 1; //然后将RST(CE)置高电平。
    _nop_();

    for (n=0; n<8; n++)//开始传送八位地址命令
    {
        DSIO = addr & 0x01;//数据从低位开始传送
        addr >>= 1;
        SCLK = 1;//数据在上升沿时,DS1302读取数据
        _nop_();
        SCLK = 0;
        _nop_();
    }
    for (n=0; n<8; n++)//写入8位数据
    {
        DSIO = dat & 0x01;
        dat >>= 1;
        SCLK = 1;//数据在上升沿时,DS1302读取数据
        _nop_();
        SCLK = 0;
        _nop_();    
    }    
         
    RST = 0;//传送数据结束
    _nop_();
}

/*******************************************************************************
* 函 数 名         : Ds1302Read
* 函数功能           : 读取一个地址的数据
* 输    入         : addr
* 输    出         : dat
*******************************************************************************/

uchar Ds1302Read(uchar addr)
{
    uchar n,dat,dat1;
    RST = 0;
    _nop_();

    SCLK = 0;//先将SCLK置低电平。
    _nop_();
    RST = 1;//然后将RST(CE)置高电平。
    _nop_();

    for(n=0; n<8; n++)//开始传送八位地址命令
    {
        DSIO = addr & 0x01;//数据从低位开始传送
        addr >>= 1;
        SCLK = 1;//数据在上升沿时,DS1302读取数据
        _nop_();
        SCLK = 0;//DS1302下降沿时,放置数据
        _nop_();
    }
    _nop_();
    for(n=0; n<8; n++)//读取8位数据
    {
        dat1 = DSIO;//从最低位开始接收
        dat = (dat>>1) | (dat1<<7);
        SCLK = 1;
        _nop_();
        SCLK = 0;//DS1302下降沿时,放置数据
        _nop_();
    }

    RST = 0;
    _nop_();    //以下为DS1302复位的稳定时间,必须的。
    SCLK = 1;
    _nop_();
    DSIO = 0;
    _nop_();
    DSIO = 1;
    _nop_();
    return dat;    
}

/*******************************************************************************
* 函 数 名         : Ds1302Init
* 函数功能           : 初始化DS1302.
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Ds1302Init()
{
    uchar n;
    Ds1302Write(0x8E,0X00);         //禁止写保护,就是关闭写保护功能
    for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年
    {
        Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);    
    }
    Ds1302Write(0x8E,0x80);         //打开写保护功能
}

/*******************************************************************************
* 函 数 名         : Ds1302ReadTime
* 函数功能           : 读取时钟信息
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void Ds1302ReadTime()
{
    uchar n;
    for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年
    {
        TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
    }
        
}


void main()
{
    Init();

    Ds1302Init();
////    while(1)
////    {
////        delay(1000000);
////        Ds1302ReadTime();
//        Init1();
//        for(i=0;i<8;i++)
//        {
//            LcdWriteData(Dispup[i]);    
//        }
////    }
}
阅读 2.1k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进