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

標題: LCD1602+51單片機最小系統應用仿真及制作 [打印本頁]

作者: no1xijin    時間: 2017-3-7 19:17
標題: LCD1602+51單片機最小系統應用仿真及制作
本文將介紹LCD1602和51單片機最小系統結合在一起的簡單實例,關于如何制作51單片機最小系統可以參見筆者之前寫的一篇——51單片機最小系統的制作

先放兩張實物圖片:

            
            圖片一(開機后)                                              圖片二(按下按鈕后)

好了,接下來正式進入制作環節:

第一步:仿真


繪制好原理圖,仿真時單片機最小系統只放一個單片機就可以了,但實際電路中需要加上電源模塊、復位模塊。


                      原理圖

原理圖文件請在附件中找。

原理圖繪制好后,編寫代碼并生成hex文件。代碼內容為:

  1. /*************************功能************************/
  2. /*使用外部中斷INTO改變LED狀態,并且用1602顯示出其狀態*/
  3. #include<reg51.h>
  4. #include <intrins.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. uchar code table[]="   HELLO  1602  ";
  8. uchar code table0[]="1602   TEST      ";
  9. uchar code table1[]="RESULT:    "; //空格是寫到LCD了,即空格也是內容
  10. uchar code table2[]="OK!";
  11. uchar code table3[]="liang";
  12. uchar code table4[]="mie";
  13. uchar num;
  14. sbit led=P1^7;
  15. sbit lcden=P2^0; //液晶使能端
  16. sbit lcdrs=P2^2; //液晶數據命令選擇端選擇寫數據還是寫命令
  17. void delay(uint z)        // 延時函數
  18. {
  19.    uint i,j;
  20.    for(i=z;i>0;i--)
  21.    for(j=110;j>0;j--);
  22. }
  23. void write_com(uchar com) //寫入
  24. {
  25.   lcdrs=0; //LCD 選擇輸入命令
  26.   P0=com; //向P0 口輸入命令          39-32端口
  27.   delay(5); //延時
  28.   lcden=1; //打開LCD 使能
  29.   delay(5); //一個高脈沖
  30.   lcden=0; //關閉LCD 使能
  31. }         
  32. void write_data(uchar date)
  33. {
  34.   lcdrs=1; //設置為輸入數據
  35.   P0=date; //將數據賦給P0 口
  36.   delay(5); //延時
  37.   lcden=1; //置高
  38.   delay(5); //高脈沖
  39.   lcden=0; //置低完成高脈沖
  40. }
  41. void init()                //LED 初始化
  42. {
  43.   lcden=0;
  44.   write_com(0x38);//設置16x2 顯示5x7 點陣,8 位數據接口         
  45.   write_com(0x0c); //設置開始顯示不顯示光標           (指令4)
  46.   write_com(0x06); //寫一個字符后地址指針加1 (指令3)
  47.   write_com(0x01); //顯示清零數據指針清零  (指令1)
  48. }
  49.         
  50. void display(unsigned char *p)//按指針  地址寫入數據
  51. {
  52.    while(*p!='\0')
  53.      {
  54.        write_data(*p);                 //寫數據
  55.        p++;
  56.        delay(1);
  57.      }
  58. }
  59.                                                          
  60. void main()
  61. {         
  62.    TCON=0x01;          //設置中斷為INTO
  63.          IE=0x81;
  64.    led=0;
  65.          init();     
  66.     write_com(0x80); //將數據指針第一行第一個字處,
  67.           display(table);        //調用函數的方式寫入數據
  68.           delay(800);
  69.           write_com(0x80); //將數據指針第一行第一個字處,
  70.           display(table0);        //調用函數的方式寫入數據
  71.     write_com(0x80+0x40); //定義指針位置          將數據指針第二行第一個字處
  72.     for(num=0;num<7;num++)
  73.        {
  74.           write_data(table1[num]);
  75.           delay(5);
  76.        }
  77.           write_com(0x80+0x4c);         //按1602的地址單個寫入數據
  78.           write_data(table2[0]);
  79.                 write_com(0x80+0x4d);          //按1602的地址單個寫入數據
  80.           write_data(table2[1]);
  81.                 write_com(0x80+0x4e);                 //按1602的地址單個寫入數據
  82.           write_data(table2[2]);               
  83.           while(1);                        
  84. }        
  85. void key_can() interrupt 0
  86. {
  87.    delay(20);        // 消除按鍵抖動
  88.    if(P3^3==0)
  89.      {
  90.            if(P3^3==0)
  91.            {
  92.              led=!led;
  93.                  
  94.            }
  95.            if(led==1)
  96.              {
  97.                write_com(0x80+0x4b);
  98.                      display(table3);
  99.                    }               
  100.           else if(led==0)
  101.             {
  102.               write_com(0x80+0x4b);            //按1602的地址單個寫入數據
  103.                     display(table4);
  104.               write_com(0x80+0x4f);
  105.                     write_data(table1[8]);                 //按1602的地址單個寫入數據
  106.                           write_com(0x80+0x4e);
  107.                     write_data(table1[8]);        
  108.                   }
  109.      }
  110.   }
