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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

LCD1602只顯示一排黑塊,請各位幫我看看什么問題,謝謝

[復制鏈接]
跳轉到指定樓層
樓主
仿真圖可以實現,但是我焊出來后就是不行,線也是接對的,麻煩大佬幫我看看
單片機源程序如下:
  1. #include<reg52.h>
  2. #include"stdio.h"

  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. typedef unsigned char uint8;
  6. typedef unsigned int uint16;

  7. sbit beep = P1^7;  //定義蜂鳴器IO口

  8. sbit LED1 = P1^0;  //定義燈IO口
  9. sbit LED2 = P1^1;
  10. sbit k1 = P1^2;  //定義燈開關IO口
  11. sbit k2 = P1^3;

  12. sbit MOTOR = P1^4;  //定義電機
  13. sbit BUTTON_RUN = P1^5;  //定義電機啟動按鈕
  14. sbit BUTTON_STOP = P1^6;  //定義電機關閉按鈕

  15. sbit RS = P2^7;
  16. sbit RW = P2^6;
  17. sbit EN = P2^5;
  18. sbit K1 = P2^0;
  19. sbit K2 = P2^1;  //加
  20. sbit K3 = P2^2;  //減
  21. sbit DQ = P2^3;  //DS18B20數據端

  22. //void delay(uint xms);
  23. void motor_run();
  24. void motor_stop();

  25. void LED1_SWITCH();
  26. void LED2_SWITCH();

  27. void init();

  28. void delay(uint16 time);
  29. void lcd_init();  //LCD1602初始化
  30. void lcd_order(uint8 date);  //向LCD1602寫一個指令
  31. void lcd_data(uint8 date);  //向LCD1602寫一個指令
  32. void write_1602(uint8 add,uint8 daa);  //寫數據

  33. void display();  //顯示溫度

  34. uint8 DS18B20_init();  //DS18B20初始化
  35. void DS18B20_write(uint8 date);  //向DS18B20中寫入一個數據
  36. uint8 DS18B20_read();  //從DS18B20中讀一個數據并返回
  37. void DS18B20_check();  //啟動DS18B20進行溫度采集,并返回當前溫度

  38. void KEY();  //修改報警范圍

  39. long tmp = 0;  //存儲溫度值
  40. long t_h = 37,t_l = 10;  //溫度上限 溫度下限

  41. bit tmp_hb = 0;  tmp_lb = 0;  //溫度上下限調節指示變量

  42. void judge();  //判斷報警

  43. uint8 hodometer[] = "  H:00   L:00  ";
  44. uint8 temp[]=           "  wendu:00.00   ";
  45. uint16 ji = 0;
  46. uint8 ku = 0;  //標志位

  47. void main()
  48. {
  49.         init();
  50.         lcd_init();  //LCD1602初始化
  51.         DS18B20_init();  //DS18B20初始化
  52.         DS18B20_write(0xcc);  //跳過序列號
  53.         DS18B20_write(0x44);  //啟動溫度轉換
  54.         write_1602(4,t_h);
  55.         write_1602(12,t_l);
  56.         while(1)
  57.         {               
  58.                 LED1_SWITCH();
  59.                 LED2_SWITCH();
  60.                 motor_run();
  61.                 motor_stop();
  62.                 DS18B20_check();  //從DS18B20中讀取溫度
  63.                 display();
  64.                 KEY();
  65.                 judge();
  66.         }
  67. }

  68. void write_1602(uint8 add,uint8 daa)
  69. {
  70.         lcd_order(0x80+add);
  71.         lcd_data(0x30+daa/10);
  72.         lcd_data(0x30+daa%10);
  73. }

  74. void judge()  //判斷是否在報警范圍
  75. {
  76.         if(tmp<(t_l*1000)||tmp>(t_h*1000)&&t_l>=0)
  77.         {
  78.                 beep = 0;
  79.                 delay(10);
  80.         }
  81.         else if(t_l<0&&tmp>(t_h*1000))
  82.                 beep = 1;
  83.         else
  84.                 beep = 1;
  85. }

  86. void KEY()
  87. {
  88.         uint8 jj;
  89.         uint8 i = 0;
  90.         beep = 1;
  91.         if(K1==0)
  92.         {
  93.                 while(!K1);
  94.                 while(1)
  95.                 {
  96.                         lcd_order(0x0f);  //開啟光標顯示
  97.                         lcd_order(0x80+5);  //光標顯示位置
  98.                         if(K2==0)  //判斷加按鍵按下
  99.                         {
  100.                                 while(K2==0);  //等待按鍵釋放
  101.                                         t_h++;  //溫度上限加1
  102.                                         write_1602(4,t_h);  //顯示溫度上限
  103.                         }
  104.                         if(K3==0)  //判斷減按鍵按下
  105.                         {
  106.                                 while(K3==0);  //等待按鍵釋放
  107.                                 if(t_h>t_l)  //判斷溫度上限大于溫度下限
  108.                                         t_h--;
  109.                                 write_1602(4,t_h);  //顯示溫度上限
  110.                         }
  111.                         if(K1==0)
  112.                         {
  113.                                 while(K1==0);
  114.                                 while(1)
  115.                                 {
  116.                                         lcd_order(0x0f);
  117.                                         lcd_order(0x80+13);
  118.                                         if(K2==0)
  119.                                         {
  120.                                                 while(K2==0);
  121.                                                 if(t_l<t_h&&t_l>=0)
  122.                                                 {
  123.                                                         lcd_order(0x80+11);
  124.                                                         lcd_data(' ');
  125.                                                         t_l++;
  126.                                                         write_1602(12,t_l);
  127.                                                 }
  128.                                                 else
  129.                                                 {
  130.                                                         t_l++;
  131.                                                         jj =~ t_l;
  132.                                                         write_1602(12,jj);
  133.                                                 }
  134.                                         }
  135.                                         if(K3==0)
  136.                                         {
  137.                                                 while(K3==0);
  138.                                                 if(t_l>(-50))
  139.                                                 {
  140.                                                         t_l--;
  141.                                                         if(t_l<0)
  142.                                                                 jj =~ t_l;
  143.                                                 }
  144.                                                 if(t_l>=0)
  145.                                                 {
  146.                                                         lcd_order(0x80+11);
  147.                                                         lcd_data(' ');
  148.                                                         write_1602(12,t_l);
  149.                                                 }
  150.                                                 if(t_l<0)
  151.                                                 {
  152.                                                         write_1602(12,jj);
  153.                                                         lcd_order(0x80+11);
  154.                                                         lcd_data('-');
  155.                                                 }
  156.                                         }
  157.                                         if(K1==0)
  158.                                         {
  159.                                                 while(K1==0);
  160.                                                 goto loop;
  161.                                         }
  162.                                 }
  163.                         }
  164.                 }
  165.         }
  166.         loop:beep = 1;
  167. }

  168. //void delay(uint xms)  //延時
  169. //{
  170. //        uint i,j;
  171. //        for(i=xms;i>0;i--)
  172. //                for(j=110;j>0;j--) ;
  173. //}

  174. void delay(uint16 time)
  175. {
  176.         while(time--);
  177. }

  178. void lcd_init()
  179. {
  180.         uint8 i;
  181.         RW = 0;
  182.         lcd_order(0x38);  //設置顯示光標功能
  183.         delay(100);
  184.         lcd_order(0x0e);  //顯示開及光標設置
  185.         delay(100);
  186.         lcd_order(0x06);  //顯示光標移動設置
  187.         delay(100);
  188.         lcd_order(0x01);  //顯示清屏
  189.         delay(100);
  190.         lcd_order(0x80);
  191.         for(i=0;i<16;i++)
  192.                 lcd_data(hodometer[i]);
  193. }

  194. void lcd_order(uint8 date)  //LCD1602寫指令
  195. {
  196.         RS = 0;  //選擇寫指令
  197.         EN = 0;  //使能初始化
  198.         P0 = date;  //發送指令
  199.         EN = 1;  //開使能
  200.         delay(100);  //延時
  201.         EN = 0;  //關使能
  202. }

  203. void lcd_data(uint8 date)  //LCD1602寫指令
  204. {
  205.         RS = 1;  //選擇寫數據
  206.         EN = 0;  //使能初始化
  207.         P0 = date;  //發送指令
  208.         EN = 1;  //開使能
  209.         delay(100);  //延時
  210.         EN = 0;  //關使能
  211. }

  212. uint8 DS18B20_init()
  213. {
  214.         uint8 ans;
  215.         DQ = 1;
  216.         delay(1);
  217.         DQ = 0;
  218.         delay(100);
  219.         DQ = 1;
  220.         delay(6);
  221.         ans = DQ;
  222.         delay(100);
  223.         if(!ans)
  224.                 return 1;
  225.         else
  226.                 return 0;
  227. }

  228. void DS18B20_write(uint8 date)
  229. {
  230.         uint8 i;
  231.         DQ = 1;
  232.         delay(1);
  233.         for(i=0;i<8;i++)  //根據時序將數據從低到高一位一位發送出來
  234.         {
  235.                 DQ = 0;
  236.                 if(date&0x01)  //從低到高取出數據的每位
  237.                         DQ = 1;
  238.                 else
  239.                         DQ = 0;
  240.                 delay(10);
  241.                 DQ = 1;
  242.                 date >>= 1;
  243.                 delay(1);
  244.         }
  245. }

  246. uint8 DS18B20_read()
  247. {
  248.         uint8 i,date = 0;
  249.         DQ = 1;  //釋放總線
  250.         delay(1);
  251.         for(i=0;i<8;i++)  //根據時序將數據從低到高一位一位接收
  252.         {
  253.                 DQ = 0;
  254.                 date >>= 1;
  255.                 DQ = 1;
  256.                 if(DQ)
  257.                         date |= 0x80;  //將data的一位置1
  258.                 delay(8);
  259.                 DQ = 1;
  260.                 delay(1);
  261.         }
  262.         return date;  //返回讀出的數
  263. }

  264. void DS18B20_check()
  265. {
  266.         uint8 date1,date2;
  267.         float ta;
  268.         if(DS18B20_init())
  269.         {
  270.                 DS18B20_write(0xcc);  //跳過序列號
  271.                 DS18B20_write(0x44);  //啟動溫度轉換
  272.                 DS18B20_init();  //復位
  273.                 DS18B20_write(0xcc);  //跳過序列號
  274.                 DS18B20_write(0xbe);  //啟動讀取溫度
  275.                 date1 = DS18B20_read();  //讀取兩個溫度字節
  276.                 date2 = DS18B20_read();
  277.                 tmp = date2;
  278.                 tmp <<= 8;
  279.                 tmp = tmp|date1;
  280.                 ta = tmp*0.0625;
  281.                 tmp = ta*1000;
  282.         }
  283. }

  284. void display()
  285. {
  286.         uint8 i;
  287.         temp[8] = 0x30+tmp/10000;
  288.         temp[9] = 0x30+tmp/1000%10;
  289.         temp[11] = 0x30+tmp/100%10;
  290.         temp[12] = 0x30+tmp/10%10;
  291.         temp[13] = 0x30+tmp%10;
  292.         lcd_order(0x80+0x40);
  293.         for(i=0;i<16;i++)
  294.                 lcd_data(temp[i]) ;
  295. }

  296. void init()  //初始化函數
  297. {
  298.         BUTTON_RUN = 1;  
  299.         BUTTON_STOP = 1;
  300.         MOTOR = 0;
  301.         beep = 0;
  302.         delay(50);
  303. }

  304. void motor_run()  //打開電機
  305. {
  306.         if(BUTTON_RUN==0)
  307.         {
  308.                 delay(10);
  309.                 if(BUTTON_RUN==0)
  310.                         MOTOR = 1;
  311.         }
  312. }

  313. void motor_stop()  //關閉電機
  314. {
  315.         if(BUTTON_STOP==0)
  316.         {
  317.                 delay(10);
  318.                 if(BUTTON_STOP==0)
  319.                         MOTOR = 0;
  320.         }
  321. }
  322. void LED1_SWITCH()  //LED1開關
  323. {
  324.         if(k1==0)
  325.                 LED1 = 0;
  326.         if(k1==1)
  327.                 LED1 = 1;
  328. }

  329. void LED2_SWITCH()  //LED2開關
  330. {
  331.         if(k2==0)
  332.                 LED2 = 0;
  333.         if(k2==1)
  334.                 LED2 = 1;
  335. }
