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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1702|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)*** ERROR C202 IN LINE 5 OF ..\main.c: 'RTC_RST': undefined identifier

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:607625 發(fā)表于 2023-9-5 14:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
     各位大神朋友給的一萬年歷代碼,我用keill 與porteus編譯都報錯。哪位大神指點一下?代碼如下:
  1. //DS1302寫8位地址和數(shù)據(jù)
  2. void RTC_wcom(char addr,char wdata)
  3. {
  4.    char i,j;
  5.    RTC_RST=0;
  6.    RTC_CLK=1;
  7.    RTC_RST=1;
  8.    for(i=0;i<8;i++);
  9.    {
  10.       RTC_DAT=addr >> i & 0x01;
  11.       RTC_CLK=0;
  12.       RTC_CLK=1;
  13.    }
  14.    for(j=0;j<8;j++)
  15.    {
  16.       RTC_DAT=wdata >> j & 0x01;
  17.       RTC_CLK=0;
  18.       RTC_CLK=1
  19.    }
  20.    RTC_CLK=1;
  21.    RTC_RST=0;
  22. }

  23. //DS1302讀數(shù)據(jù)
  24. uchar RTC_rcom(uchar addr)
  25. {
  26.    uchar i,rdata=0;
  27.    RTC_RST=1;
  28.    for(i=0;i<8;i++)
  29.    {
  30.       RTC_CLK=0;
  31.       RTC_DAT=addr>>i & 0x01;
  32.       RTC_CLK=1;
  33.    }
  34.    for(i=0;i<8;i++)
  35.    {
  36.       RTC_CLK=1;
  37.       RTC_CLK=0;
  38.       if(RTC_DAT)
  39.       rdata |= (0x01<<i);
  40.    }
  41.    RTC_DAT=0;
  42.    RTC_CLK=1;
  43.    RTC_RST=0;
  44.    return rdata;
  45. }

  46. //DS1302初始化
  47. void RTC_init(void)
  48. {
  49.    RTC_wcom(0x8e,0x00);        //00允許寫,80寫保護(hù)
  50.    RTC_wcom(0x8c,0x00);        //年,00~99,初始00
  51.    RTC_wcom(0x88,0x01);        //月,01~12,初始01   
  52.    RTC_wcom(0x86,0x01);        //日,01~31,初始01
  53.    RTC_wcom(0x8a,0x06);        //星期,1~7,初始6   
  54.    RTC_wcom(0x84,0x12);        //時,00~23,初始12
  55.    RTC_wcom(0x82,0x00);        //分,00~59,初始00
  56.    RTC_wcom(0x80,0x00);        //秒,00~59,初始00
  57. }
復(fù)制代碼

