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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 14787|回復: 5
收起左側

undefined identifier 單片機程序運行后出現以下情況,是什么問題?謝謝回復。

[復制鏈接]
ID:207753 發表于 2017-6-4 19:11 | 顯示全部樓層 |閱讀模式
wwwwwwwwwwwwww.PNG qqqqqqqqqqqqqqqqq.PNG

keil報錯:undefined identifier

  1. #include<reg52.h>                              //包含單片機寄存器的頭文件
  2. #include<string.h>                             //使用字符串
  3. #include<intrins.h>                            //單片機頭文件
  4. #include<lcd1602.h>                            //液晶顯示lcd1602的頭文件
  5. //#include<24c04.h>                            //24c02(存儲記憶)的頭文件
  6. #include<ds1302.h>                             //時鐘芯片ds1302頭文件
  7. #define uchar unsigned char
  8. #define uint unsigned int
  9. uchar  display[]={"             "};
  10. uchar i=0,j=0;
  11. uint x=0;
  12. //-------------INT0中斷------------
  13. void INT0_0() interrupt 0
  14. {
  15.         i++;
  16.         if(i==1)
  17.         {
  18.                 TR0=1;
  19.         }
  20. }


  21. //------------INT1中斷-------------
  22. void INT1_1() interrupt 2
  23. {
  24.         j++;
  25.         if(j==1)
  26.         {
  27.                 TR0=0;

  28.                 x=256*TH0+TL0;                  //將字節轉換成十進制數
  29.         }
  30. }



  31. //-------------初始化--------------

  32. void INIT()
  33. {
  34.         TMOD=0x01;
  35.         TH0=0;
  36.         TL0=0;
  37.         EA=1;
  38.         EX0=1;
  39.         EX1=1;
  40.         IT0=1;
  41.         IT1=1;
  42.         PX0=1;
  43. }


  44. //------------數據轉換--------------
  45. void dispose()
  46. {
  47.         display[7]=x/10000+'0';
  48.         display[8]=x%10000/1000+'0';
  49.         display[10]='s';
  50.         display[11]='e';
  51.         display[12]='c';
  52. }


  53. //----------主程序----------------
  54. void main()
  55. {
  56.     Init_LCD();         //初始化LCD
  57.         //display[7]='1';
  58.         //display[8]='1';
  59.         //display[10]='s';
  60.         //display[11]='e';
  61.         //display[12]='c';
  62.     //IIC_24C04_Init();   //初始化24C04
  63.         INIT();
  64.         while(1)
  65.         {
  66.                 GetTime();              //獲得當前時間
  67.                 Format_DateTime(DateTime[6],LCD_DSY_BUFFER1+5);         //通道號顯示
  68.                 Format_DateTime(DateTime[4],LCD_DSY_BUFFER1+8);
  69.                 Format_DateTime(DateTime[3],LCD_DSY_BUFFER1+11);
  70.             //strcpy(LCD_DSY_BUFFER1+13,WEEK[DateTime[5]]);
  71.                 Format_DateTime(DateTime[2],LCD_DSY_BUFFER2+5);
  72.                 Format_DateTime(DateTime[1],LCD_DSY_BUFFER2+8);        
  73.                 Format_DateTime(DateTime[0],LCD_DSY_BUFFER2+11);
  74.                 //Display_String(display,0x40);
  75.                 Display_String(LCD_DSY_BUFFER2,0X00);      //液晶顯示
  76.                 dispose();
  77.                 Display_String(display,0x40);
  78.         }
  79. }

  80.                                                    
  81. #ifndef _lcd1602_2010_4_28_
  82. #define _lcd1602_2010_4_28_
  83. /*********************************lcd1602*****************************/
  84. #define uchar unsigned char
  85. #define uint unsigned int
  86.                               //定義1602與單片機的接口
  87. sbit RS=P2^0;                  //指令數據選擇
  88. sbit RW=P2^1;                  //接地,執行寫操作
  89. sbit EN=P2^2;                  //信號使能

  90. //---------------延時i毫秒函數------------------
  91. void DelayMs(uint x)
  92. {
  93. uchar i;
  94. while(x--) for(i=0;i<120;i++);
  95. }

  96. //---------------讀LCD狀態------------------
  97. uchar Read_LCD_State()
  98. {
  99. uchar state;
  100. RS=0;
  101. RW=1;
  102. EN=1;
  103. DelayMs(1);
  104. state=P0;
  105. EN=0;
  106. DelayMs(1);
  107. return state;
  108. }


  109. //----------------忙等待(LCD忙檢測)--------------------------
  110. void LCD_Busy_Wait()
  111. {
  112. while((Read_LCD_State()&0x80)==0x80); //讀取忙標志位BF,BF=1則一直等待 DelayMS(5)
  113. DelayMs(5);
  114. }


  115. //-----------------向LCD寫數據----------------
  116. void Write_LCD_Data(uchar dat)
  117. {
  118. LCD_Busy_Wait();      //忙檢測確保上一指令完成,也可用適當的延時替換此行
  119. RS=1;
  120. RW=0;
  121. EN=0;
  122. P0=dat;
  123. EN=1;
  124. DelayMs(1);
  125. EN=0;
  126. }
  127. //--------------寫LCD命令--------------------
  128. void Write_LCD_Command(uchar cmd)
  129. {
  130. LCD_Busy_Wait();
  131. RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMs(1);EN=0;
  132. }
  133. //----------------LCD初始化-------------------
  134. void Init_LCD()
  135. {
  136. Write_LCD_Command(0x38);     //8位數據接口,2行顯示,5*7點陣字符
  137. DelayMs(1);   //延時保證上一指令完成
  138. Write_LCD_Command(0x01);     //清DDRAM和AC值
  139. DelayMs(1);
  140. Write_LCD_Command(0x06);     //數據讀寫操作畫面不動,AC自動加1
  141. DelayMs(1);
  142. Write_LCD_Command(0x0c);     //開顯示,關光標和閃爍
  143. DelayMs(1);
  144. }
  145. //-------------設置液晶顯示位置---------------------
  146. void Set_LCD_POS(uchar p)
  147. {
  148. Write_LCD_Command(p|0x80);
  149. }
  150. //-------------在LCD上顯示字符串-----------------
  151. void Display_String(uchar*s,uchar p)
  152. {uchar i;
  153. Set_LCD_POS(p);
  154. for(i=0;i<16;i++)
  155. {
  156. Write_LCD_Data(s[i]);
  157. DelayMs(1);
  158. }
  159. }
  160. /*********************lcd1602結束*****************************/

  161. #endif
  162. #ifndef _ds1302_2010_4_28_
  163. #define _ds1302_2010_4_28_

  164. /************************ds1302*********************/

  165. #define uchar unsigned char
  166. #define uint unsigned int                     
  167.                                                //定義DS1302與MCU接口
  168. sbit IO=P2^4;                                //IO接口
  169. sbit SCLK=P2^5;                              //時鐘線引腳
  170. sbit RST=P2^6;                               //復位線引腳
  171. uchar*WEEK[]={"SUN","***","MON","TUS","WEN","THU","FRI","SAT"};
  172. uchar LCD_DSY_BUFFER1[]={"DATE 00-00-00   "};
  173. uchar LCD_DSY_BUFFER2[]={"TIME 00:00:00   "};
  174. uchar DateTime[7];
  175. //--------------向DS1302寫入一字符(一字節數據)----------------
  176. void Write_A_Byte_TO_DS1302(uchar x)
  177. {
  178. uchar i;
  179. for(i=0;i<8;i++)
  180. {
  181. IO=x&0x01;SCLK=1;SCLK=0;X>>=1;            //x右移1位,高位補0
  182. }
  183. }
  184. //-------------從DS1302讀取一字節(一字節數據)-------------
  185. uchar Get_A_Byte_FROM_DS1302()
  186. {
  187. uchar i,b=0x00;
  188. for(i=0;i<8;i++)
  189. {
  190. b|=_crol_((uchar)IO,i);
  191. SCLK=1;SCLK=0;
  192. }
  193. return b/16*10+b%16;
  194. }
  195. //----------------從DS1302指定位置讀數據(讀取DS1302某地址的數據,先寫命令字,后讀數據)-------------------
  196. uchar Read_Date(uchar addr)
  197. {
  198. uchar dat;
  199. RST=0;          //復位
  200. SCLK=0;         //時鐘脈沖置0
  201. RST=1;          //啟動數據傳送
  202. Write_A_Byte_IO_DS1302(addr);         //寫入地址命令字
  203. dat=Get_A_Byte_FROM_DS1302();         //讀出一個字節的數據
  204. SCLK=1;RST=0;
  205. return dat;
  206. }
  207. //---------------讀取當前日期時間----------------
  208. void GetTime()
  209. {
  210. uchar i;addr=0x81;
  211. for(i=0;i<7;i++)
  212. {
  213. DateTime[i]=Read_Data(addr);addr+=2;
  214. }
  215. }
  216. //---------------日期與時間轉換為數字字符(格式化日期時間函數)-------------------
  217. void Format_DateTime(uchar d,uchar*a)
  218. {
  219. a[0]=d/10+'0';
  220. a[1]=d%10+'0';
  221. }
  222. /**********************ds1302結束****************************/
  223. #endif

