标题: 51单片机控制1602 1602亮了 但是不显示字符 [打印本页]

作者: 纵有疾风起12138    时间: 2019-4-28 17:06
标题: 51单片机控制1602 1602亮了 但是不显示字符
这是程序 keil里面可以运行的 也能生成hex文件 然后放到单片机里 在peoteus里仿真1602没显示什么东西


单片机源程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit LCD_RS = P1^0;            
  6. sbit LCD_RW = P1^1;
  7. sbit LCD_EN = P1^2;

  8. uchar code dis1[] = {"   WLCOME  TO   "};
  9. uchar code dis2[] = {" WWW*RICHMCU*COM "};
  10. uchar code dis3[] = {"   OT  EMOCLW   "};
  11. uchar code dis4[] = {" MOC*UCMHCIR*WWW "};

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

  26. bit lcd_busy()
  27. {                          
  28.     bit result;
  29.     LCD_RS = 0;
  30.     LCD_RW = 1;
  31.     LCD_EN = 1;
  32.     _nop_();
  33.     _nop_();
  34.     _nop_();
  35.     _nop_();
  36.      result = (bit)(P0&0x80);
  37.     LCD_EN = 0;
  38.     return result;
  39. }


  40. void lcd_wcmd(uchar cmd)
  41. {                          
  42.    while(lcd_busy());
  43.     LCD_RS = 0;
  44.     LCD_RW = 0;
  45.     LCD_EN = 0;
  46.     _nop_();
  47.     _nop_();
  48.     P0 = cmd;
  49.     _nop_();
  50.     _nop_();
  51.     _nop_();
  52.     _nop_();
  53.     LCD_EN = 1;
  54.     _nop_();
  55.     _nop_();
  56.     _nop_();
  57.     _nop_();
  58.     LCD_EN = 0;  
  59. }


  60. void lcd_wdat(uchar dat)
  61. {                          
  62.    while(lcd_busy());
  63.     LCD_RS = 1;
  64.     LCD_RW = 0;
  65.     LCD_EN = 0;
  66.     P0 = dat;
  67.     _nop_();
  68.     _nop_();
  69.     _nop_();
  70.     _nop_();
  71.     LCD_EN = 1;
  72.     _nop_();
  73.     _nop_();
  74.     _nop_();
  75.     _nop_();
  76.     LCD_EN = 0;
  77. }


  78. void lcd_pos(uchar pos)
  79. {                          
  80.    lcd_wcmd(pos|0x80);      
  81. }



  82. void lcd_init()
  83. {                        
  84.     lcd_wcmd(0x38);      
  85.     delay(5);
  86.     lcd_wcmd(0x38);         
  87.     delay(5);
  88.     lcd_wcmd(0x38);         
  89.     delay(5);

  90.     lcd_wcmd(0x0c);        
  91.     delay(5);
  92.     lcd_wcmd(0x06);      
  93.     delay(5);
  94.     lcd_wcmd(0x01);         
  95.     delay(5);
  96. }

  97. void flash()
  98. {
  99.       delay(600);                  
  100.       lcd_wcmd(0x08);           
  101.       delay(200);                  
  102.       lcd_wcmd(0x0c);            
  103.       delay(200);                    
  104.       lcd_wcmd(0x08);            
  105.       delay(200);                    
  106.       lcd_wcmd(0x0c);            
  107.       delay(200);
  108. }


  109. main()
  110. {
  111.     uchar i;
  112.     delay(10);
  113.     lcd_init();                        


  114.     while(1)              
  115.    {
  116.       lcd_wcmd(0x06);           
  117.       lcd_pos(0);                  
  118.       i = 0;

  119.      while(dis1[i] != '\0')
  120.      {                                    
  121.        lcd_wdat(dis1[i]);
  122.        i++;
  123.        delay(30);                    
  124.      }

  125.       lcd_pos(0x40);              
  126.       i = 0;

  127.      while(dis2[i] != '\0')
  128.      {
  129.        lcd_wdat(dis2[i]);        
  130.        i++;
  131.        delay(30);                    
  132.      }

  133.       flash();                        
  134.       lcd_wcmd(0x01);           
  135.       delay(200);                  
  136.       lcd_wcmd(0x04);        
  137.       lcd_pos(15);               
  138.       i = 0;

  139.      while(dis3[i] != '\0')
  140.      {                                 
  141.        lcd_wdat(dis3[i]);
  142.        i++;
  143.        delay(30);                  
  144.      }

  145.       lcd_pos(0x4F);              
  146.       i = 0;

  147.      while(dis4[i] != '\0')
  148.      {
  149.        lcd_wdat(dis4[i]);        
  150.        i++;
  151.        delay(30);                  
  152.      }

  153.       flash();                        
  154.       lcd_wcmd(0x01);         
  155.       delay(200);                 

  156.    }
  157. }
复制代码

作者: 纵有疾风起12138    时间: 2019-4-28 17:07
有没有大手子帮我看看啊
作者: wulin    时间: 2019-4-28 17:27
纵有疾风起12138 发表于 2019-4-28 17:07
有没有大手子帮我看看啊

仿真图里的排阻用错了,P1的电平无法确定。在元件库里查找 RESPACK-8 排阻。
作者: wc86110    时间: 2019-4-28 20:06
楼主得先弄清楚 J1 是什么器件
作者: 纵有疾风起12138    时间: 2019-4-29 13:56
wulin 发表于 2019-4-28 17:27
仿真图里的排阻用错了,P1的电平无法确定。在元件库里查找 RESPACK-8 排阻。

万分感谢啊 1602能显示了
作者: 纵有疾风起12138    时间: 2019-4-29 13:56
wc86110 发表于 2019-4-28 20:06
楼主得先弄清楚 J1 是什么器件

谢谢啊 楼上帮我指正了 排阻弄错了
作者: Than    时间: 2019-4-29 14:41
现在好了就行
作者: yunzhou1997    时间: 2019-4-29 18:58
要用正确的排阻才可以正常显示呀




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1