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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機C語言定義全局變量count為什么編譯就過不了?怎么解決呢

[復制鏈接]
跳轉到指定樓層
樓主
ID:294657 發表于 2018-10-6 16:01 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
定義全局變量count為什么編譯就過不了了?怎么解決呢
錯誤提示
Build target 'Target 1'
linking...
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  TIME
    MODULE:  .\Objects\main.obj (MAIN)
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?INIT_TIME?MAIN
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  COUNT
    MODULE:  .\Objects\main.obj (MAIN)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  COUNT
    MODULE:  .\Objects\main.obj (MAIN)
    ADDRESS: 01D7H
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  COUNT
    MODULE:  .\Objects\main.obj (MAIN)
    ADDRESS: 01DFH
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  COUNT
    MODULE:  .\Objects\main.obj (MAIN)
    ADDRESS: 0257H
Program Size: data=16.0 xdata=0 code=601
Target not created.
Build Time Elapsed:  00:00:02



源代碼
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. #define Date P0
  6. sbit DSIO=P2^0;
  7. sbit RST=P2^4;
  8. sbit SCLK=P2^1;
  9. sbit RS = P1^0;
  10. sbit RW = P1^1;
  11. sbit EN = P2^5;
  12. //---DS1302寫入和讀取時分秒的地址命令---//
  13. //---秒分時日月周年 最低位讀寫位;-------//
  14. uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
  15. uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
  16. //---DS1302時鐘初始化2013年1月1日星期二12點00分00秒。---//
  17. //---存儲順序是秒分時日月周年,存儲格式是用BCD碼---//
  18. uchar TIME[7] = {0, 0, 0x12, 0x01, 0x01, 0x02, 0x13};

  19. void Ds1302Write(uchar addr, uchar dat);
  20. uchar Ds1302Read(uchar addr);
  21. void Ds1302Init();
  22. void Ds1302ReadTime();
  23. extern uchar count;
  24. void Ds1302Write(uchar addr, uchar dat)   //向DS1302命令
  25. {
  26. uchar n;
  27. RST = 0;
  28. _nop_();
  29. SCLK = 0;//先將SCLK置低電平。
  30. _nop_();
  31. RST = 1; //然后將RST(CE)置高電平。
  32. _nop_();
  33. for (n=0; n<8; n++)//開始傳送八位地址命令
  34. {
  35.   DSIO = addr & 0x01;//數據從低位開始傳送
  36.   addr >>= 1;
  37.   SCLK = 1;//數據在上升沿時,DS1302讀取數據
  38.   _nop_();
  39.   SCLK = 0;
  40.   _nop_();
  41. }
  42. for (n=0; n<8; n++)//寫入8位數據
  43. {
  44.   DSIO = dat & 0x01;
  45.   dat >>= 1;
  46.   SCLK = 1;//數據在上升沿時,DS1302讀取數據
  47.   _nop_();
  48.   SCLK = 0;
  49.   _nop_();
  50. }
  51.    
  52. RST = 0;//傳送數據結束
  53. _nop_();
  54. }
  55. uchar Ds1302Read(uchar addr)  //讀取一個地址的數據
  56. {
  57. uchar n,dat,dat1;
  58. RST = 0;
  59. _nop_();
  60. SCLK = 0;//先將SCLK置低電平。
  61. _nop_();
  62. RST = 1;//然后將RST(CE)置高電平。
  63. _nop_();
  64. for(n=0; n<8; n++)//開始傳送八位地址命令
  65. {
  66.   DSIO = addr & 0x01;//數據從低位開始傳送
  67.   addr >>= 1;
  68.   SCLK = 1;//數據在上升沿時,DS1302讀取數據
  69.   _nop_();
  70.   SCLK = 0;//DS1302下降沿時,放置數據
  71.   _nop_();
  72. }
  73. _nop_();
  74. for(n=0; n<8; n++)//讀取8位數據
  75. {
  76.   dat1 = DSIO;//從最低位開始接收
  77.   dat = (dat>>1) | (dat1<<7);
  78.   SCLK = 1;
  79.   _nop_();
  80.   SCLK = 0;//DS1302下降沿時,放置數據
  81.   _nop_();
  82. }
  83. RST = 0;
  84. _nop_();
  85. return dat;
  86. }
  87. void Ds1302Init()
  88. {
  89. uchar n;
  90. Ds1302Write(0x8E,0X00);   //禁止寫保護,就是關閉寫保護功能
  91. for (n=0; n<7; n++)//寫入7個字節的時鐘信號:分秒時日月周年
  92. {
  93.   Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
  94. }
  95. Ds1302Write(0x8E,0x80);   //打開寫保護功能
  96. }
  97. void Ds1302ReadTime()   //讀取時鐘信息
  98. {
  99. uchar n;
  100. for (n=0; n<7; n++)//讀取7個字節的時鐘信號:分秒時日月周年
  101. {
  102.   TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
  103. }
  104. }
  105. void delay(uint xms) //延遲函數
  106. {
  107. uint i,j;
  108. for(i=xms;i>0;i--)
  109. for(j=112;j>0;j--);
  110. }
  111. void com(uchar command) //1602寫命令
  112. {
  113. RS=0;
  114. RW=0;
  115. Date=command;
  116. delay(5);
  117. EN=1;
  118. delay(5);
  119. EN=0;
  120. }
  121. void dat(uchar date)  //1602寫數據
  122. {
  123. RS=1;
  124. RW=0;
  125. Date=date;
  126. delay(5);
  127. EN=1;
  128. delay(5);
  129. EN=0;
  130. }
  131. void LCD_Init()       //1602初始化
  132. {
  133. com(0x38);        //LCD設置
  134. delay(5);
  135. com(0x01);        //清屏
  136. com(0x06);        //寫入新數據后光標后移一位,整屏不移動
  137. com(0x0c);        //顯示光標,光標不顯示
  138. }
  139. void LcdDisplay()
  140. {
  141. com(0x80+0X40);
  142. dat('0'+TIME[2]/16);    //時
  143. dat('0'+(TIME[2]&0x0f));     
  144. dat('-');
  145. dat('0'+TIME[1]/16);    //分
  146. dat('0'+(TIME[1]&0x0f));
  147. dat('-');
  148. dat('0'+TIME[0]/16);    //秒
  149. dat('0'+(TIME[0]&0x0f));
  150. com(0x80);
  151. dat('2');
  152. dat('0');
  153. dat('0'+TIME[6]/16);   //年
  154. dat('0'+(TIME[6]&0x0f));
  155. dat('-');
  156. dat('0'+TIME[4]/16);   //月
  157. dat('0'+(TIME[4]&0x0f));
  158. dat('-');
  159. dat('0'+TIME[3]/16);   //日
  160. dat('0'+(TIME[3]&0x0f));
  161. com(0x8D);
  162. dat('0'+(TIME[5]&0x07)); //星期   
  163. }
  164. void Init_time()
  165. {
  166. TMOD = 0x01;
  167. TH0 = (65536-50000)/256;
  168. TL0 = (65536-50000)%256;
  169. EA = 1;
  170. ET0 = 1;
  171. TR0 = 1;
  172. }
  173. void main()
  174. {
  175. count = 0;
  176. LCD_Init();
  177. Ds1302Init();
  178. while(1)
  179. {
  180.   if(count>=20)
  181.   {
  182.    Ds1302ReadTime();
  183.    LcdDisplay();
  184.   }
  185. }
  186. }
  187. void time()interrupt 1
  188. {
  189. TH0 = (65536-50000)/256;
  190. TL0 = (65536-50000)%256;
  191. count++;
  192. }