復制代碼
回復

使用道具 舉報

ID:96682 發表于 2017-6-4 21:47 | 顯示全部樓層
已經給出缺少哪樣文件的提示了,查找添加相應的文件進去就好
回復

使用道具 舉報

ID:207753 發表于 2017-6-4 22:17 | 顯示全部樓層
DateTime,LCD_DSY_BUFFER1和LCD_DSY_BUFFER2怎么定義?我添加了這兩行,然后變成這樣了。

#include<reg52.h>                              //包含單片機寄存器的頭文件
#include<string.h>                             //使用字符串
#include<intrins.h>                            //單片機頭文件
#include<lcd1602.h>                            //液晶顯示lcd1602的頭文件
//#include<24c04.h>                            //24c02(存儲記憶)的頭文件
#include<ds1302.h>                             //時鐘芯片ds1302頭文件
#define uchar unsigned char
#define uint unsigned int
uchar  display[]={"             "};
uchar i=0,j=0;
下兩行是添加的
uint Format_DateTime(uchar *a,uchar *b);
uint x=0,DateTime[],LCD_DSY_BUFFER1[],LCD_DSY_BUFFER2[];


結果是這樣
compiling shijiyi.c...
shijiyi.c(4): warning C318: can't open file 'lcd1602.h'
shijiyi.c(6): warning C318: can't open file 'ds1302.h'
SHIJIYI.C(83): warning C182: pointer to different objects
SHIJIYI.C(83): error C214: illegal pointer conversion
shijiyi.c - 1 Error(s), 3 Warning(s).
回復

