找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1238|回复: 5
收起左侧

这个仿真都能出来可是单片机程序烧进去后LCD屏幕可以亮可是没其他反应是为什么啊

[复制链接]
ID:828701 发表于 2021-6-18 14:56 | 显示全部楼层 |阅读模式
51hei图片20210617133408.png 仿真.png
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit RS=P2^6;
  6. sbit RW=P2^5;
  7. sbit E=P2^7;
  8. sbit R=P1^0;
  9. sbit C=P1^1;
  10. sbit L=P1^2;
  11. sbit A1=P1^3;
  12. sbit A0=P1^4;

  13. #define LCD_data  P0                                       
  14. uchar   code  table1[11]={"R=       R"};
  15. uchar   code  table2[11]={"C=       pF"};
  16. uchar   code  table3[11]={"L=       mH"};

  17. uchar code f_table[88]={13,14,15,16,17,        18,        19,        20,        21,        22,        23,        24,        25,        26,        27,        28,        29,        30,        31,        32,        33,        34,        35,        36,        37,        38,        39,        40,        41,        42,        43,        44,        45,        46,        47,        48,        49,        50,        51,        52,        53,        54,        55,        56,        57,        58,        59,        60,        61,        62,        63,        64,        65,        66,        67,        68,        69,        70,        71,        72,        73,        74,        75,        76,        77,        78,        79,        80,        81,        82,        83,        84,        85,        86,        87,        88,        89,        90,        91,        92,        93,        94,        95,        96,        97,        98,        99,        100};
  18. uchar code f_correct[88]={9,10,        11,        12,        12,        12,        13,        14,        15,        16,        17,        18,        18,        18,        19,        20,        21,        21,        22,        23,        24,        25,        25,        26,        26,        27,        28,        29,        29,        30,        30,        31,        32,        33,        33,        34,        35,        35,        36,        37,        38,        38,        39,        40,        41,        41,        42,        42,        43,        44,        45,        45,        46,        47,        48,        49,        49,        50,        51,        51,        52,        53,        54,        54,        55,        55,        56,        57,        57,        58,        59,        60,        60,        62,        62,        63,        64,        64,        65,        66,        66,        67,        67,        68,        69,        70,        71,        71,};

  19. uchar a7,a6,a5,a4,a3,a2,a1;
  20. //uchar flag;
  21. unsigned long cnt,cnt1;
  22. uchar f_cnt;


  23. /********************************/

  24. void delay_us(); //18us
  25. void delay_ms(uint);
  26. void lcd_init();
  27. void lcd_write_com(uchar com);
  28. void lcd_write_dat(uchar dat);
  29. void lcd_init();
  30. void lcd_display(uchar add,uchar dat);
  31. /***********************************/

  32. void delay_us()
  33. {
  34.         uchar x;
  35.         for(x=0;x<5;x++);
  36. }

  37. void delay_ms(uint z)
  38. {
  39.         uint x,y;
  40.         for(x=0;x<z;x++)
  41.                 for(y=0;y<123;y++);
  42. }
  43. void lcd_write_com(uchar com)
  44. {
  45.   E=0;
  46.   RS=0;
  47.   RW=0;
  48.   delay_us();
  49.   LCD_data=com;
  50.   E=1;           //¸ßÂö3åD′èëêy¾Y
  51.   delay_us();
  52.   E=0;
  53. }
  54. void lcd_write_dat(uchar dat)
  55. {
  56.   E=0;
  57.   RS=1;
  58.   RW=0;
  59.   delay_us();
  60.   LCD_data=dat;
  61.   E=1;           //¸ßÂö3åD′èëêy¾Y
  62.   delay_us();
  63.   E=0;
  64. }
  65. void lcd_init()                  //lcd3õê¼»ˉ
  66. {
  67.         delay_ms(15);
  68.         lcd_write_com(0x38);
  69.         delay_ms(10);
  70.         lcd_write_com(0x0c);
  71.         lcd_write_com(0x06);
  72.         lcd_write_com(0x01);
  73.         delay_ms(2);
  74.         
  75.         
  76. }
  77. void timer_init(void)  //¶¨ê±Æ÷3õê¼»ˉ
  78. {
  79.         TMOD=0X51;
  80.         PT0=1;     /*ÖD¶ÏóÅÏè*/
  81.         TH0=0x3c;
  82.         TL0=0xb0;
  83.         TH1=0;
  84.         TL1=0;
  85.         ET0=1;
  86.         ET1=1;
  87.         TR0=1;
  88.         TR1=1;
  89.         EA=1;        
  90. }
  91. void lcd_display(uchar add,uchar dat)           //lcdÏÔê¾£¨μØÖ·£¬êy¾Y£©
  92. {

  93.         lcd_write_com(add);
  94.         
  95.         lcd_write_dat(dat);
  96.         delay_us();

  97. }
  98. void real_display(void)
  99. {
  100.             if(!R)
  101.                          {
  102.                                 delay_ms(1);
  103.                                 if(!R)
  104.                                 {
  105.                                         A1=A0=0;        
  106.                                         while(!R)
  107.                                         {
  108.                                         lcd_display(0x80,table1[0]);
  109.                                                 lcd_display(0x80+1,table1[1]);
  110.                                                 lcd_display(0x80+9,table1[9]);
  111.                                                 lcd_display(0x80+10,table1[10]);
  112.                                         }
  113.                                 }
  114.                           }


  115.                         else if(!C)
  116.                         {
  117.                                 A0=0;A1=1;
  118.                                 lcd_display(0x80,table2[0]);
  119.                                 lcd_display(0x80+1,table2[1]);
  120. //                                lcd_display(0x80+8,' ');
  121.                                 lcd_display(0x80+9,table2[9]);
  122.                                 lcd_display(0x80+10,table2[10]);
  123.                         }


  124.                         else if(!L)
  125.                         {
  126.                                 A0=1;A1=0;
  127.                                 lcd_display(0x80,table3[0]);
  128.                                 lcd_display(0x80+1,table3[1]);
  129.                                 lcd_display(0x80+9,table3[9]);
  130.                                 lcd_display(0x80+10,table3[10]);
  131.                         }


  132.                         if(a7)
  133.                                 lcd_display(0x80+2,0x30+a7);
  134.                         else
  135.                                 lcd_display(0x80+2,' ');

  136.                         if(a7||a6)
  137.                                 lcd_display(0x80+3,0x30+a6);
  138.                         else
  139.                                 lcd_display(0x80+3,' ');


  140.                         if(a7||a6||a5)
  141.                                 lcd_display(0x80+4,0x30+a5);
  142.                         else
  143.                                 lcd_display(0x80+4,' ');


  144.                         if(a7||a6||a5||a4)
  145.                                 lcd_display(0x80+5,0x30+a4);        
  146.                         else
  147.                                   lcd_display(0x80+5,' ');


  148.                         if(a7||a6||a5||a4||a3)
  149.                                 lcd_display(0x80+6,0x30+a3);        
  150.                         else
  151.                             lcd_display(0x80+6,' ');


  152.                         if(a7||a6||a5||a4||a3||a2)
  153.                                 lcd_display(0x80+7,0x30+a2);
  154.                         else
  155.                                 lcd_display(0x80+7,' ');

  156.                         if(a7||a6||a5||a4||a3||a2||a1)                        
  157.                                 lcd_display(0x80+8,0x30+a1);
  158.                         else
  159.                                 lcd_display(0x80+8,' ');
  160.                

  161. }

  162. void correct(void)                        //Îó2îDTÕyoˉêy
  163. {
  164.         uchar i,k;
  165.         unsigned long wucha;
  166.         if(cnt<100000)                   //100KHzòÔÄúμÄDTÕy
  167.         {
  168.                 if(cnt>980&&cnt<2100)     cnt-=1;
  169.                 if(cnt>=2100&&cnt<3900)   cnt-=2;
  170.                 if(cnt>=3900&&cnt<4800)   cnt-=3;
  171.                 if(cnt>=4800&&cnt<5700)   cnt-=4;
  172.                 if(cnt>=5700&&cnt<8000)   cnt-=5;
  173.                 if(cnt>=8000&&cnt<9100)          cnt-=6;
  174.                 if(cnt>=9100&&cnt<10900)  cnt-=7;
  175.                 if(cnt>=10900&&cnt<11900) cnt-=8;
  176.                 if(cnt>=11900&&cnt<13000) cnt-=9;
  177.                 if(cnt>=13000&&cnt<=100000)
  178.                 {
  179.                         k=cnt/1000;
  180.                         for(i=0;i<88;i++)
  181.                         {
  182.                                 if(k==f_table[i])
  183.                                 {
  184.                                         cnt-=f_correct[i];
  185.                                 }
  186.                         }
  187.                 }
  188.                
  189.                
  190.         }
  191.         if(cnt>100000)         
  192.         {
  193.                 wucha=(cnt/1000)*73065/100000;
  194.                 cnt-=wucha;
  195.         }
  196. }

  197. void main()
  198. {

  199.     timer_init();
  200.         lcd_init();
  201.         while(1)
  202.         {               
  203. //                   if(flag==1)
  204. //                   {
  205. //                        real_display();
  206. //                        flag=0;
  207. //                        }
  208.                         real_display();
  209.         
  210.         }
  211.         
  212. }
  213. void timer0() interrupt 1
  214. {
  215.         uchar timer0;
  216.         
  217.         TH0=0x3c;          //50ms
  218.         TL0=0xb0;
  219.         timer0++;
  220.         if(timer0==20)
  221.         {
  222.                 TR1=0;          //1رÕμļÆêyÆ÷
  223.                 EA=0;
  224.                 cnt=TL1+TH1*256+f_cnt*65536;
  225.                 correct();
  226.             //cnt1=(1e+9)/(2*0.693 *cnt)-20000/2;
  227.                 if(!R)
  228.                 {
  229. //                while(!R);
  230.                 cnt1=1000000/(0.2*0.693*cnt)-165;
  231.                 }
  232.                 else if(!C)
  233.                 {
  234.                 cnt1=1000000000/(0.693*3*510*cnt);
  235.                 }
  236.                 else if(!L)
  237.                 {
  238.                  cnt1=(1e+9)/(4*3.14*3.14*cnt*cnt*0.05);
  239.                 }
  240.                 timer0=0;
  241.         
  242.                 a7=cnt1%10000000/1000000;
  243.                 a6=cnt1%1000000/100000;
  244.                 a5=cnt1%100000/10000;
  245.                 a4=cnt1%10000/1000;
  246.                 a3=cnt1%1000/100;
  247.                 a2=cnt1%100/10;
  248.                 a1=cnt1%10;  
  249. //                flag=1;
  250.              TH1=0;
  251.                 TL1=0;
  252.                 TH0=0x3c;
  253.              TL0=0xb0;
  254.                 cnt=0;
  255.                 f_cnt=0;
  256.                 EA=1;
  257.                 TR1=1;           //′ò¿a¼ÆêyÆ÷
  258.         
  259.         
  260.         }
  261.         

  262. }        

  263. void int1() interrupt 3
  264. {
  265.          f_cnt++;
  266. }

复制代码
回复

使用道具 举报

ID:748788 发表于 2021-6-18 16:18 | 显示全部楼层
在进入主循环之前显示几个字符到lcd,看能否正常显示
回复

使用道具 举报

ID:828701 发表于 2021-6-18 18:35 | 显示全部楼层
wwh2382 发表于 2021-6-18 16:18
在进入主循环之前显示几个字符到lcd,看能否正常显示

啊这 还不会改程序啊
回复

使用道具 举报

ID:342822 发表于 2021-6-18 19:47 | 显示全部楼层
注意:第二个仿真图lcd的接线VDD  VEE
回复

使用道具 举报

ID:939801 发表于 2021-6-18 20:00 来自手机 | 显示全部楼层
你用的LCD接口接线你检查型号是不是一样的
回复

使用道具 举报

ID:390416 发表于 2021-6-19 08:40 | 显示全部楼层
LCD1602显示℃ 这种自定义符号 http://www.51hei.com/bbs/dpj-200685-1.html
LCD1602液晶最新资料 说明了具体的时间要求 http://www.51hei.com/bbs/dpj-205768-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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