欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1877|回復: 4
收起左側(cè)

單片機編譯顯示找不到lcd1602,dht11和key-contrl頭文件?

[復制鏈接]
ID:502084 發(fā)表于 2019-3-31 23:34 | 顯示全部樓層 |閱讀模式
  1. #include <reg51.h>
  2. #include "key_contrl.h"
  3. #include "lcd1602.h"
  4. #define LCM_Data P1
  5. #define Busy 0x80 //用于檢測 LCM 狀態(tài)字中的 Busy 標識
  6. extern int temp_value, humi_value;
  7. extern int flag;
  8. extern int temp;
  9. sbit red=P2^6;
  10. sbit blue=P2^7;
  11. sbit LCM_RW= P2^4; // 定義引腳
  12. sbit LCM_RS= P2^5;
  13. sbit LCM_E= P2^3;
  14. sbit beep = P0^6; //beep = 0時候發(fā)聲
  15. extern int temph,templ,disp_mode,huih,huil;
  16. extern char tel,teh,hh,hl;
  17. //寫數(shù)據(jù)
  18. void alarm()
  19. {
  20. beep=0;
  21. Delay5Ms();
  22. Delay5Ms();
  23. beep=1;
  24. Delay5Ms();
  25. Delay5Ms();
  26. }
  27. void WriteDataLCM(unsigned char WDLCM)
  28. {
  29. ReadStatusLCM(); //檢測忙
  30. LCM_Data = WDLCM;
  31. LCM_RS = 1;
  32. LCM_RW = 0;
  33. LCM_E = 0; // 若晶振速度太高可以在這后加小的延時
  34. LCM_E = 0; // 延時
  35. LCM_E = 1;
  36. }
  37. //寫指令
  38. void WriteCommandLCM(unsigned char WCLCM,BuysC) //BuysC 為 0 時忽略忙檢

  39. {
  40. if (BuysC) ReadStatusLCM(); //根據(jù)需要檢測忙
  41. LCM_Data = WCLCM;
  42. LCM_RS = 0;
  43. LCM_RW = 0;
  44. LCM_E = 0;
  45. LCM_E = 0;
  46. LCM_E = 1;
  47. }
  48. //讀數(shù)據(jù)
  49. unsigned char ReadDataLCM(void)
  50. {
  51. LCM_RS = 1;
  52. LCM_RW = 1;
  53. LCM_E = 0;
  54. LCM_E = 0;
  55. LCM_E = 1;
  56. return(LCM_Data);
  57. }
  58. //讀狀態(tài)
  59. unsigned char ReadStatusLCM(void)
  60. {
  61. LCM_Data = 0xFF;
  62. LCM_RS = 0;
  63. LCM_RW = 1;
  64. LCM_E = 0;
  65. LCM_E = 0;
  66. LCM_E = 1;
  67. while (LCM_Data & Busy); // 檢測忙信號
  68. return(LCM_Data);
  69. }
  70. void LCMInit(void) //LCM 初始化
  71. {
  72. LCM_Data = 0;
  73. WriteCommandLCM(0x38,0); // 三次顯示模式設(shè)置,不檢測忙信號
  74. Delay5Ms();
  75. WriteCommandLCM(0x38,0);
  76. Delay5Ms();
  77. WriteCommandLCM(0x38,0);
  78. Delay5Ms();
  79. WriteCommandLCM(0x38,1); // 顯示模式設(shè)置 ,開始要求每次檢測忙信號
  80. WriteCommandLCM(0x08,1); // 關(guān)閉顯示
  81. WriteCommandLCM(0x01,1); // 顯示清屏
  82. WriteCommandLCM(0x06,1); // 顯示光標移動設(shè)置
  83. WriteCommandLCM(0x0C,1); // 顯示開及光標設(shè)置
  84. }
  85. //按指定位置顯示一個字符
  86. void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)
  87. {
  88. Y &= 0x1;
  89. X &= 0xF; // 限制 X 不能大于 15,Y 不能大于 1
  90. if (Y) X |= 0x40; // 當要顯示第二行時地址碼 0x40;
  91. X |= 0x80; // 算出指令碼
  92. WriteCommandLCM(X, 0); // 這里不檢測忙信號,發(fā)送地址碼
  93. WriteDataLCM(DData);
  94. }
  95. //按指定位置顯示一串字符
  96. void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)
  97. {
  98. unsigned char ListLength;
  99. ListLength = 0;
  100. Y &= 0x1;
  101. X &= 0xF; // 限制 X 不能大于 15,Y 不能大于 1
  102. while (DData[ListLength]>0x20) // 若到達字串尾則退出
  103. {
  104. if (X <= 0xF) //X 坐標應小于 0xF
  105. {
  106. DisplayOneChar(X, Y, DData[ListLength]); // 顯示單個字符
  107. ListLength++;
  108. X++;
  109. }
  110. }
  111. }
  112. //5ms 延時
  113. void Delay5Ms(void)
  114. {
  115. unsigned int TempCyc = 5552;
  116. while(TempCyc--);
  117. }
  118. /*void Delay_xMs(unsigned int x)
  119. {
  120. unsigned int i,j;
  121. for( i =0;i < x;i++ )
  122. {
  123. for( j =0;j<500;j++ );
  124. }
  125. }
  126. */
  127. void display_temp(void)
  128. {
  129. DisplayOneChar(0,0,' ');
  130. DisplayOneChar(1,0,' ');
  131. DisplayOneChar(2,0,'T');
  132. DisplayOneChar(3,0,'e');
  133. DisplayOneChar(4,0,'m');
  134. DisplayOneChar(5,0,'p');
  135. DisplayOneChar(6,0,':');
  136. DisplayOneChar(10,0,'C');
  137. DisplayOneChar(9,0,0xdf);
  138. DisplayOneChar(7,0,temp_value/100+0x30);
  139. DisplayOneChar(8,0,(temp_value/10)-(temp_value/100)*10+0x30);
  140. DisplayOneChar(11,0,' ');
  141. DisplayOneChar(12,0,' ');
  142. DisplayOneChar(13,0,' ');
  143. DisplayOneChar(14,0,' ');
  144. DisplayOneChar(15,0,' ');
  145. DisplayOneChar(0,1,' ');
  146. DisplayOneChar(1,1,' ');
  147. DisplayOneChar(2,1,'H');
  148. DisplayOneChar(3,1,'u');
  149. DisplayOneChar(4,1,'m');
  150. DisplayOneChar(5,1,'i');
  151. DisplayOneChar(6,1,'d');
  152. DisplayOneChar(7,1,'i');
  153. DisplayOneChar(8,1,'t');
  154. DisplayOneChar(9,1,'y');
  155. DisplayOneChar(10,1,':');
  156. DisplayOneChar(11,1,humi_value/100+0x30);
  157. DisplayOneChar(12,1,(humi_value/10)-(humi_value/100)*10+0x30);
  158. DisplayOneChar(13,1,'%');
  159. DisplayOneChar(14,1,' ');
  160. DisplayOneChar(15,1,' ');
  161. }
  162. void display_temp1(void)
  163. {
  164. DisplayOneChar(0,0,' ');
  165. DisplayOneChar(1,0,'T');
  166. DisplayOneChar(2,0,'h');
  167. DisplayOneChar(3,0,':');
  168. if(flag&teh)
  169. {
  170. DisplayOneChar(4,0,0x20);
  171. DisplayOneChar(5,0,0x20);
  172. }
  173. else
  174. {
  175. DisplayOneChar(4,0,temph/10+0x30);
  176. DisplayOneChar(5,0,temph%10+0x30);
  177. }
  178. DisplayOneChar(6,0,0xdf);
  179. DisplayOneChar(7,0,'C');
  180. DisplayOneChar(8,0,' ');
  181. DisplayOneChar(9,0,'T');
  182. DisplayOneChar(10,0,'h');
  183. DisplayOneChar(11,0,':');
  184. if(flag&tel)
  185. {
  186. DisplayOneChar(12,0,0x20);
  187. DisplayOneChar(13,0,0x20);
  188. }
  189. else
  190. {
  191. DisplayOneChar(12,0,templ/10+0x30);
  192. DisplayOneChar(13,0,templ%10+0x30);
  193. }
  194. DisplayOneChar(14,0,0xdf);
  195. DisplayOneChar(15,0,'C');
  196. DisplayOneChar(0,1,' ');
  197. DisplayOneChar(1,1,'H');
  198. DisplayOneChar(2,1,'h');
  199. DisplayOneChar(3,1,':');
  200. if(flag&hh)
  201. {
  202. DisplayOneChar(4,1,0x20);
  203. DisplayOneChar(5,1,0x20);
  204. }
  205. else
  206. {
  207. DisplayOneChar(4,1,huih/10+0x30);
  208. DisplayOneChar(5,1,huih%10+0x30);
  209. }
  210. DisplayOneChar(6,1,'%');
  211. DisplayOneChar(7,1,' ');
  212. DisplayOneChar(8,1,' ');
  213. DisplayOneChar(9,1,'H');
  214. DisplayOneChar(10,1,'l');
  215. DisplayOneChar(11,1,':');
  216. if(flag&hl)
  217. {
  218. DisplayOneChar(12,1,0x20);
  219. DisplayOneChar(13,1,0x20);
  220. }
  221. else
  222. {
  223. DisplayOneChar(12,1,huil/10+0x30);
  224. DisplayOneChar(13,1,huil%10+0x30);
  225. }
  226. DisplayOneChar(14,1,'%');
  227. DisplayOneChar(15,1,' ');
  228. }
  229. void displayfun1()
  230. {
  231. display_temp();
  232. }
  233. void displayfun2()
  234. {
  235. display_temp1();
  236. }
  237. void display()
  238. {
  239. if((((temp_value/10)%100)<templ)||(((humi_value/10)%100)<huil))
  240. {beep=0;red=0;} //溫度低于下限值,報警
  241. else if(((temp_value/10)%100)>=temph || ((humi_value/10)%100)>=huih)
  242. {beep=0;blue=0;} //溫度高于或等于上限值,報警
  243. else {beep=1;red=1;blue=1;}
  244. // if(((humi_value/10)%100)<huil){beep=0;led=0;} //溫度低
  245. 于下限值,報警
  246. // else if(((humi_value/10)%100)>=huih)beep=0; //溫度高于或等于上限
  247. 值,報警
  248. // else {beep=1;led=1;}
  249. if(!disp_mode)
  250. displayfun1(); //顯示正常
  251. else
  252. displayfun2(); //設(shè)置界面
  253. }
  254. #include "dht11.h"
  255. #include <reg52.h>
  256. //請根據(jù)自己的 dht11 接的 IO 口來改動位定義
  257. sbit dht11 = P3^0;
  258. //防止在與硬件通信時發(fā)生死循環(huán)的計數(shù)范圍
  259. #define NUMBER 20
  260. #define SIZE 5
  261. static unsigned char status;
  262. //存放五字節(jié)數(shù)據(jù)的數(shù)組
  263. static unsigned char value_array[SIZE];
  264. /*可在其他的文件引用溫濕度值 ,實際是溫度的整數(shù)的 10 倍
  265. 如 dht11 讀回的溫度是 26,則 temp_value = 260, 濕度同理 */
  266. int temp_value, humi_value;
  267. static unsigned char ReadValue(void);
  268. void Delay_1ms(unsigned int ms)
  269. {
  270. unsigned int x, y;
  271. for(x = ms; x > 0; x--)
  272. {
  273. for(y = 124; y > 0; y--);
  274. }
  275. }
  276. static void DHT11_Delay_10us(void)
  277. {
  278. unsigned char i;
  279. i--;
  280. i--;
  281. i--;
  282. i--;
  283. i--;
  284. i--;
  285. }
  286. /*讀一個字節(jié)的數(shù)據(jù) */
  287. static unsigned char DHT11_ReadValue(void)
  288. {
  289. unsigned char count, value = 0, i;
  290. status = OK; //設(shè)定標志為正常狀態(tài)
  291. for(i = 8; i > 0; i--)
  292. {
  293. //高位在先
  294. value <<= 1;
  295. count = 0;
  296. //每一位數(shù)據(jù)前會有一個 50us 的低電平時間 .等待 50us 低電平結(jié)束
  297. while(dht11 == 0 && count++ < NUMBER);
  298. if(count >= NUMBER)
  299. {
  300. status = ERROR; //設(shè)定錯誤標志
  301. return 0; //函數(shù)執(zhí)行過程發(fā)生錯誤就退出函數(shù)
  302. }
  303. //26-28us 的高電平表示該位是 0,為 70us 高電平表該位 1
  304. DHT11_Delay_10us();
  305. DHT11_Delay_10us();
  306. DHT11_Delay_10us();
  307. //延時 30us 后檢測數(shù)據(jù)線是否還是高電平
  308. if(dht11 != 0)
  309. {
  310. //進入這里表示該位是 1
  311. value++;
  312. //等待剩余 (約 40us)的高電平結(jié)束
  313. while(dht11 != 0 && count++ < NUMBER)
  314. {
  315. dht11 = 1;
  316. }
  317. if(count >= NUMBER)
  318. {
  319. status = ERROR; //設(shè)定錯誤標志
  320. return 0;
  321. }
  322. }
  323. }
  324. return (value);
  325. }
  326. //讀溫度和濕度函數(shù), 讀一次的數(shù)據(jù) ,共五字節(jié),讀出成功函數(shù)返回 OK, 錯誤返回
  327. ERROR
  328. unsigned char DHT11_ReadTempAndHumi(void)
  329. {
  330. unsigned char i = 0, check_value = 0,count = 0;
  331. EA = 0;
  332. dht11 = 0; //拉低數(shù)據(jù)線大于 18ms 發(fā)送開始信號
  333. Delay_1ms(20); //需大于 18 毫秒
  334. dht11 = 1; //釋放數(shù)據(jù)線 ,用于檢測低電平的應答信號
  335. //延時 20-40us,等待一段時間后檢測應答信號 ,應答信號是從機拉低數(shù)據(jù)線
  336. 80us
  337. DHT11_Delay_10us();
  338. DHT11_Delay_10us();
  339. DHT11_Delay_10us();
  340. DHT11_Delay_10us();
  341. if(dht11 != 0) // 檢測應答信號 ,應答信號是低電平
  342. {
  343. //沒應答信號
  344. EA = 1;
  345. return ERROR;
  346. }
  347. else
  348. {
  349. //有應答信號
  350. while(dht11 == 0 && count++ < NUMBER); // 等待應答信號結(jié)束
  351. if(count >= NUMBER) // 檢測計數(shù)器是否超過了設(shè)定的范圍
  352. {
  353. dht11 = 1;
  354. EA = 1;
  355. return ERROR; //讀數(shù)據(jù)出錯 ,退出函數(shù)
  356. }
  357. count = 0;
  358. dht11 = 1;//釋放數(shù)據(jù)線
  359. //應答信號后會有一個 80us 的高電平,等待高電平結(jié)束
  360. while(dht11 != 0 && count++ < NUMBER);
  361. if(count >= NUMBER)
  362. {
  363. dht11 = 1;
  364. EA = 1;
  365. return ERROR; //退出函數(shù)
  366. }
  367. //讀出濕 .溫度值
  368. for(i = 0; i < SIZE; i++)
  369. {
  370. value_array[i] = DHT11_ReadValue();
  371. if(status == ERROR)//調(diào)用 ReadValue()讀數(shù)據(jù)出錯會設(shè)定 status 為
  372. ERROR
  373. {
  374. dht11 = 1;
  375. EA = 1;
  376. return ERROR;
  377. }
  378. //讀出的最后一個值是校驗值不需加上去
  379. if(i != SIZE - 1)
  380. {
  381. //讀出的五字節(jié)數(shù)據(jù)中的前四字節(jié)數(shù)據(jù)和等于第五字節(jié)數(shù)據(jù)表示
  382. 成功
  383. check_value += value_array[i];
  384. }
  385. }//end for
  386. //在沒用發(fā)生函數(shù)調(diào)用失敗時進行校驗
  387. if(check_value == value_array[SIZE - 1])
  388. {
  389. //將溫濕度擴大 10 倍方便分離出每一位
  390. humi_value = value_array[0] * 10;
  391. temp_value = value_array[2] * 10;
  392. dht11 = 1;
  393. EA = 1;
  394. return OK; //正確的讀出 dht11 輸出的數(shù)據(jù)
  395. }
  396. else
  397. {
  398. //校驗數(shù)據(jù)出錯
  399. EA = 1;
  400. return ERROR;
  401. }
  402. }
  403. }
  404. #include "lcd1602.h"
  405. #include "key_contrl.h"
  406. #include"dht11.h"
  407. #include <reg52.h>
  408. int temp;
  409. int temph = 40; //初始上限值
  410. int templ = 10; //初始下限值
  411. int huih = 90;
  412. int huil =10;
  413. int timecount,flag=0,number=0,count=0;
  414. void t0(void) interrupt 1 using 0
  415. { TH0=(65535-50000)/256; //50ms定時
  416. TL0=(65535-50000)%256;
  417. timecount++;//re_disp++;
  418. if(timecount>9){timecount=0;flag=~flag;} //50ms 到了則反顯
  419. //if(re_disp>200){re_disp=0;if(id)id=0;} //10 秒到了則由調(diào)整模式自動進入正
  420. 常顯示模式
  421. }
  422. void t1(void) interrupt 3 using 0
  423. {
  424. TH1=(65535-50000)/256;//50ms定時
  425. TL1=(65535-50000)%256;
  426. number++;
  427. if(number>2)
  428. {
  429. number=0;
  430. count++;
  431. //beep=0;
  432. }
  433. }
  434. void main(void)
  435. {
  436. TMOD=0x11; //初始化定時器 t0 方式 1
  437. TH0=(65535-50000)/256;
  438. TL0=(65535-50000)%256;
  439. TH1=(65535-50000)/256;
  440. TL1=(65535-50000)%256;
  441. EA=1;
  442. ET0=1;
  443. ET1=1;
  444. TR0=1;
  445. TR1=1;
  446. LCMInit(); //LCM 初始化
  447. Delay5Ms(); //延時片刻
  448. while(1)
  449. {
  450. if(count==2)
  451. {
  452. DHT11_ReadTempAndHumi();
  453. count=0;
  454. }
  455. delay_LCM(300);
  456. Scan_Key();
  457. }
復制代碼
回復

使用道具 舉報

ID:94031 發(fā)表于 2019-4-1 08:08 | 顯示全部樓層
在你這個c文件所在的工程文件里找,并加到頭文件搜索路徑里。
回復

使用道具 舉報

ID:164602 發(fā)表于 2019-4-1 08:09 | 顯示全部樓層
你把幾個程序直接拷貝到一起是不行的!!!
原來的C程序,都應該加入到工程中,原來有的頭文件,也應該在你設(shè)定的目錄內(nèi)。
程序可不是文檔,直接復制粘貼是沒有用的。
回復

使用道具 舉報

ID:337069 發(fā)表于 2019-4-1 08:49 | 顯示全部樓層
看看文件夾里面有沒有那兩個頭文件,如果沒有,看看在哪,在工程設(shè)置里面把文件路徑加進去,也可以用#include “頭文件絕對路徑”
回復

使用道具 舉報

ID:491621 發(fā)表于 2019-4-1 09:23 | 顯示全部樓層
如果.h已經(jīng)在工程的目錄里,檢查一下options里面的c/c++有沒有include paths對應的路徑
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表