復制代碼

51hei圖片20210624132413.png (203.91 KB, 下載次數: 61)

51hei圖片20210624132413.png

51hei圖片20210607190624.png (145.66 KB, 下載次數: 33)

51hei圖片20210607190624.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:824490 發表于 2021-6-24 14:48 | 只看該作者
P0口不上拉?
回復

使用道具 舉報

板凳
ID:739545 發表于 2021-6-24 15:28 | 只看該作者
仿真和實際有很大差異,最好按照datasheet或者guideline進行電路進行實物焊接畫圖
回復

使用道具 舉報

地板
ID:918467 發表于 2021-6-24 15:51 | 只看該作者
lovezjf234 發表于 2021-6-24 15:28
仿真和實際有很大差異,最好按照datasheet或者guideline進行電路進行實物焊接畫圖

我看見別人的程序可以,然后我發現自己是寫指令和寫數據那里寫錯了找了好久問題
回復

使用道具 舉報

5#
ID:918467 發表于 2021-6-24 16:31 | 只看該作者

我加了電阻了,沒截圖到。后來發現是代碼問題,寫指令和寫數據那里錯了
回復

使用道具 舉報

6#
ID:328014 發表于 2021-6-25 01:34 | 只看該作者
來看一下51hei論壇里面解決此問題的痛苦經歷吧:
51hei搜索框輸入"1602 方塊"或者"1602 黑塊"或者"1602 白塊"或者"1602 格":

