发 帖  
原厂入驻New
[问答]

protues仿真LCD不显示字

378 protues LCD
分享
萌新求大佬指导
0
9{`G6TS2J[6%4WWSC~`_K@C.png
UX)TYBY$FID8MF@)YJ}F35K.png

A.zip

下载积分: 积分 -1 分

61.98 KB , 下载次数: 0 , 下载积分: 积分 -1 分

仿真

1.zip

下载积分: 积分 -1 分

64.53 KB , 下载次数: 0 , 下载积分: 积分 -1 分

代码

已退回10积分
2021-4-12 17:58:19   评论 分享淘帖 邀请回答

相关问题

1个回答
LCD1602程序




  1. #ifndef _lcd1602_H_
  2. #define        _lcd1602_H_
  3. #include <intrins.h>
  4. #include "stc89c5x.h"
  5. #define uchar unsigned char
  6. #define uint unsigned int

  7. sbit rs= P2^7;
  8. sbit rw = P2^6;
  9. sbit ep = P2^5;

  10. code uchar LCDnumber[]="0123456789";

  11. void delay22(unsigned char ms)
  12. {
  13. unsigned char i;
  14. while(ms--)
  15. {
  16. for(i = 0; i< 250; i++)
  17. {
  18. _nop_();
  19. _nop_();
  20. _nop_();
  21. _nop_();
  22. }
  23. }
  24. }

  25. bit lcd_bz()
  26. {
  27. bit result;
  28. rs = 0;
  29. rw = 1;
  30. ep = 1;
  31. _nop_();
  32. _nop_();
  33. _nop_();
  34. _nop_();
  35. result = (bit)(P0 & 0x80);
  36. ep = 0;
  37. return result;
  38. }

  39. void lcd_wcmd(unsigned char cmd)
  40. {
  41. while(lcd_bz());//判断LCD是否忙碌
  42. rs = 0;
  43. rw = 0;
  44. ep = 0;
  45. _nop_();
  46. _nop_();
  47. P0 = cmd;
  48. _nop_();
  49. _nop_();
  50. _nop_();
  51. _nop_();
  52. ep = 1;
  53. _nop_();
  54. _nop_();
  55. _nop_();
  56. _nop_();
  57. ep = 0;
  58. }



  59. void lcd_wdat(unsigned char dat)
  60. {
  61. while(lcd_bz());//判断LCD是否忙碌
  62. rs = 1;
  63. rw = 0;
  64. ep = 0;
  65. P0 = dat;
  66. _nop_();
  67. _nop_();
  68. _nop_();
  69. _nop_();
  70. ep = 1;
  71. _nop_();
  72. _nop_();
  73. _nop_();
  74. _nop_();
  75. ep = 0;
  76. }

  77. void lcd_goto_xy(unsigned  char x,unsigned  char y)
  78. {
  79. if(y==1)
  80. x+=0x40;
  81. x+=0x80;
  82. lcd_wcmd(x);
  83. }

  84. void lcd_putc(unsigned char c)   // 写字符(传入的参数实际为所需显示字符的地址,即液晶字符产生器中字符的地址)     
  85. {   
  86.     rw = 0;                  // RW置0,状态为写   
  87.     rs = 1;                  // RS置1,写入数据   
  88.     lcd_wdat(c);   
  89. }            
  90. void lcd_puts(unsigned char *s)  // 写字符串函数   
  91. {   
  92.      while(*s)
  93.   {
  94.    lcd_wdat(*s);
  95.    s++;
  96.   }  
  97. }

  98. /********************************************************************
  99. ** 函数名称: display_char
  100. ** 入口参数:x(unsigned  char型),y(unsigned  char型),dat(unsigned  char型)
  101. ** 出口参数:无
  102. ** 功能描述: 在具体位置显示单个字符,x是列号,y是行号
  103. *********************************************************************/
  104. void  lcd_xy_putc(unsigned  char x,unsigned  char y,unsigned  char dat)
  105. {
  106.   lcd_goto_xy(x,y);
  107.   lcd_wdat(dat);
  108. }

  109. /*********************************************************************
  110. ** 函数名称: display_string
  111. ** 入口参数:x(unsigned  char型),y(unsigned  char型),s(指针型)
  112. ** 出口参数:无
  113. ** 功能描述: 在具体位置显示字符串,以/0结束,x是列号,y是行号
  114. **********************************************************************/
  115. void  lcd_xy_puts(unsigned  char x,unsigned  char y,unsigned  char *s)
  116. {
  117.   lcd_goto_xy(x,y);
  118.   while(*s)
  119.   {
  120.    lcd_wdat(*s);
  121.    s++;
  122.   }
  123. }
  124. void lcd_number(unsigned char a)  //变量数字显示
  125. {
  126. rw = 0;                      // RW置0,状态为写   
  127. rs = 1;                      // RS置1,写入数据
  128. lcd_wdat(LCDnumber[a]);
  129. }   

  130. void lcd_init()
  131. {
  132. lcd_wcmd(0x38);
  133. delay22(1);
  134. lcd_wcmd(0x0c);
  135. delay22(1);
  136. lcd_wcmd(0x06);
  137. delay22(1);
  138. lcd_wcmd(0x01);
  139. delay22(1);
  140. }
  141.   





  142. #endif

复制代码

2021-4-12 18:04:03 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
我要提问
关闭

站长推荐 上一条 /5 下一条

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