找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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. }
复制代码
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:520481 发表于 2019-4-28 17:07 | 只看该作者
有没有大手子帮我看看啊
回复

使用道具 举报

板凳
ID:213173 发表于 2019-4-28 17:27 | 只看该作者
纵有疾风起12138 发表于 2019-4-28 17:07
有没有大手子帮我看看啊

仿真图里的排阻用错了,P1的电平无法确定。在元件库里查找 RESPACK-8 排阻。
回复

使用道具 举报

地板
ID:96682 发表于 2019-4-28 20:06 | 只看该作者
楼主得先弄清楚 J1 是什么器件
回复

使用道具 举报

5#
ID:520481 发表于 2019-4-29 13:56 | 只看该作者
wulin 发表于 2019-4-28 17:27
仿真图里的排阻用错了,P1的电平无法确定。在元件库里查找 RESPACK-8 排阻。

万分感谢啊 1602能显示了
回复

使用道具 举报

6#
ID:520481 发表于 2019-4-29 13:56 | 只看该作者
wc86110 发表于 2019-4-28 20:06
楼主得先弄清楚 J1 是什么器件

谢谢啊 楼上帮我指正了 排阻弄错了
回复

使用道具 举报

7#
ID:226629 发表于 2019-4-29 14:41 | 只看该作者
现在好了就行
回复

使用道具 举报

8#
ID:524649 发表于 2019-4-29 18:58 | 只看该作者
要用正确的排阻才可以正常显示呀
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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