51单片机驱动LCD1602程序带注释简洁易懂和proteus仿真

[复制链接]
查看43 | 回复0 | 2021-4-30 01:22:26 | 显示全部楼层 |阅读模式
仿真原理图如下(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 工控币)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则