復制代碼



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

使用道具 舉報

沙發
ID:387733 發表于 2018-10-6 22:04 | 只看該作者
兩個問題,
    1、數組TIME[] 與定時器中斷函數名 time() 重復定義報錯,按理說C語言允許字母大小寫區別,但是這里確實是報錯了,把函數名改成 timer()后,錯誤消失。
    2、全局變量 count 前面加了 extern,成了外部變量,在別的模塊定義,現在這個是單模塊, count 編譯程序無法定位,所以報錯,去掉前面的 extern,  錯誤消失,編譯通過了。
回復

使用道具 舉報

板凳
ID:164602 發表于 2018-10-7 08:16 | 只看該作者
還有一個小問題: Init_time()沒有使用。
回復

使用道具 舉報

地板
ID:294657 發表于 2018-10-8 13:47 | 只看該作者
sxhwdz 發表于 2018-10-6 22:04
兩個問題,
    1、數組TIME[] 與定時器中斷函數名 time() 重復定義報錯,按理說C語言允許字母大小寫區別 ...

好的,謝謝,問題解決了,可是為什么你說的兩種方法隨意改變其中一個就可以了呢
按理說兩種方法不相干啊
回復

使用道具 舉報

5#
ID:387733 發表于 2018-10-8 18:04 | 只看該作者
我是最新版的keil,C51V5.59版,改變其中一個還是不行的

compiling test.c...
linking...
*** ERROR L104: MULTIPLE PUBLIC DEFINITIONS
    SYMBOL:  TIME
    MODULE:  .\Objects\test.obj (TEST)
*** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESS
    SEGMENT: ?PR?INIT_TIME?TEST
Program Size: data=17.0 xdata=0 code=659
Target not created.
Build Time Elapsed:  00:00:01
回復

使用道具 舉報

6#
ID:294657 發表于 2018-10-10 12:13 | 只看該作者
sxhwdz 發表于 2018-10-8 18:04
我是最新版的keil,C51V5.59版,改變其中一個還是不行的

compiling test.c...

好的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 性欧美hd| 日韩激情一区 | 欧美在线a | 国产黄色麻豆视频 | 国产999精品久久久久久 | www.久久.com | 久久99精品久久久97夜夜嗨 | 国产一区二区三区视频在线观看 | 亚洲精品一区二区三区在线 | 成人午夜精品一区二区三区 | 97久久精品 | 成人在线观看欧美 | 精品久久久久久一区二区 | 国产一级电影网 | 精品国产精品国产偷麻豆 | 99久热在线精品视频观看 | 青青草av在线播放 | 亚洲日日 | 亚洲免费大片 | 91精品一区二区三区久久久久 | 91精品一区二区三区久久久久久 | 久久午夜国产精品www忘忧草 | 伊人伊人 | 韩日一区二区三区 | 亚洲精品一区二区 | 特级生活片| 亚洲精选久久 | 热99在线| av资源中文在线 | 成人性视频在线播放 | 久久国产精品亚洲 | 国产精品夜色一区二区三区 | 久久久精品一区 | 欧美日韩在线精品 | 男人的天堂在线视频 | 日本一二区视频 | 日韩中文字幕在线观看视频 | а√中文在线8 | 精品国产一区二区三区久久 | 欧美又大粗又爽又黄大片视频 | 欧美一区不卡 |