国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

51單片機驅動LCD1602程序帶注釋簡潔易懂和proteus仿真

[復制鏈接]
樓主
coolfire 發表于 2021-4-30 01:22:26 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51單片機驅動LCD1602程序帶注釋簡潔易懂和proteus仿真 1.png
51單片機帶注釋的源程序如下:

  1. //功能:晶振11.0592M,實現1602液晶顯示“88888888”//作者: 康曉龍
  2. //單位:四川機電技術學院
  3. //版本號:1.0
  4. #include<reg51.h>
  5. #include<intrins.h>           //包含_npp_函數定義頭文件
  6. #define uchar unsigned char         
  7. #define uint unsigned int
  8. uchar table[]="0123456789.";
  9. sbit rs=P0^4;  //定義 命令/數據輸入腳
  10. sbit rw=P0^5;  //定義 讀/寫腳
  11. sbit e=P0^6;  //定義使能腳
  12. sbit bf=P1^7;
  13. uchar ge,shi,bai;
  14. uint i;
  15. void delayms(uint xms)           // 延時子程序
  16. {
  17.         uint i;uchar j;
  18.         for(i=xms;i>0;i--)
  19.                 for(j=110;j>0;j--);
  20. }
  21. /**************************************
  22. 函數功能:判斷忙碌狀態
  23. 返回值:  result. result=0 忙,result=1 不忙。
  24. ***************************************/
  25. uchar panduanmanglu(void)
  26. {
  27.    bit result;
  28.         rs=0;
  29.         rw=1;
  30.         e=1;
  31.         _nop_();
  32.    result=bf;
  33.     e=0;
  34.   return result;
  35. }
  36. /************************************
  37. 函數功能:將模式設置指令或顯示地址寫入液晶模塊
  38. 參數:canshu
  39. *************************************/
  40. void xiezhiling(uchar canshu)
  41. {
  42.   while( panduanmanglu()==1);
  43.     rs=0;
  44.         rw=0;
  45.         e=0;
  46.         _nop_();
  47.            _nop_();
  48.         P1=canshu;
  49.         _nop_();
  50.            _nop_();
  51.         e=1;
  52.         _nop_();
  53.            _nop_();
  54.         e=0;
  55. }
  56. /************************************
  57. 函數功能:指定字符顯示的實際地址
  58. 參數:x
  59. *************************************/
  60. void xiedizhi(uchar x)
  61. {
  62. xiezhiling(x+0x80);
  63. }
  64. /************************************
  65. 函數功能:將數據寫入液晶模塊
  66. 參數:y
  67. *************************************/
  68. void xieshujv(uchar y)
  69. {
  70. while( panduanmanglu()==1);
  71. rs=1;
  72. rw=0;
  73. e=0;
  74. P1=y;
  75. _nop_();
  76. _nop_();

  77. e=1;
  78. _nop_();
  79. _nop_();
  80. e=0;

  81. }
  82. /************************************
  83. 函數功能:對LCD的顯示進行初始化設置
  84. *************************************/
  85. void chushihua()
  86. {
  87.   delayms(15);
  88.   xiezhiling(0x38);        //0011 1000
  89.    delayms(5);
  90.   xiezhiling(0x0c);        //0000 1DCB         ,D=1開顯示,C=1顯示光標,B=1光標閃爍
  91.    delayms(5);
  92.   xiezhiling(0x04);//0000 01NS ,N=1指針加1,光標加1;N=0指針減1,光標減1;
  93.                                 //S=1當寫一個字符時,整屏顯示左移(N=1)或右移(N=0),
  94.                                                         //以得到光標不移動而屏幕移動的效果;S=0整屏顯示不移動      
  95.    delayms(5);

  96. }

  97. /************************************
  98. 函數功能:處理 i的數據
  99. *************************************/
  100. void xainshi(uint i)
  101. {
  102.                   
  103.                    ge=i%10;                             //求數碼管的個位
  104.                    shi=i/10%10;                    //求數碼管的十位
  105.                    bai=i/100%10;                   //求數碼管的百位
  106. }            

  107. void main()
  108. {
  109. chushihua();
  110.         while(1)
  111.         {        i=124;
  112.                 xainshi(i);
  113.             xiedizhi(0x05);//顯示的地址在第一行的第6個顯示
  114.             xieshujv(table[ge]);
  115.                 xiedizhi(0x06);//顯示的地址在第一行的第7個顯示
  116.             xieshujv(table[10]);
  117.                 xiedizhi(0x07);//顯示的地址在第一行的第8個顯示
  118.             xieshujv(table[shi]);
  119.                 xiedizhi(0x08);//顯示的地址在第一行的第9個顯示
  120.             xieshujv(table[bai]);

  121.         }
  122. }
復制代碼
51單片機C源碼和proteus仿真文件.zip (268.01 KB, 售價: 1 E幣)
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 02:09

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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