DS18B20驅(qū)動代碼

  1. uint tmp;
  2. uchar tmp_sign;
  3. //DS18B20對時序有一定要求,有問題的話查一下延遲時序是否符合規(guī)格書要求
  4. //DS18B20初始化
  5. void tmp_init(void)
  6. {
  7.    TMP_DQ=0;
  8.    delay(80);                //拉低480~960us
  9.    TMP_DQ=1;
  10.    delay(1);
  11.    while(TMP_DQ);        //等待應(yīng)答
  12.    while(!TMP_DQ);        //應(yīng)答結(jié)束后等待DS18B20釋放總線
  13. }
  14. //DS18B20寫命令
  15. void tmp_write(uchar cmd)
  16. {
  17.    uchar i;
  18.    for(i=0;i<8;i++)
  19.    {
  20.       TMP_DQ=0;
  21.       _nop_();
  22.       TMP_DQ=cmd & 0x01;
  23.       cmd >>= 1;
  24.       delay(5);
  25.       TMP_DQ=1;
  26.       _nop_();
  27.    }
  28. }
  29. //讀取數(shù)據(jù),先低后高
  30. uchar tmp_read(void)
  31. {
  32.    uchar i;
  33.    uchar dat=0;
  34.    for(i=0;i<8;i++)
  35.    {
  36.       TMP_DQ=0;
  37.       _nop_();
  38.       TMP_DQ=1;
  39.       _nop_();
  40.       dat >>= 1;
  41.       if(TMP_DQ==1)
  42.       dat |= 0x80;
  43.       delay(5);
  44.       TMP_DQ=1;
  45.       _nop_();
  46.    }
  47.    return dat;
  48. }

  49. void get_tmp(void)
  50. {
  51.    uchar tmpL,tmpH;
  52.    tmp_init();                //初始化
  53.    tmp_write(0xcc);        //跳過ROM
  54.    tmp_write(0x44);        //溫度轉(zhuǎn)換
  55.    tmp_init();                //再初始化
  56.    tmp_write(0xcc);        //跳過ROM
  57.    tmp_write(0xbe);        //請求數(shù)據(jù)讀取
  58.    tmpL=tmp_read();        //接收溫度低位
  59.    tmpH=tmp_read();        //接收溫度低位
  60.    tmp=tmpH;                //高位和低位合并
  61.    tmp=(tmp<<8)|tmpL;
  62.    if(tmp<0x0fff)        //判斷是正溫度
  63.    {
  64.       tmp_sign=10;        //符號為空
  65.       tmp=tmp*5/8;        //數(shù)值*0.0625為溫度值,留一位小數(shù),為了方便數(shù)據(jù)處理,乘以10倍,轉(zhuǎn)為整型
  66.    }                        //這里用小數(shù)的話,代碼長度剛好超2k了,一個方法是直接改成(*5/8),節(jié)省空間
  67.    else                        //另一個方法是設(shè)置里,把ROM由small改為large
  68.    {
  69.       tmp_sign=11;        //負(fù)溫度顯示負(fù)號“-”
  70.       tmp=(~tmp+1)*5/8;
  71.    }
  72. }
復(fù)制代碼

LCD1602驅(qū)動代碼

  1. uchar code num[] = "0123456789 -";
  2. uchar code week[][3] = {"MON","TUE","WED","THU","FRI","SAT","SUN"};
  3. uchar yyH,yyL,moH,moL,ddH,ddL,hhH,hhL,miH,miL,ssH,ssL;
  4. uint wk;

  5. //LCD1602寫命令
  6. void LCD_wr_cmd(uchar cmd)
  7. {
  8.    busy_check();
  9.    LCD_RS=0;
  10.    LCD_RW=0;
  11.    LCD_CE=1;
  12.    LCD_DA=cmd;
  13.    delay(100);
  14.    LCD_CE=0;
  15. }
  16. //LCD1602寫數(shù)據(jù)
  17. void LCD_wr_dat(uchar dat)
  18. {
  19.    busy_check();
  20.    LCD_RS=1;
  21.    LCD_RW=0;
  22.    LCD_CE=1;
  23.    LCD_DA=dat;
  24.    delay(100);
  25.    LCD_CE=0;
  26. }
  27. //LCD1602查忙,檢查前面數(shù)據(jù)是否已處理完
  28. void busy_check(void)
  29. {
  30.    uchar busy_flag;
  31.    busy_flag = 0xff;
  32.    LCD_RS=0;
  33.    LCD_RW=1;
  34.    do
  35.    {
  36.       LCD_CE=1;
  37.       busy_flag=LCD_DA;
  38.       delay(100);
  39.       LCD_CE=0;
  40.    }while(busy_flag & 0x80);
  41. }
  42. //LCD初始化
  43. void LCD_init(void)
  44. {
  45.    LCD_wr_cmd(0x01);        //清顯示
  46.    LCD_wr_cmd(0x06);        //光標(biāo)右移,文字不動
  47.    LCD_wr_cmd(0x0c);        //開顯示,無光標(biāo),不閃爍
  48.    LCD_wr_cmd(0x38);        //8位總線,雙行顯示,5X7的點陣字符
  49. }
  50. //獲取年月日,星期,時間數(shù)據(jù)
  51. void get_dat(void)
  52. {
  53.    yyH=RTC_rcom(0x8d)/16;
  54.    yyL=RTC_rcom(0x8d)%16;
  55.    moH=RTC_rcom(0x89)/16;
  56.    moL=RTC_rcom(0x89)%16;
  57.    ddH=RTC_rcom(0x87)/16;
  58.    ddL=RTC_rcom(0x87)%16;
  59.    wk =RTC_rcom(0x8b);
  60.    hhH=RTC_rcom(0x85)/16;
  61.    hhL=RTC_rcom(0x85)%16;
  62.    miH=RTC_rcom(0x83)/16;
  63.    miL=RTC_rcom(0x83)%16;
  64.    ssH=RTC_rcom(0x81)/16;
  65.    ssL=RTC_rcom(0x81)%16;
  66. }