這個是io口設置問題,最終搞定了:http://www.zg4o1577.cn/bbs/dpj-199732-1.html
http://www.zg4o1577.cn/bbs/dpj-168643-1.html
http://www.zg4o1577.cn/bbs/dpj-208189-1.html

既有可能是軟件問題也有硬件問題
http://www.zg4o1577.cn/bbs/dpj-187378-1.html
http://www.zg4o1577.cn/bbs/dpj-160754-1.html
回復

使用道具 舉報

7#
ID:918467 發表于 2021-6-25 21:26 | 只看該作者
51hei團團 發表于 2021-6-25 01:34
來看一下51hei論壇里面解決此問題的痛苦經歷吧:
51hei搜索框輸入"1602 方塊"或者"1602 黑塊"或者"1602 白 ...

謝謝大佬
回復

使用道具 舉報

8#
ID:517951 發表于 2021-6-26 10:14 | 只看該作者
出現一排黑塊的原因大多是上電未正確初始化,要查下E,WR,D0-D7單片機腳位與1602連通,連錯了沒有, 初始化代碼比較簡單,也需要核對一下是4bit還是8bit的設定
回復

使用道具 舉報

9#
ID:852641 發表于 2021-6-26 14:03 | 只看該作者
可以先調下背光到能顯示出東西,用例程確定LCD焊接使用正常,再排除代碼的原因。之前做過也是LCD不顯示不亮,最后是時序的問題,延時過多會有這種問題
回復

