找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2024|回复: 0
打印 上一主题 下一主题
收起左侧

单片机lcd1602多种显示模式Proteus仿真源代码

[复制链接]
跳转到指定楼层
楼主
  lcd1602的三种显示模式仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <reg51.h>
  2. #define uc unsigned char
  3. #define ui unsigned int
  4. #define        out P0
  5. sbit rs=P2^0;
  6. sbit rw=P2^1;
  7. sbit e=P2^2;
  8. void prime(void);                         //初始化函数
  9. void busy(void);                         //检查忙标志位函数
  10. void command(uc com);                 //写命令
  11. void wdata(uc dat);                         //写数据
  12. void string(ui ad,uc *s);         //指针直接输入显示函数(ad=行列位置,*s=字符)
  13. //void tu(ui h,ui l,ui d);         //显示单位字符函数(h=行,l=列,d=字符)
  14. //void display(ui h,ui l,ui z);//显示三位数字字符函数        (h=行,l=列,z=字符)
  15. void delay(int x);                         //延迟函数
  16. void delay(x)                                 //延迟函数
  17. {int i;
  18.   while(x)
  19. {
  20. for(i=0;i<125;i++);
  21. x--;
  22. }
  23. }
  24. void busy(void)                                 //检查忙标志位函数
  25. {uc dt;
  26. do
  27. {dt=0xff;
  28.   e=0;
  29.   rs=0;
  30.   rw=1;
  31.   e=1;
  32.   dt=out;
  33. }while(dt&0x80);
  34. e=0;
  35. }
  36. void command(uc com)                 //写命令
  37. {busy();
  38. e=0;
  39. rs=0;
  40. rw=0;
  41. out=com;
  42. e=1;
  43. delay(1);
  44. e=0;
  45. delay(1);
  46. }
  47. void wdata(uc dat)                         //写数据
  48. {busy();
  49. e=0;
  50. rs=1;
  51. rw=0;
  52. out=dat;
  53. e=1;
  54. delay(1);
  55. e=0 ;
  56. delay(1);

  57. }
  58. void prime(void)                         //初始化函数
  59. {command(0x38);                                 //功能设置:5*7点阵,8位数据接口
  60. command(0x01);                                 //清屏
  61. command(0x06);                                 //显示模式设置
  62. command(0x0c);                                 //显示开关及光标设置
  63. delay(1);
  64. }
  65. void string(ui ad,uc *s)         //指针直接输入显示函数(ad=行列位置,*s=字符)
  66. {command(ad);                                 //行列设置0x85:字符在第二行第五列开始显示,0xcc:字符在第二行第十二列开始显示。
  67. while(*s>0)
  68. {
  69.   wdata(*s++);
  70.   delay(10);
  71. }
  72. }
  73. //void display(ui h,ui l,ui z)  //显示单位字符函数(h=行,l=列,d=字符)
  74. //{ if(h==1)                                          //如果h=1就在第一行
  75. //  {
  76. //   command(0x80+l);                          //l为多少就从哪里显示
  77. //  }
  78. //  if(h==2)                                          //如果h=2就在第二行
  79. //  {
  80. //   command(0xc0+l);
  81. //  }
  82. // wbata(z);                                          //只能输入一个字符(可以是lcd1602可以显示的任意字符)
  83. //}
  84. //void tu(ui h,ui l,ui d)                  //显示三位数字字符函数(h=行,l=列,z=字符)
  85. //{ display(h,l,d/100%10+'0');  //只能显示数字
  86. //  display(h,l+1,d/10%10+'0');
  87. //  display(h,l+2,d%10+'0');
  88. //}
  89. main()
  90. {prime();
  91. while(1)
  92. {ui a=121,b=567;
  93.   string(0x80,"Come on");                  
  94.   string(0xc0,"No question");
  95. //  display(1,0,'1');
  96. //  display(2,15,'A');
  97. //  tu(1,0,b);
  98. //        tu(2,0,a);
  99.   delay(1000);
  100.   command(0x01);
  101.   delay(1);
  102. }
  103. }
复制代码

所有资料51hei提供下载:
LCD1602.zip (69.38 KB, 下载次数: 21)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表