復(fù)制代碼

按鍵設(shè)置

  1. uchar key=0;
  2. uchar code month_day[]={31,28,31,30,31,30,31,31,30,31,30,31};
  3. //按鍵掃描
  4. void key_scan(void)
  5. {
  6.    if(!t_set)
  7.       {
  8.          delay10ms(1);
  9.          if(!t_set)
  10.          while(!t_set);
  11.          key=1;
  12.       }
  13.    if(!t_rst)
  14.       {
  15.          delay10ms(1);
  16.          if(!t_rst)
  17.          while(!t_rst);
  18.          key=2;
  19.       }
  20. }
  21. //按加減鍵設(shè)置時間
  22. void manual_set(uchar min,uchar max,uchar LCD_cmd,uchar RTC_cmd)
  23. {
  24.    uchar temp=min;
  25.    do
  26.    {
  27.       key_scan();        //按鍵掃描
  28.       if(!t_add)        //加按鍵按下,按住就一直增加
  29.       {
  30.          delay10ms(10);
  31.          if(!t_add)
  32.          {
  33.             ++temp;
  34.             if(temp==max+1)temp=min;
  35.             LCD_wr_cmd(LCD_cmd|0x80);        //顯示調(diào)整的值
  36.             LCD_wr_dat(num[temp/10]);
  37.             LCD_wr_dat(num[temp%10]);
  38.             delay10ms(20);                //增加延時,調(diào)節(jié)增加的速度
  39.          }
  40.       }
  41.       if(!t_dec)        //減按鍵按下,功能同上
  42.       {
  43.          delay10ms(10);
  44.          if(!t_dec)
  45.          {
  46.             if(temp==min)temp=max+1;
  47.             --temp;
  48.             LCD_wr_cmd(LCD_cmd|0x80);
  49.             LCD_wr_dat(num[temp/10]);
  50.             LCD_wr_dat(num[temp%10]);
  51.             delay10ms(20);
  52.          }
  53.       }
  54.    }while(key!=1);        //確定設(shè)置鍵是否按下,按下就跳出循環(huán)
  55.    key=0;                //按鍵值清零
  56.    RTC_wcom(RTC_cmd,temp/10*16+temp%10);        //最終值寫入DS1302
  57. }
  58. //星期的計算
  59. void week_set(void)
  60. {
  61.    uchar i;
  62.    yyH=RTC_rcom(0x8d)/16;        //獲取年月日數(shù)據(jù)
  63.    yyL=RTC_rcom(0x8d)%16;
  64.    moH=RTC_rcom(0x89)/16;
  65.    moL=RTC_rcom(0x89)%16;
  66.    ddH=RTC_rcom(0x87)/16;
  67.    ddL=RTC_rcom(0x87)%16;
  68.    wk=(yyH*10+yyL)*365+(yyH*10+yyL)/4;        //先按年的天數(shù)計算,加上閏年天數(shù)
  69.    for(i=0;i<moH*10+moL-1;i++)                //再加上月的天數(shù)
  70.    {
  71.       wk=wk+month_day[i];
  72.    }
  73.    wk=wk+ddH*10+ddL;                //再加上天數(shù)
  74.    if((yyH*10+yyL)/4==0)        //如果當(dāng)年是閏年
  75.    {
  76.    if(moH*10+moL<3)                //且當(dāng)月不到3月份
  77.       wk=wk-1;                        //需減去1天
  78.    }
  79.    wk=(wk%7+5)%7+1;        //總天數(shù)除以7取余,加上2000年1月1日補(bǔ)償數(shù)5,可能超過7,再取余,避免出現(xiàn)0,再加1
  80.    RTC_wcom(0x8a,wk);        //寫入寄存器
  81. }
  82. //時間設(shè)置
  83. void time_set(void)
  84. {
  85.    key_scan();
  86.    if(key==1)        //設(shè)置鍵按下
  87.    {
  88.       key=0;
  89.       LCD_wr_cmd(0x01);                //清顯示
  90.       LCD_wr_cmd(0x0f);                //開顯示,有光標(biāo),閃爍
  91.       LCD_wr_cmd(0x00|0x80);
  92.       LCD_wr_dat('2');
  93.       LCD_wr_dat('0');
  94.       LCD_wr_dat('0');
  95.       LCD_wr_dat('0');
  96.       RTC_wcom(0x8e,0x00);        //00允許寫
  97.       RTC_wcom(0x80,0x80);        //停止計時
  98.       manual_set(0,99,0x02,0x8c);        //設(shè)置年
  99.       LCD_wr_dat('-');
  100.       LCD_wr_dat('0');
  101.       LCD_wr_dat('1');
  102.       manual_set(1,12,0x05,0x88);        //設(shè)置月
  103.       LCD_wr_dat('-');
  104.       LCD_wr_dat('0');
  105.       LCD_wr_dat('1');
  106.       manual_set(1,31,0x08,0x86);        //設(shè)置日
  107.       LCD_wr_cmd(0x40|0x80);
  108.       LCD_wr_dat('0');
  109.       LCD_wr_dat('0');
  110.       manual_set(0,23,0x40,0x84);        //設(shè)置小時
  111.       LCD_wr_dat(':');
  112.       LCD_wr_dat('0');
  113.       LCD_wr_dat('0');
  114.       manual_set(0,59,0x43,0x82);        //設(shè)置分鐘
  115.       week_set();
  116.       RTC_wcom(0x80,0x00);        //開始計時
  117.       LCD_wr_cmd(0x0c);                //開顯示,無光標(biāo),不閃爍
  118.    }
  119.    if(key==2)        //復(fù)位鍵按下
  120.    {
  121.       key=0;
  122.       RTC_init();        //DS1302恢復(fù)初始值
  123.    }
  124. }