使用道具 舉報

10#
ID:390416 發表于 2021-7-6 20:34 | 只看該作者
LCD1602顯示℃ 這種自定義符號 http://www.zg4o1577.cn/bbs/dpj-200685-1.html
LCD1602液晶最新資料 說明了具體的時間要求 http://www.zg4o1577.cn/bbs/dpj-205768-1.html
回復

使用道具 舉報

11#
ID:964308 發表于 2021-10-17 20:57 來自手機 | 只看該作者
V0口的偏壓調了嗎,我用的是對地2kΩ
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人亚洲精品久久久久软件 | 久久久一二三区 | 91久久精品国产91久久 | 中文字幕精品一区二区三区精品 | 日日操夜夜操天天操 | 在线视频一区二区 | 激情五月激情综合网 | 97精品国产手机 | 日韩中文一区二区三区 | 国产精品久久久亚洲 | 久久国产欧美一区二区三区精品 | 中文字幕啪啪 | 欧美日韩在线播放 | 91在线资源 | 伊人网综合| 成年无码av片在线 | 色婷婷综合久久久中文字幕 | 中文字幕视频在线看 | 色爽女| 欧美激情国产精品 | 午夜资源| 亚洲国产精品视频 | 日本字幕在线观看 | 性生生活大片免费看视频 | www国产成人 | 国产男人的天堂 | 亚洲精品免费视频 | ww 255hh 在线观看 | 国产美女视频黄a视频免费 国产精品福利视频 | 久久麻豆精品 | 日日欧美 | 午夜小视频在线播放 | 亚洲精品一区二三区不卡 | 中文字幕精品一区 | 人人人人干 | 国产91在线观看 | 亚洲国产精品精华素 | 亚洲国产精品久久久久婷婷老年 | 成人亚洲精品 | 色精品视频 | 怡红院怡春院一级毛片 |