使用道具 舉報

ID:207753 發表于 2017-6-4 22:21 | 顯示全部樓層
我不太懂,試著改,把11行改了
uint Format_DateTime(uchar *a,uchar *b);
uint x=0,DateTime[],LCD_DSY_BUFFER1[],LCD_DSY_BUFFER2[];
然后就這樣了
compiling shijiyi.c...
shijiyi.c(4): warning C318: can't open file 'lcd1602.h'
shijiyi.c(6): warning C318: can't open file 'ds1302.h'
SHIJIYI.C(83): warning C182: pointer to different objects
SHIJIYI.C(83): error C214: illegal pointer conversion
shijiyi.c - 1 Error(s), 3 Warning(s).
回復

使用道具 舉報

ID:207753 發表于 2017-6-6 09:47 | 顯示全部樓層
有人能幫幫忙嗎?這幾個error怎么解決?我在網上沒有搜到什么有效的方法。
回復

使用道具 舉報

ID:208300 發表于 2017-6-6 10:37 | 顯示全部樓層
我不太懂,試著改,把11行改了
uint Format_DateTime(uchar *a,uchar *b);
uint x=0,DateTime[],LCD_DSY_BUFFER1[],LCD_DSY_BUFFER2[];
然后就這樣了
compiling shijiyi.c...
shijiyi.c(4): warning C318: can't open file 'lcd1602.h'
shijiyi.c(6): warning C318: can't open file 'ds1302.h'
SHIJIYI.C(83): warning C182: pointer to different objects
SHIJIYI.C(83): error C214: illegal pointer conversion
shijiyi.c - 1 Error(s), 3 Warning(s).
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产欧美一区二区在线观看 | 国产精品成人在线 | 色姑娘av| 看羞羞视频 | 日韩免费一区 | 天天干狠狠 | 欧美中文字幕一区二区三区亚洲 | www.99热 | 五月激情婷婷网 | 男插女下体视频 | 免费能直接在线观看黄的视频 | 欧美成人自拍 | 激情综合五月 | 国产精品欧美一区二区三区不卡 | 欧美二区在线 | 亚洲情综合五月天 | 国产乡下妇女做爰 | 韩国电影久久 | 一区二区三区四区av | 亚洲福利视频一区二区 | 亚洲一级毛片 | 在线日韩欧美 | 伊人伊人 | 综合久久网 | 久久激情视频 | 日韩久久成人 | 久久精彩视频 | 天天久 | 中文字幕 在线观看 | 黄色成人在线观看 | 视频一区在线观看 | 在线看亚洲| 午夜性色a√在线视频观看9 | a毛片 | 欧美亚洲国产一区二区三区 | 久久久国产一区二区三区四区小说 | 亚洲导航深夜福利涩涩屋 | 国产成人一区二区三区 | 亚洲免费在线观看视频 | 欧美精品一二三 | 欧美一区二区三区国产精品 |