復(fù)制代碼

主函數(shù)及顯示部分:

  1. #include <reg51.h>
  2. sbit LCD_RS=P2^0;        //LCD相關(guān)端口
  3. sbit LCD_RW=P2^1;
  4. sbit LCD_CE=P2^2;

  5. sbit t_set=P2^4;        //按鍵
  6. sbit t_add=P2^5;
  7. sbit t_dec=P2^6;
  8. sbit t_rst=P2^7;

  9. sbit RTC_DAT=P1^0;        //DS1302相關(guān)端口
  10. sbit RTC_CLK=P1^1;
  11. sbit RTC_RST=P1^2;

  12. sbit TMP_DQ=P3^7;

  13. #define LCD_DA P0        //LCD數(shù)據(jù)口
  14. typedef unsigned char uchar;
  15. typedef unsigned int uint;

  16. void display(void)
  17. {
  18.    uchar i;
  19.    uchar a,b,c;
  20.    get_dat();
  21.    //顯示日期
  22.    LCD_wr_cmd(0x00|0x80);        //從1行0列開始顯示
  23.    LCD_wr_dat('2');
  24.    LCD_wr_dat('0');
  25.    LCD_wr_dat(num[yyH]);
  26.    LCD_wr_dat(num[yyL]);
  27.    LCD_wr_dat('-');
  28.    LCD_wr_dat(num[moH]);
  29.    LCD_wr_dat(num[moL]);
  30.    LCD_wr_dat('-');
  31.    LCD_wr_dat(num[ddH]);
  32.    LCD_wr_dat(num[ddL]);
  33.    //顯示星期
  34.    LCD_wr_cmd(0x0c|0x80);
  35.    for(i=0;i<3;i++)
  36.    {
  37.       LCD_wr_dat(week[wk-1][i]);
  38.    }   
  39.    //顯示時間
  40.    LCD_wr_cmd(0x40|0x80);        //從2行0列開始顯示
  41.    LCD_wr_dat(num[hhH]);
  42.    LCD_wr_dat(num[hhL]);
  43.    LCD_wr_dat(':');
  44.    LCD_wr_dat(num[miH]);
  45.    LCD_wr_dat(num[miL]);
  46.    LCD_wr_dat(':');
  47.    LCD_wr_dat(num[ssH]);
  48.    LCD_wr_dat(num[ssL]);
  49.    //顯示溫度
  50.    get_tmp();        //獲取已乘10倍的溫度值
  51.    a=tmp/100;        //取百位數(shù)作為十位數(shù)
  52.    b=tmp/10%10;        //取十位數(shù)作為個位數(shù)
  53.    c=tmp%10;        //取個位數(shù)作為小數(shù)點后一位數(shù)
  54.    LCD_wr_cmd(0x49|0x80);        //從2行9列開始顯示
  55.    LCD_wr_dat(num[tmp_sign]);        //顯示溫度符號,正溫度顯示空格
  56.    if(a!=0)        //如果十位不是0,就顯示,否則跳過不顯示
  57.    LCD_wr_dat(num[a]);
  58.    LCD_wr_dat(num[b]);
  59.    LCD_wr_dat('.');
  60.    LCD_wr_dat(num[c]);
  61.    LCD_wr_dat(0xdf);        //角度符號,加上下面的大寫“C”,作為溫度符號
  62.    LCD_wr_dat('C');
  63.    LCD_wr_dat(num[10]);        //末尾加一個空格,避免十位不顯示時,這里有殘留的“C”符號
  64. }

  65. void main(void)
  66. {
  67.    RTC_init();        //DS1302初始化
  68.    LCD_init();        //LCD1602初始化
  69.    while (1)
  70.    {
  71.       display();        //顯示
  72.       time_set();        //時間設(shè)置
  73.    }
  74. }

