久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1188|回復: 2
打印 上一主題 下一主題
收起左側

求指導error C244: 'w_rtc_address': can't initialize, bad type or class..\libr...

[復制鏈接]
跳轉到指定樓層
樓主
ID:1110735 發表于 2024-2-6 09:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
compiling ds1302.c.....\library\ds1302.c(5): warning C258: 'w_rtc_address': mspace on parameter ignored
..\library\ds1302.c(5): error C244: 'w_rtc_address': can't initialize, bad type or class..\library\ds1302.c - 1 Error(s), 1 Warning(s).


#include "ds1302.h"

//秒的起始位為0x80,一個單元一個8位的字節,偶數為寫操作,奇數為讀操作
//不使用指針,編譯器會忽略mspace(用于內存分配的自定義空間)
code unsigned char w_rtc_address[]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分時日月周年
code unsigned char r_rtc_address[]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};

unsigned int set[];
unsigned char rtc[];

unsigned long Now_Clock=0;    //輸入現在的時間--時分秒
unsigned int Now_week=0;        //周
unsigned long Now_Calendar=0;           //年月日

//寫入字節函數
void Write_Ds1302_Byte(unsigned  char temp)
{
    unsigned char i;
    for (i=0;i<8;i++)      
    {                  //寫入數據時,上升沿有效
        SCK=0;
        SDA=temp&0x01;
        temp>>=1;
        SCK=1;
    }
}   

//寫入地址字節與數據字節
void Write_Ds1302( unsigned char address,unsigned char dat )     
{
    RST=0;
    _nop_();       //延遲幾微秒
    SCK=0;
    _nop_();
    RST=1;  
    _nop_();  
    Write_Ds1302_Byte(address);
    Write_Ds1302_Byte(dat);     
    RST=0;
}

//先寫入地址字節,再讀取數據
unsigned char Read_Ds1302 ( unsigned char address )
{
    unsigned char i,temp=0x00;
    RST=0;
    _nop_();
    SCK=0;
    _nop_();
    RST=1;
    _nop_();
    Write_Ds1302_Byte(address);
    for (i=0;i<8;i++)   
    {       //讀取數據,下降沿讀取有效
        SCK=0;
        temp>>=1;   
        SCK=1;
        if(SDA)
            temp|=0x80;
    }
    RST=0;
    _nop_();
    RST=0;
    SCK=0;
    _nop_();
    SCK=1;
    _nop_();
    SDA=0;
    _nop_();
    SDA=1;
    _nop_();
    return (temp);         
}

//讀取時鐘信息
unsigned char* ReadRTC()
{
    unsigned char i, *p;
    unsigned char tmp[7];

    p = (unsigned char *)r_rtc_address;     //地址傳遞

    for(i=0;i<7;i++){
        tmp[i]=Read_Ds1302(*p);  //讀取秒、分、時三個寄存器數據
        p++;
    }

    rtc[0] = (tmp[2] >> 4);    //時的十位,temp[2]讀取的是85H的內容
    rtc[1] = (tmp[2] & 0x0F);  //時的個位

    rtc[2] = (tmp[1] >> 4);     //分
    rtc[3] = (tmp[1] & 0x0F);

    rtc[4] = (tmp[0] >> 4);    //秒
    rtc[5] = (tmp[0] & 0x0F);

    rtc[6] = (tmp[5] >> 4);    //周
    rtc[7] = (tmp[5] & 0x0F);

    rtc[8] = (tmp[6] >> 4);    //年
    rtc[9] = (tmp[6] & 0x0F);

    rtc[10] = (tmp[4] >> 4);    //月
    rtc[11] = (tmp[4] & 0x0F);

    rtc[12] = (tmp[3] >> 4);    //日
    rtc[13] = (tmp[3] & 0x0F);

    return rtc;
}

//輸入的時間做處理
void set_clock()
{
    set[0] = Now_Clock/100000;  //時分秒
    set[1] = Now_Clock/10000%10;
    set[2] = Now_Clock/1000%10;
    set[3] = Now_Clock/100%10;
    set[4] = Now_Clock/10%10;
    set[5] = Now_Clock%10;

    set[6] = Now_week/10;      //周
    set[7] = Now_week%10;

    set[8] = Now_Calendar/100000;  //年月日
    set[9] = Now_Calendar/10000%10;
    set[10] = Now_Calendar/1000%10;
    set[11] = Now_Calendar/100%10;
    set[12] = Now_Calendar/10%10;
    set[13] = Now_Calendar%10;
}

//設置初始時鐘時間
void SetRTC()
{
    set_clock();
    Write_Ds1302(0x8E,0X00); //WP為0,打開寫保護關  
    Write_Ds1302(w_rtc_address[0], (set[4]<<4) | (set[5]));   //秒
    Write_Ds1302(w_rtc_address[1], (set[2]<<4) | (set[3]));  //分
    Write_Ds1302(w_rtc_address[2], (set[0]<<4) | (set[1])); //時

    Write_Ds1302(w_rtc_address[5], (set[6]<<4) | (set[7]));  //周

    Write_Ds1302(w_rtc_address[3], (set[12]<<4) | (set[13]));   //日
    Write_Ds1302(w_rtc_address[4], (set[10]<<4) | (set[11]));  //月
    Write_Ds1302(w_rtc_address[6], (set[8]<<4) | (set[9])); //年

    Write_Ds1302(0x8E,0x80);//WP為1,不能寫
}