復制代碼

原理圖和代碼都有了,仿真的準備工作就完了,現在正式進入仿真。

將代碼加載進單片機中,若不會加載者可以參見筆者之前寫的一篇——51單片機最小系統的制作

點擊仿真,查看結果。以下是一些結果圖片:

            
          點擊仿真時首先顯示界面                                             點擊仿真時第二顯示界面并將一直停在此處

(由于開始時,主要有變化的就是LCD1602,故此處截圖只截了一部分。)

           
        按下按鈕后-燈亮,LCD1602顯示有變化                      再次按下按鈕后-燈亮,LCD1602顯示有變化

第二步:準備元器件




第三步:繪制焊接圖

此處默認手頭已經有單片機最小系統了,沒有的話可以參見筆者之前寫的一篇——51單片機最小系統的制作

為了便于重復使用LCD1602,采用了排插;為了便于后續繼續拓展LCD1602的實例,將此處的做成一個模塊。

元器件布局圖如下:




走線圖(部分走線未畫,具體請看圖片中的文字)如下:






第四步:焊接
繪制好焊接圖后,照著圖一部分一部分焊接,就可以了。下圖是我采用錫接走線法焊接好后的反面圖:



切記不要焊短路了!!切記不要焊短路了!!切記不要焊短路了!!

第五步:實物測試

先將hex程序下載到單片機中,然后照著DSN原理圖的連線用杜邦線將51單片機最小系統與LCD1062模塊連接,接通電源,適當調節滑動變阻器來調整LCD1062的對比度,從而使字符顯示清晰。LCD1062D的15腳接電源正極,16腳接電源負極,15和16位背光電源。

結語:遇到問題多查資料,多動手,做完之后寫篇文章來溫故一下,捋一下思路的同時也回饋大眾~

部分參考資料來源:1.http://www.raoushi.com/bbs/dpj-31284-1.html
2.http://www.raoushi.com/bbs/dpj-57960-1.html
3.http://wenku.baidu.com/link?url= ... kXtUSQU-TBxEU46BWte


下載:
LCD1602 51單片機最小系統應用仿真及制作.zip (709.56 KB, 下載次數: 58)


作者: 伊潔奧康    時間: 2018-2-25 14:31
我想問一下那個仿真文件可以用miltisim13.0打開嗎
作者: 伊潔奧康    時間: 2018-2-25 14:33
哇塞,這個文件特別給力
作者: Tony0ne    時間: 2018-5-7 18:01
好帖子,學習到了
作者: no1xijin    時間: 2018-7-2 12:54
伊潔奧康 發表于 2018-2-25 14:31
我想問一下那個仿真文件可以用miltisim13.0打開嗎

我是用Proteus仿真的,你可以試試
作者: tcsyz0071    時間: 2020-3-8 16:41
你好,請問一下,我的89C52單片機引腳不夠用了,想再加個LCD模塊,自制這么一個洞洞板,連接單片機的哪里呢
作者: hbcqd    時間: 2020-3-8 22:54
正好在學習1602,可以借鑒做個小系統。謝謝分享!
作者: no1xijin    時間: 2020-3-9 09:16
tcsyz0071 發表于 2020-3-8 16:41
你好,請問一下,我的89C52單片機引腳不夠用了,想再加個LCD模塊,自制這么一個洞洞板,連接單片機的哪里呢

這個我不清楚,你可以自行百度一下。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1