復(fù)制代碼


    報錯如下:
"D:\Program Files (x86)\Labcenter Electronics\Proteus 8 Professional\Tools\MAKE\RunTool.exe" --good-exits=0,1 --executable=C51.exe "..\main.c" ROM(D16M) BROWSE DEBUG CODE OBJECTEXTEND PREPRINT  OBJECT("main.OBJ")

C51 COMPILER V9.56.0.0 - SN: K1DZC-CS53EC
COPYRIGHT Copyright (C) 2012 - 2016 ARM Ltd and ARM Germany GmbH. All rights reserved.
*** ERROR C202 IN LINE 5 OF ..\main.c: 'RTC_RST': undefined identifier
*** ERROR C202 IN LINE 6 OF ..\main.c: 'RTC_CLK': undefined identifier
*** ERROR C202 IN LINE 7 OF ..\main.c: 'RTC_RST': undefined identifier
*** ERROR C202 IN LINE 10 OF ..\main.c: 'RTC_DAT': undefined identifier
*** ERROR C202 IN LINE 11 OF ..\main.c: 'RTC_CLK': undefined identifier
*** ERROR C202 IN LINE 12 OF ..\main.c: 'RTC_CLK': undefined identifier
*** ERROR C202 IN LINE 16 OF ..\main.c: 'RTC_DAT': undefined identifier
*** ERROR C202 IN LINE 17 OF ..\main.c: 'RTC_CLK': undefined identifier
*** ERROR C202 IN LINE 18 OF ..\main.c: 'RTC_CLK': undefined identifier
make: *** [main.OBJ] Error 1