unsigned char* select(unsigned char state1,unsigned char state2)
{
    unsigned char *p_rtc;
    p_rtc = ReadRTC();
    switch(state1)
    {
        case 1:
            switch(state2)
            {
                case 1:
                    p_rtc[4] = 0;
                    p_rtc[5] = 0;
                    break;
                case 2:
                    p_rtc[3]++;
                    if(p_rtc[3]>=10)
                    {
                        p_rtc[3]=0;
                        p_rtc[2]++;
                        if (p_rtc[2]>=6)
                        {
                            p_rtc[2] = 0;
                        }
                    }
                    break;
                case 3:
                    p_rtc[1]++;
                    if(p_rtc[1]>=10)
                    {
                        p_rtc[1]=0;
                        p_rtc[1]++;
                    }
                    if(p_rtc[1]>4&&p_rtc[0]>2)
                    {
                        p_rtc[0] = 0;
                        p_rtc[1] = 0;
                    }
                    break;
                default:break;
            }break;
        case 2:
            switch(state2)
            {
                case 1:
                    p_rtc[6] = 0;p_rtc[7]++;
                    if(p_rtc[7]>7) p_rtc[7] = 1;
                    break;
                default:break;
            }break;
        case 3:
            switch(state2)
            {
                case 1:
                    p_rtc[13]++;
                    if(p_rtc[13]>=10)
                    {
                        p_rtc[13]=0;
                        p_rtc[12]++;
                    }
                    if(p_rtc[13]>1&&p_rtc[12]>3&&
                    (p_rtc[10]==0&&(p_rtc[11]==1||p_rtc[11]==3||p_rtc[11]==5||p_rtc[11]==7||p_rtc[11]==8))
                    &&(p_rtc[10]==1&&p_rtc[11]==0||p_rtc[11]==2))                      //臘月
                    {
                        p_rtc[13] = 0;
                        p_rtc[12] = 0;
                    }
                    if(p_rtc[13]>0&&p_rtc[12]>3&&
                    (p_rtc[10]==0&&(p_rtc[11]==4||p_rtc[11]==6||p_rtc[11]==9))
                    &&(p_rtc[10]==1&&p_rtc[11]==1))
                    {
                        p_rtc[13] = 0;
                        p_rtc[12] = 0;
                    }
                    if(p_rtc[13]>8&&p_rtc[12]>2&&(p_rtc[10]==0&&p_rtc[11]==2))         //2月
                    {
                        p_rtc[13] = 0;
                        p_rtc[12] = 0;
                    }
                    break;
                case 2:
                    p_rtc[11]++;
                    if(p_rtc[11]>=10)
                    {
                        p_rtc[11]=0;
                        p_rtc[10]++;
                    }
                    if(p_rtc[11]>2&&p_rtc[10]>1)
                    {
                        p_rtc[11] = 0;
                        p_rtc[10] = 0;
                    }
                    break;
                case 3:
                    p_rtc[9]++;
                    if(p_rtc[9]>=10)
                    {
                        p_rtc[9]=0;
                        p_rtc[8]++;
                    }
                    if(p_rtc[9]>9&&p_rtc[0]>9)
                    {
                        p_rtc[9] = 0;
                        p_rtc[8] = 0;
                    }
                    break;
                default:break;
            }break;
        default:break;
    }
    return p_rtc;
}

void add_rtc(unsigned char state1,unsigned char state2)
{
    unsigned char *p_rtc;
    Write_Ds1302(0x8E,0X00); //WP為0,打開寫保護關  

    p_rtc = select(unsigned char state1,unsigned char state2);

    Write_Ds1302(w_rtc_address[0], (p_rtc[4]<<4) | (p_rtc[5]));   //秒
    Write_Ds1302(w_rtc_address[1], (p_rtc[2]<<4) | (p_rtc[3]));  //分
    Write_Ds1302(w_rtc_address[2], (p_rtc[0]<<4) | (p_rtc[1])); //時

    Write_Ds1302(w_rtc_address[5], (p_rtc[6]<<4) | (p_rtc[7]));  //周

    Write_Ds1302(w_rtc_address[3], (p_rtc[12]<<4) | (p_rtc[13]));   //日
    Write_Ds1302(w_rtc_address[4], (p_rtc[10]<<4) | (p_rtc[11]));  //月
    Write_Ds1302(w_rtc_address[6], (p_rtc[8]<<4) | (p_rtc[9])); //年

    Write_Ds1302(0x8E,0x80);//WP為1,不能寫
}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:584814 發表于 2024-2-6 14:33 | 只看該作者
建議在壇子里先找個成熟的程序讀一遍再寫。
感覺有點玄幻高深的樣子不易讀,且程序不全也無法調試。
回復

使用道具 舉報

板凳
ID:161164 發表于 2024-2-6 16:59 | 只看該作者
ds1302.h最后一行有問題
影響了C檔
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级毛片视频在线 | v亚洲 | 亚洲国产精品网站 | 日韩中文字幕一区 | 亚洲免费观看 | 国产精品免费一区二区三区四区 | 午夜精品三区 | 看片91| 亚洲综合精品 | 久久99久久99精品免视看婷婷 | 欧美三级电影在线播放 | 伊人免费网 | 91精品一区 | 欧美在线天堂 | 精品久久99 | 亚洲精品在线免费观看视频 | 国产精品久久毛片av大全日韩 | 男人天堂视频在线观看 | 国产在线精品一区二区三区 | 欧美一级黄色片在线观看 | 欧美日日 | 日本成人中文字幕 | 亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区 | 日韩视频一区在线观看 | 久草网址| 国产www在线| 九九热这里| 国内精品视频在线观看 | 国产黄色在线观看 | 亚洲一区| 婷婷久久精品一区二区 | 成人久草| 在线只有精品 | 国产精品欧美大片 | 91视频久久 | 精品少妇一区二区三区在线播放 | 久久久99国产精品免费 | 欧美一区二区三区在线观看 | 精品国产乱码久久久久久丨区2区 | 99reav | 亚洲一级在线 |