找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2526|回复: 0
收起左侧

proteus仿真L1602静止显示字符 含源码

[复制链接]
ID:293830 发表于 2018-3-20 10:24 | 显示全部楼层 |阅读模式
L1602静止显示字符仿真图和源程序
0.png
单片机源程序如下:
  1. Lcd1602静止显示字符程序

  2. 显示第一行显示welcome!第二行显示Hello world!
  3. (1)lcd_busy()    忙状态函数
  4. (2)lcd_command() 发数据到指令寄存器IR函数
  5. (3)lcd_write()   写数据(显示)
  6. (4)lcd_pos()     设定显示位置函数
  7. (5)lcd_init()    lcd初始化
  8. #include<reg52.h>
  9. #include<intrins.h>

  10. unsigned char code dis1[] = {"welcome!"};
  11. unsigned char code dis2[] = {"Hello world!"};
  12. sbit rs = P2^0;  //
  13. sbit rw = P2^1;
  14. sbit ep = P2^2;
  15. void delay(unsigned char ms) // 延时子程序
  16. {      
  17. unsigned char i;
  18. while(ms--)
  19. {
  20.   for(i = 0; i< 250; i++)
  21.   {
  22.    _nop_();
  23.    _nop_();
  24.    _nop_();
  25.    _nop_();
  26.   }
  27. }
  28. }
  29. bit lcd_busy() //忙状态
  30. {
  31.   bit temp;
  32.     rs=0;
  33. rw=1;
  34. ep=1;
  35. _nop_();
  36. _nop_();
  37. _nop_();
  38. _nop_();
  39. temp=(bit)(P0&0x80);
  40. ep=0;
  41. return temp;
  42. }
  43. void lcd_command(unsigned char dat) //发数据到指令寄存器IR
  44. {
  45.   while(lcd_busy());
  46. rs=0;
  47. rw=0;
  48. ep=0;
  49. _nop_();
  50. _nop_();
  51. _nop_();
  52. _nop_();
  53. P0=dat;
  54. _nop_();
  55. _nop_();
  56. _nop_();
  57. _nop_();
  58. ep=1;
  59. _nop_();
  60. _nop_();
  61. _nop_();
  62. _nop_();
  63. ep=0;
  64. }
  65. void lcd_write(unsigned char dat) //写数据
  66. {
  67.   while(lcd_busy());
  68. rs=1;
  69. rw=0;
  70. ep=0;
  71. _nop_();
  72. _nop_();
  73. _nop_();
  74. _nop_();
  75. P0=dat;
  76. _nop_();
  77. _nop_();
  78. _nop_();
  79. _nop_();
  80. ep=1;
  81. _nop_();
  82. _nop_();
  83. _nop_();
  84. _nop_();
  85. ep=0;
  86. }
  87. //-------------------------------------------
  88. // x为列,y为行
  89. //-------------------------------------------
  90. void lcd_pos(unsigned char x,unsigned char y)//设定显示位置
  91. {
  92. if(y==0) x |= 0x80;
  93.     else   x |= 0xc0;
  94.       
  95. lcd_command(x);
  96. }
  97. void lcd_init() //lcd初始化
  98. {
  99. lcd_command(0x38);//设置功能:DL=1,N=1,F=0(8位数据总线,5*8点阵,2行显示)
  100. delay(1);
  101. lcd_command(0x0c);//显示开/关控制:D=1,C=0,B=0(开显示,光标不显示)
  102. delay(1);
  103. lcd_command(0x06);//设置输入模式:I/D=1,S=0(AC地址增1,不移位)
  104. delay(1);
  105. lcd_command(0x01);//清屏显示
  106. delay(1);
  107. //lcd_command(0x0e);//显示开/关控制:D=1,C=1,B=0(开显示,光标显示)
  108. }
  109. void main(void)
  110. {
  111. unsigned char i;

  112. lcd_init();

  113. lcd_pos(5,0);
  114. i=0;
  115. while(dis1[i]!='\0')
  116. {
  117.   lcd_write(dis1[i]);i++;
  118. }

  119. lcd_pos(3,1);
  120. i=0;
  121. while(dis2[i]!='\0')
  122. {
  123.   lcd_write(dis2[i]);i++;
  124. }

  125. while(1);
  126. }

复制代码

所有资料51hei提供下载:
L1602静止显示字符.rar (51.31 KB, 下载次数: 14)

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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