*** ERROR C141 IN LINE 19 OF ..\main.c: syntax error near '}'
*** ERROR C202 IN LINE 21 OF ..\main.c: 'RTC_RST': undefined identifier
*** ERROR C129 IN LINE 25 OF ..\main.c: missing ';' before 'RTC_rcom'

C51 COMPILATION COMPLETE.  0 WARNING(S),  12 ERROR(S)
錯誤代碼2
Firmware file missing from the project directory: 80C31_1/Debug/Debug.OMF
Firmware file missing from the project directory: 80C31_1/Debug/Debug.OMF



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

使用道具 舉報

沙發(fā)
ID:647261 發(fā)表于 2023-9-5 15:54 | 只看該作者
額……你這個朋友給的應(yīng)該不是完整的吧,看下面鏈接
http://www.zg4o1577.cn/bbs/dpj-230067-1.html
回復(fù)

使用道具 舉報

板凳
ID:1059989 發(fā)表于 2023-9-5 23:02 | 只看該作者
看起來 所有代碼都是放在一個main.c里的,那要把下面的這些定義,放到main.c的開頭。sbit LCD_RS=P2^0;        //LCD相關(guān)端口
sbit LCD_RW=P2^1;
sbit LCD_CE=P2^2;

sbit t_set=P2^4;        //按鍵
sbit t_add=P2^5;
sbit t_dec=P2^6;
sbit t_rst=P2^7;

sbit RTC_DAT=P1^0;        //DS1302相關(guān)端口
sbit RTC_CLK=P1^1;
sbit RTC_RST=P1^2;
回復(fù)

使用道具 舉報

地板
ID:1059989 發(fā)表于 2023-9-5 23:06 | 只看該作者
看起來所有代碼都是放在main.c里的,那要把RTC_CLK等的定義,放到main.c的開頭,也就是放在引用這些定義的前面,要先定義,后面才能引用。
回復(fù)

使用道具 舉報

5#
ID:607625 發(fā)表于 2023-9-6 08:15 | 只看該作者
FrankJi 發(fā)表于 2023-9-5 23:02
看起來 所有代碼都是放在一個main.c里的,那要把下面的這些定義,放到main.c的開頭。sbit LCD_RS=P2^0;     ...

謝謝指導(dǎo)
回復(fù)

使用道具 舉報

6#
ID:607625 發(fā)表于 2023-9-6 08:16 | 只看該作者
sttt300 發(fā)表于 2023-9-5 15:54
額……你這個朋友給的應(yīng)該不是完整的吧,看下面鏈接
http://www.zg4o1577.cn/bbs/dpj-230067-1.html

謝謝指導(dǎo)
回復(fù)

使用道具 舉報

7#
ID:607625 發(fā)表于 2023-9-6 08:17 | 只看該作者
謝謝指導(dǎo)
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费一区二区三区四区 | 欧美日韩不卡合集视频 | av男人天堂影院 | 色婷婷亚洲国产女人的天堂 | 欧美电影在线 | www.色综合| 国产伦精品一区二区三毛 | 午夜av成人 | 成人免费视频一区 | 国产精品久久国产精品99 gif | 日韩免费一级 | 中文字幕在线观看精品 | 久久久做 | 日韩一区二区三区在线视频 | 98成人网 | 91视频在线 | 久久精品91 | 精品乱人伦一区二区三区 | 一区二区三区亚洲精品国 | 国产精品久久久久久久久久 | 成人免费一区二区三区视频网站 | 国产一区二区久久 | 一级黄色短片 | 久久网站免费视频 | 亚洲一级毛片 | 一级a爱片久久毛片 | 欧美成ee人免费视频 | 亚洲精品成人网 | 亚洲一区在线播放 | 国产精品99久久久久久宅男 | 欧美aaaaa | 成人av鲁丝片一区二区小说 | 久久精品一区 | 四色永久 | 成年女人免费v片 | 成人自拍av | 亚洲乱码国产乱码精品精98午夜 | 亚洲视频免费 | 色综合久久天天综合网 | 亚洲欧美在线视频 | 黄色网络在线观看 |