找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3285|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機LCD1602自建溫度標(biāo)記圖形程序?qū)嶒?Proteus仿真加源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:175881 發(fā)表于 2017-3-30 01:23 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
單片機的仿真原理圖(proteus工程文件可到本帖附件下載):



單片機源程序:
  1. //-----------------------------------------------------------------------------------
  2. //程序名:  LCD08-4.c
  3. //程序功能:LCD自建溫度標(biāo)記圖形程序
  4. //-------------------------------------------------------------------------------------
  5. #include <reg51.h>   
  6. sbit RS=P2^5;                                   // 引腳定義  
  7. sbit RW=P2^6;                                                           
  8. sbit EN=P2^7;      
  9. sbit busy=P0^7;                                 // "忙"標(biāo)志位      
  10. #define LCD P0                                  //命令或數(shù)據(jù)線
  11. TEMP_BJ();
  12. STORE_DATA();
  13. //字符串表
  14. unsigned char code str[]={" C "};      
  15. //代碼表
  16. unsigned char code TAB[]={ 0x0c,0x12,0x12,0x0c,
  17.                            0x00,0x00,0x00,0x00,
  18.                          };

  19. //------------------------------- 判斷液晶顯示器是否忙函數(shù) ----------------------------

  20. CHECK_BF()                                      //判斷是否忙碌
  21. {
  22.   do
  23.    {
  24.     LCD=0xff;   
  25.     RS=0;                                       // RS=0,選擇指令寄存器
  26.     RW=1;                                       // RW=1,選擇讀模式
  27.     EN=0;                                       // 執(zhí)行顯示命令
  28.     EN=1;                                       // 允許讀/寫
  29.    }  
  30.   while(busy);                                  //busy為高電平表示忙,循環(huán)等待
  31. }

  32. //--------------------------------------  寫命令函數(shù)  -----------------------------------

  33. WR_COMM()                                       //寫命令
  34. {
  35.   RS=0;                                         // RS=0,選擇指令寄存器
  36.   RW=0;                                         // RW=0,選擇寫模式
  37.   EN=0;                                         // 執(zhí)行顯示命令
  38.   CHECK_BF();                                   // 等待
  39.   EN=1;                                         // E=1,允許讀/寫LCD
  40. }

  41. //-------------------------------------- 寫數(shù)據(jù)函數(shù) -------------------------------------

  42. WR_DATA()                                       //寫數(shù)據(jù)
  43. {
  44.   RS=1;                                         // RS=1,選擇數(shù)據(jù)寄存器
  45.   RW=0;                                         //準(zhǔn)備寫入數(shù)據(jù)
  46.   EN=0;                                         //執(zhí)行顯示命令
  47.   CHECK_BF();                                   //判斷液晶模塊是否忙
  48.   EN=1;                                         // E=1,允許讀/寫LCD
  49. }

  50. //--------------------------------------- 初始化函數(shù)   ----------------------------------

  51. INIT_LCD()                                       //初始化
  52. {
  53.    unsigned char i=200;
  54.     {
  55.       while(--i);
  56.       LCD=0x01;                                 //清屏并光標(biāo)復(fù)位
  57.       WR_COMM();                                //寫入命令
  58.       LCD=0x38;                                 //設(shè)置顯示模式:8位2行5x7點陣
  59.       WR_COMM();
  60.       LCD=0x0c;                                 //開顯示屏
  61.           WR_COMM();
  62.       LCD=0x06;                                 //文字不動,光標(biāo)自動右移
  63.       WR_COMM();                                //寫入命令
  64.     }
  65. }

  66. //--------------------------------  顯示溫度標(biāo)記字符C函數(shù) -------------------------

  67. TEMP_BJ()                                       //顯示字符C
  68.      {      
  69.            LCD=0xcc;                                  //寫入顯示起始地址                 
  70.        WR_COMM();                                 //寫入命令                                 
  71.        LCD=( 'C' );                               //寫字符
  72.            WR_DATA();                              
  73.                          
  74.         }
  75. //----------------------------------- 自定義字符函數(shù) --------------------------------
  76.   STORE_DATA()
  77.     {
  78.        unsigned char i;
  79.            LCD=0x40;                                      // 指定CG RAM起始地址                 
  80.        WR_COMM();                                     //寫入命令                  
  81.        for(i=0;i<9;i++)                                
  82.         {
  83.           LCD=TAB[i];                                //提取字符
  84.           WR_DATA();                                 //送出
  85.         }
  86.   //------------------------------------         
  87.            LCD=0xcb;                                      //寫入顯示起始地址
  88.            WR_COMM();                                     //寫入命令
  89.        LCD=0x00;                                      //CGRAM內(nèi)第0號圖形
  90.        WR_DATA();                                           //寫入數(shù)據(jù)                          
  91.         }

  92. //------------------------------------- 主函數(shù) -----------------------------------

  93. main()
  94. {
  95.    INIT_LCD();                                   //調(diào)用初始化函數(shù)
  96.    TEMP_BJ();                                    //調(diào)用顯示溫度標(biāo)記字符C函數(shù)
  97.    STORE_DATA();                                 //調(diào)用自定義字符函數(shù)

復(fù)制代碼



該系列源碼包含有很多非常經(jīng)典,代碼風(fēng)格十分規(guī)范,而且注釋詳細的單片機例程,還帶仿真,對于MCU學(xué)習(xí)特別是初學(xué)者是很有幫助的,全部源碼下載(共25個項目):http://www.torrancerestoration.com/bbs/dpj-79328-1.html

本例程下載(含proteus仿真工程文件與源碼):
單片機LCD1602自建溫度標(biāo)記圖形程序?qū)嶒?rar (28.35 KB, 下載次數(shù): 11)

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表