亚博智能论坛  
  
查看: 914|回复: 1

12864就会一直闪不停,是怎么回事呢?

  [复制链接]
  • TA的每日心情
    萌哒
    2018-9-3 14:41
  • 20

    主题

    32

    帖子

    104

    积分

    菜鸟程序猿

    Rank: 2

    积分
    104
    发表于 2017-6-20 17:11:46 | 显示全部楼层 |阅读模式

    在下愚笨,实在找不出哪里有问题,但是显示就是不正常,编译无错误无警告。另外,想请教一下,在下的中断有问题吗,为什么开了中断就会出现问题呢。还有,绿色标注的部分如果放进大循环里,12864就会一直闪不停啊,这也不是在下想要的结果啊。因程序稍长,但程序很简单,希望您花几分钟看一下,重点部分红色标注,其余都是一些简单的驱动,下面程序的加热功能区也不需要看。
    简单说明一下,在下想要实现的功能。在下打算是用一个部分矩阵键盘和12864在模拟显示个简单太阳能控制器。按键不同,来实现不同的功能选择。用杜邦线引脚的原因是,想来模拟一下水位过低的情况,触发自动上水功能,用中断来模拟上水,每5s,增长一个百分点。大体情况就是这样,如有疑问,随时传唤在下。
    代码不美且较长,望您能指点迷津,感激不尽!
    1. #include<reg52.h>
    2. #include <stdlib.h>
    3. #include <intrins.h>
    4. #define uchar unsigned char
    5. #define uint unsigned int
    6. #define LCD_data P0
    7. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
    8. #define N 12
    9. sbit col1=P1^7;   //列端口定义
    10. sbit col2=P1^6;
    11. sbit col3=P2^0;
    12. sbit col4=P2^1;
    13. sbit LCD_EN=P3^4;
    14. sbit LCD_RS=P3^5;
    15. sbit LCD_RW=P3^6;
    16. sbit LCD_PSB=P3^7;
    17. sbit _Speak=P3^2 ; //讯响器控制脚
    18. sbit Low=P3^0; //模拟最低水位触发脚
    19. uchar code dis0[]={"****智能控制****"};
    20. uchar code dis1[]={"当前功能显示区"};
    21. uchar code dis2[]={"当前水温: "};
    22. uchar code dis3[]={"当前水位比: 60"};
    23. uchar code dis4[]={"按S19 开始上水"};
    24. uchar code dis5[]={"目标水位比: "};
    25. uchar code dis6[]={"按 S7 停止上水"};
    26. uchar code dis7[]={"上水中..."};
    27. uchar code dis8[]={"按S20 开始加热"};
    28. uchar code dis9[]={"目标水温:"};
    29. uchar code dis10[]={"按 S8 停止加热"};
    30. uchar code dis11[]={"加热中..."};
    31. uchar code dis12[]={"目标水位比: 00"};
    32. uchar code dis13[]={"当前水位比: "};
    33. void delay1ms(uint);
    34. void delay(uchar);                                          
    35. void keyscan();
    36. void write_cmd(uchar cmd);
    37. void write_dat(uchar dat);
    38. void lcd_pos(uchar X,uchar Y);
    39. void write_sfm1(uchar add,uchar date);
    40. void write_sfm2(uchar add,uchar date);
    41. void lcd_init();
    42. bit lcd_busy();
    43. char filter();
    44. uint num=0,i=0;
    45. uint counter=0,a=0,counter1=0,b=0;
    46. uint water0=0,water1=0,temp=0;
    47. uint m=0;
    48. uint LOW=0;
    49. void main()//固定界面显示
    50. {
    51.         TH0=(65536-46080)/256;
    52.         TL0=(65536-46080)%256; //50ms定时   
    53.         ET0=1;
    54.         EA=1;

    55.         lcd_busy();
    56.         delay1ms(10);
    57.         lcd_init();

    58.         lcd_pos(0,0);//智能控制
    59.         i=0;
    60.         while(dis0!='\0')
    61.         {
    62.                 write_dat(dis0);
    63.                 i++;
    64.         }


    65.         lcd_pos(1,0);//当前水温
    66.         i=0;
    67.         while(dis2!='\0')
    68.         {
    69.                 write_dat(dis2);
    70.                 i++;
    71.         }


    72.         lcd_pos(2,0);//当前水位比
    73.         i=0;
    74.         while(dis3!='\0')
    75.         {
    76.                 write_dat(dis3);
    77.                 i++;
    78.         }


    79.         lcd_pos(3,0);//当前功能显示区
    80.         i=0;
    81.         while(dis1!='\0')
    82.         {
    83.                 write_dat(dis1);
    84.                 i++;
    85.         }

    86.         delay1ms(10);
    87.         while(1)
    88.         {
    89.                 /*if(Low==1)
    90.                 {
    91.                         LOW=1;
    92.                 }
    93.                 else if(Low==0)
    94.                 {
    95.                         LOW=0;
    96.                 }
    97.                 else
    98.                 {
    99.                         LOW=2;
    100.                 }*/
    101.         
    102.                 if(Low==0)//触发模拟自动上水
    103.                 {
    104.                         TR0=1;//开中断
    105.                         write_cmd(0x01);
    106.                         delay1ms(5);
    107.                
    108.                         delay(20);
    109.                         lcd_pos(0,0);
    110.                         i=0;
    111.                         while(dis0!='\0')
    112.                         {
    113.                                 write_dat(dis0);
    114.                                 i++;
    115.                         }
    116.                
    117.                         delay(20);
    118.                         lcd_pos(1,0);
    119.                         i=0;
    120.                         while(dis6!='\0')
    121.                         {
    122.                                 write_dat(dis6);
    123.                                 i++;
    124.                         }
    125.                         
    126.                         delay(20);
    127.                         lcd_pos(2,0);
    128.                         i=0;
    129.                         while(dis13!='\0')
    130.                         {
    131.                                 write_dat(dis13);
    132.                                 i++;
    133.                         }                                          
    134.                         if(water1<=water0)//判断是否上水完毕
    135.                         {                        
    136.                                 lcd_pos(2,6);
    137.                                 write_sfm1(6,water1);                                                         
    138.                                 write_cmd(0x90);
    139.                                 m=0xfe;
    140.                                 P1=m;
    141.                                 delay1ms(500); //延时
    142.                                 m=_crol_(m,1);
    143.                         }
    144.                         else if(water1>water0)
    145.                         {
    146.                                 TR0=0;//关中断
    147.                                 write_cmd(0x01);
    148.                                 delay1ms(5);
    149.                
    150.                                 delay(20);
    151.                                 lcd_pos(0,0);
    152.                                 i=0;
    153.                                 while(dis0!='\0')
    154.                                 {
    155.                                         write_dat(dis0);
    156.                                         i++;
    157.                                 }
    158.                
    159.                                 delay(20);
    160.                                 lcd_pos(1,0);
    161.                                 i=0;
    162.                                 while(dis4!='\0')
    163.                                 {
    164.                                         write_dat(dis4);
    165.                                         i++;
    166.                                 }
    167.                
    168.                                 delay(20);
    169.                                 lcd_pos(2,0);
    170.                                 i=0;
    171.                                 while(dis13!='\0')
    172.                                 {
    173.                                         write_dat(dis13);
    174.                                         i++;
    175.                                 }                                          
    176.                                 lcd_pos(2,6);
    177.                                 write_sfm1(6,water0);                                                         
    178.                                 write_cmd(0x90);                        
    179.                
    180.                                 delay(20);
    181.                                 lcd_pos(3,0);
    182.                                 i=0;
    183.                                 while(dis1!='\0')
    184.                                 {
    185.                                         write_dat(dis1);
    186.                                         i++;
    187.                                 }
    188.                         }
    189.                
    190.                         delay(20);
    191.                         lcd_pos(3,0);
    192.                         i=0;
    193.                         while(dis7!='\0')
    194.                         {
    195.                                 write_dat(dis7);
    196.                                 i++;
    197.                         }
    198.                 }
    199.                 else if(Low==1)//未触发
    200.                 {
    201.                         write_cmd(0x01);
    202.                         delay1ms(5);
    203.                
    204.                         delay(20);
    205.                         lcd_pos(0,0);
    206.                         i=0;
    207.                         while(dis0!='\0')
    208.                         {
    209.                                 write_dat(dis0);
    210.                                 i++;
    211.                         }
    212.                
    213.                         delay(20);
    214.                         lcd_pos(1,0);
    215.                         i=0;
    216.                         while(dis2!='\0')
    217.                         {
    218.                                 write_dat(dis2);
    219.                                 i++;
    220.                         }
    221.                
    222.                         delay(20);
    223.                         lcd_pos(2,0);
    224.                         i=0;
    225.                         while(dis13!='\0')
    226.                         {
    227.                                 write_dat(dis13);
    228.                                 i++;
    229.                         }                                          
    230.                         lcd_pos(2,6);
    231.                         write_sfm1(6,water0);                                                         
    232.                         write_cmd(0x90);
    233.                
    234.                         delay(20);
    235.                         lcd_pos(3,0);
    236.                         i=0;
    237.                         while(dis1!='\0')
    238.                         {
    239.                                 write_dat(dis1);
    240.                                 i++;
    241.                         }
    242.                 }
    243.                 keyscan();
    244.         }
    245. }
    246. void delay1ms(uint x)//延时
    247. {
    248.         uint i,j;
    249.         for(j=0;j<x;j++)
    250.                 for(i=0;i<110;i++);
    251. }
    252. void delay(uchar i)//延时
    253. {
    254.         uchar j,k;
    255.         for(j=i;j>0;j--)
    256.                 for(k=125;k>0;k--);
    257. }
    258. void keyscan()
    259. {
    260.                 col1=1;col2=1;col3=0;col4=1;//上水按键区
    261.                 temp=P2;
    262.                 temp=P2&0x3f;
    263.                 if(col3==0)         
    264.                 {                                                            
    265.                         delay(80);
    266.                         if(temp!=0x3f)
    267.                         {        
    268.                                 temp=P2&0x3c;
    269.                                 switch(temp)
    270.                                 {
    271.                                         case 0x1c:        //进入上水功能界面
    272.                                         counter++;
    273.                                         a=counter%2;
    274.                                                 switch(a)
    275.                                                 {
    276.                                                         case 1:         //第一功能键,显示上水界面


    277.                                                                 write_cmd(0x01);
    278.                                                                 delay1ms(5);


    279.                                                                 delay(20);
    280.                                                                 lcd_pos(0,0);
    281.                                                                 i=0;
    282.                                                                 while(dis0!='\0')
    283.                                                                 {
    284.                                                                         write_dat(dis0);
    285.                                                                         i++;
    286.                                                                 }


    287.                                                                 delay(20);
    288.                                                                 lcd_pos(1,0);
    289.                                                                 i=0;
    290.                                                                 while(dis4!='\0')
    291.                                                                 {
    292.                                                                         write_dat(dis4);
    293.                                                                         i++;
    294.                                                                 }
    295.                
    296.                                                                 delay(20);
    297.                                                                 lcd_pos(2,0);
    298.                                                                 i=0;
    299.                                                                 while(dis12!='\0')
    300.                                                                 {                                                                           
    301.                                                                         write_dat(dis12);
    302.                                                                         i++;
    303.                                                                 }


    304.                                                                 delay(20);
    305.                                                                 lcd_pos(3,0);
    306.                                                                 i=0;
    307.                                                                 while(dis1!='\0')
    308.                                                                 {
    309.                                                                         write_dat(dis1);
    310.                                                                         i++;
    311.                                                                 }
    312.                                                                 break;


    313.                                                         case 0:           //第二功能键,开始上水


    314.                                                                 TR0=1;
    315.                                                                 write_cmd(0x01);
    316.                                                                 delay1ms(5);


    317.                                                                 delay(20);
    318.                                                                 lcd_pos(0,0);
    319.                                                                 i=0;
    320.                                                                 while(dis0!='\0')
    321.                                                                 {
    322.                                                                         write_dat(dis0);
    323.                                                                         i++;
    324.                                                                 }


    325.                                                                 delay(20);
    326.                                                                 lcd_pos(1,0);
    327.                                                                 i=0;
    328.                                                                 while(dis6!='\0')
    329.                                                                 {
    330.                                                                         write_dat(dis6);
    331.                                                                         i++;
    332.                                                                 }
    333.                                                                                          
    334.                                                                 delay(20);
    335.                                                                 lcd_pos(2,0);
    336.                                                                 i=0;
    337.                                                                 while(dis13!='\0')
    338.                                                                 {
    339.                                                                         write_dat(dis13);
    340.                                                                         i++;
    341.                                                                 }                                          
    342.                                                                 lcd_pos(2,6);
    343.                                                                 write_sfm1(6,water1);                                                         
    344.                                                                 write_cmd(0x90);


    345.                                                                 delay(20);
    346.                                                                 lcd_pos(3,0);
    347.                                                                 i=0;
    348.                                                                 while(dis7!='\0')
    349.                                                                 {
    350.                                                                         write_dat(dis7);
    351.                                                                         i++;
    352.                                                                 }
    353.                                                                 if(water1<=water0)
    354.                                                                 {
    355.                                                                         m=0xfe;
    356.                                                                         P1=m;
    357.                                                                         delay1ms(500); //延时
    358.                                                                         m=_crol_(m,1);
    359.                                                                 }
    360.                                                                 else
    361.                                                                 {
    362.                                                                         TR0=0;
    363.                                                                 }
    364.                                                             break;
    365.                                                 }


    366.                                                 counter=0;
    367.                                                 write_cmd(0x01);
    368.                                                 delay1ms(5);


    369.                                                 delay(20);
    370.                                                 lcd_pos(0,0);
    371.                                                 i=0;
    372.                                                 while(dis0!='\0')
    373.                                                 {
    374.                                                         write_dat(dis0);
    375.                                                         i++;
    376.                                                 }


    377.                                                 delay(20);
    378.                                                 lcd_pos(1,0);
    379.                                                 i=0;
    380.                                                 while(dis2!='\0')
    381.                                                 {
    382.                                                         write_dat(dis2);
    383.                                                         i++;
    384.                                                 }


    385.                                                 delay(20);
    386.                                                 lcd_pos(2,0);
    387.                                                 i=0;
    388.                                                 while(dis13!='\0')
    389.                                                 {
    390.                                                         write_dat(dis13);
    391.                                                         i++;                                          
    392.                                                 }                                          
    393.                                                 lcd_pos(2,6);
    394.                                                 write_sfm1(6,water0);                                                         
    395.                                                 write_cmd(0x90);        


    396.                                                 delay(20);
    397.                                                 lcd_pos(3,0);
    398.                                                 i=0;
    399.                                                 while(dis1!='\0')
    400.                                                 {
    401.                                                         write_dat(dis1);
    402.                                                         i++;
    403.                                                 }
    404.                                                 break;
    405.                                 
    406.                                         case 0x2c:        //增加水位比


    407.                                                         _Speak=0;
    408.                                                         delay1ms(40);
    409.                                                         _Speak=1;


    410.                                                         write_cmd(0x01);
    411.                                                         delay1ms(5);                                         
    412.         
    413.                                                         delay(20);
    414.                                                         lcd_pos(0,0);
    415.                                                         i=0;
    416.                                                         while(dis0!='\0')
    417.                                                         {
    418.                                                                 write_dat(dis0);
    419.                                                                 i++;
    420.                                                         }
    421.         
    422.                                                         delay(20);
    423.                                                         lcd_pos(1,0);
    424.                                                         i=0;
    425.                                                         while(dis4!='\0')
    426.                                                         {
    427.                                                                 write_dat(dis4);
    428.                                                                 i++;
    429.                                                         }
    430.         
    431.                                                         delay(20);
    432.                                                         lcd_pos(2,0);
    433.                                                         i=0;
    434.                                                         while(dis12!='\0')
    435.                                                         {
    436.                                                                 write_dat(dis12);
    437.                                                                 i++;
    438.                                                         }                                          
    439.                                                         lcd_pos(2,6);
    440.                                                         water1++;
    441.                                                         if(water1==100)
    442.                                                         {
    443.                                                                 water1=99;
    444.                                                                 _Speak=0;
    445.                                                                 delay1ms(100);
    446.                                                                 _Speak=1;
    447.                                                                 P1=0x00;
    448.                                                                 delay1ms(100);
    449.                                                                 P1=0xff;
    450.                                                         }
    451.                                                         write_sfm1(6,water1);                                                         


    452.                                                         delay(20);
    453.                                                         lcd_pos(3,0);                                                                                
    454.                                                         i=0;
    455.                                                         while(dis1!='\0')
    456.                                                         {
    457.                                                                 write_dat(dis1);
    458.                                                                 i++;
    459.                                                         }
    460.                                                         break;        


    461.                                         case 0x34:  //降低水位比


    462.                                                 _Speak=0;
    463.                                                 delay1ms(40);
    464.                                                 _Speak=1;


    465.                                                  write_cmd(0x01);
    466.                                                 delay1ms(5);                  


    467.                                                 delay(20);
    468.                                                 lcd_pos(0,0);
    469.                                                 i=0;
    470.                                                 while(dis0!='\0')
    471.                                                 {
    472.                                                         write_dat(dis0);
    473.                                                         i++;
    474.                                                 }


    475.                                                 delay(20);
    476.                                                 lcd_pos(1,0);
    477.                                                 i=0;
    478.                                                 while(dis4!='\0')
    479.                                                 {
    480.                                                         write_dat(dis4);
    481.                                                         i++;
    482.                                                 }


    483.                                                 delay(20);
    484.                                                 lcd_pos(2,0);
    485.                                                 i=0;
    486.                                                 while(dis12!='\0')
    487.                                                 {
    488.                                                         write_dat(dis12);
    489.                                                         i++;
    490.                                                 }                                          
    491.                                                 lcd_pos(2,6);
    492.                                                 water1--;
    493.                                                 if(water1==0)
    494.                                                 {
    495.                                                         water1=1;
    496.                                                         _Speak=0;
    497.                                                         delay1ms(100);
    498.                                                         _Speak=1;
    499.                                                         P1=0x00;
    500.                                                         delay1ms(100);
    501.                                                         P1=0xff;
    502.                                                 }
    503.                                                 write_sfm1(6,water1);                                                         
    504.                                                 write_cmd(0x88);


    505.                                                 delay(20);
    506.                                                 lcd_pos(3,0);
    507.                                                 i=0;
    508.                                                 while(dis1!='\0')
    509.                                                 {
    510.                                                         write_dat(dis1);
    511.                                                         i++;
    512.                                                 }
    513.                                                 break;


    514.                                         case 0x38: //退出键以及上水中止键


    515.                                                 TR0=0;
    516.                                                 counter=0;
    517.                                                 write_cmd(0x01);
    518.                                                 delay1ms(5);


    519.                                                 delay(20);
    520.                                                 lcd_pos(0,0);
    521.                                                 i=0;
    522.                                                 while(dis0!='\0')
    523.                                                 {
    524.                                                         write_dat(dis0);
    525.                                                         i++;
    526.                                                 }


    527.                                                 delay(20);
    528.                                                 lcd_pos(1,0);
    529.                                                 i=0;
    530.                                                 while(dis2!='\0')
    531.                                                 {
    532.                                                         write_dat(dis2);
    533.                                                         i++;
    534.                                                 }


    535.                                                 if(a==1)
    536.                                                 {
    537.                                                         delay(20);
    538.                                                         lcd_pos(2,0);
    539.                                                         i=0;
    540.                                                         while(dis3!='\0')           
    541.                                                         {
    542.                                                                 write_dat(dis3);
    543.                                                                 i++;
    544.                                                         }
    545.                                                 }
    546.                                                 else if(a==0)
    547.                                                 {
    548.                                                         delay(20);
    549.                                                         lcd_pos(2,0);
    550.                                                         i=0;
    551.                                                         while(dis13!='\0')
    552.                                                         {
    553.                                                                 write_dat(dis13);
    554.                                                                 i++;                                          
    555.                                                         }                                          
    556.                                                         lcd_pos(2,6);
    557.                                                         write_sfm1(6,water1);                                                         
    558.                                                         write_cmd(0x90);        
    559.                                                 }


    560.                                                 delay(20);
    561.                                                 lcd_pos(3,0);
    562.                                                 i=0;
    563.                                                 while(dis1!='\0')
    564.                                                 {
    565.                                                         write_dat(dis1);
    566.                                                         i++;
    567.                                                 }
    568.                                                 P1=0xff;
    569.                                                 break;
    570.                                 }
    571.                         }
    572.                 }

    573.                 col1=1;col2=1;col3=1;col4=0; //加热按键区
    574.                 temp=P2;
    575.                 temp=P2&0x3f;
    576.                 if(col4==0)
    577.                 {                                 
    578.                         delay(80);
    579.                         if(temp!=0x3f)
    580.                         {                                                                        
    581.                                 temp=P2&0x3c;
    582.                                 switch(temp)
    583.                                 {
    584.                                         case 0x1c:        //进入加热功能界面
    585.                                         counter1++;
    586.                                         b=counter1%2;
    587.                                                 switch(b)
    588.                                                 {
    589.                                                         case 1:         //第一功能键,显示加热界面

    590.                                                                 write_cmd(0x01);
    591.                                                                 delay1ms(5);

    592.                                                                 delay(20);
    593.                                                                 lcd_pos(0,0);
    594.                                                                 i=0;
    595.                                                                 while(dis0!='\0')
    596.                                                                 {
    597.                                                                         write_dat(dis0);
    598.                                                                         i++;
    599.                                                                 }

    600.                                                                 delay(20);
    601.                                                                 lcd_pos(1,0);
    602.                                                                 i=0;
    603.                                                                 while(dis9!='\0')
    604.                                                                 {
    605.                                                                         write_dat(dis9);
    606.                                                                         i++;
    607.                                                                 }
    608.                
    609.                                                                 delay(20);
    610.                                                                 lcd_pos(2,0);
    611.                                                                 i=0;
    612.                                                                 while(dis8!='\0')
    613.                                                                 {
    614.                                                                         write_dat(dis8);
    615.                                                                         i++;
    616.                                                                 }

    617.                                                                 delay(20);
    618.                                                                 lcd_pos(3,0);
    619.                                                                 i=0;
    620.                                                                 while(dis1!='\0')
    621.                                                                 {
    622.                                                                         write_dat(dis1);
    623.                                                                         i++;
    624.                                                                 }
    625.                                                                 break;

    626.                                                         case 0:           //第二功能键,开始加热

    627.                                                                 write_cmd(0x01);
    628.                                                                 delay1ms(5);

    629.                                                                 delay(20);
    630.                                                                 lcd_pos(0,0);
    631.                                                                 i=0;
    632.                                                                 while(dis0!='\0')
    633.                                                                 {
    634.                                                                         write_dat(dis0);
    635.                                                                         i++;
    636.                                                                 }

    637.                                                                 delay(20);
    638.                                                                 lcd_pos(1,0);
    639.                                                                 i=0;
    640.                                                                 while(dis2!='\0')
    641.                                                                 {
    642.                                                                         write_dat(dis2);
    643.                                                                         i++;
    644.                                                                 }
    645.                
    646.                                                                 delay(20);
    647.                                                                 lcd_pos(2,0);
    648.                                                                 i=0;
    649.                                                                 while(dis10!='\0')
    650.                                                                 {
    651.                                                                         write_dat(dis10);
    652.                                                                         i++;
    653.                                                                 }

    654.                                                                 delay(20);
    655.                                                                 lcd_pos(3,0);
    656.                                                                 i=0;
    657.                                                                 while(dis11!='\0')
    658.                                                                 {
    659.                                                                         write_dat(dis11);
    660.                                                                         i++;
    661.                                                                 }
    662.                                                                 break;
    663.                                                 }
    664.                                                 break;
    665.                                 
    666.                                         case 0x2c:        //提高温度
    667.                                 
    668.                                                 write_cmd(0x01);
    669.                                                 delay1ms(5);

    670.                                                 delay(20);
    671.                                                 lcd_pos(0,0);
    672.                                                 i=0;
    673.                                                 while(dis0!='\0')
    674.                                                 {
    675.                                                         write_dat(dis0);
    676.                                                         i++;
    677.                                                 }

    678.                                                 delay(20);
    679.                                                 lcd_pos(1,0);
    680.                                                 i=0;
    681.                                                 while(dis9!='\0')
    682.                                                 {
    683.                                                         write_dat(dis9);
    684.                                                         i++;
    685.                                                 }

    686.                                                 delay(20);
    687.                                                 lcd_pos(2,0);
    688.                                                 i=0;
    689.                                                 while(dis8!='\0')
    690.                                                 {
    691.                                                         write_dat(dis8);
    692.                                                         i++;
    693.                                                 }

    694.                                                 delay(20);
    695.                                                 lcd_pos(3,0);
    696.                                                 i=0;
    697.                                                 while(dis1!='\0')
    698.                                                 {
    699.                                                         write_dat(dis1);
    700.                                                         i++;
    701.                                                 }
    702.                                                 break;

    703.                                         case 0x34:  //降低温度

    704.                                                 write_cmd(0x01);
    705.                                                 delay1ms(5);

    706.                                                 delay(20);
    707.                                                 lcd_pos(0,0);
    708.                                                 i=0;
    709.                                                 while(dis0!='\0')
    710.                                                 {
    711.                                                         write_dat(dis0);
    712.                                                         i++;
    713.                                                 }

    714.                                                 delay(20);
    715.                                                 lcd_pos(1,0);
    716.                                                 i=0;
    717.                                                 while(dis9!='\0')
    718.                                                 {
    719.                                                         write_dat(dis9);
    720.                                                         i++;
    721.                                                 }

    722.                                                 delay(20);
    723.                                                 lcd_pos(2,0);
    724.                                                 i=0;
    725.                                                 while(dis8!='\0')
    726.                                                 {
    727.                                                         write_dat(dis8);
    728.                                                         i++;
    729.                                                 }

    730.                                                 delay(20);
    731.                                                 lcd_pos(3,0);
    732.                                                 i=0;
    733.                                                 while(dis1!='\0')
    734.                                                 {
    735.                                                         write_dat(dis1);
    736.                                                         i++;
    737.                                                 }
    738.                                                 break;

    739.                                         case 0x38: //退出键以及加热中止键

    740.                                                 write_cmd(0x01);
    741.                                                 delay1ms(5);

    742.                                                 delay(20);
    743.                                                 lcd_pos(0,0);
    744.                                                 i=0;
    745.                                                 while(dis0!='\0')
    746.                                                 {
    747.                                                         write_dat(dis0);
    748.                                                         i++;
    749.                                                 }

    750.                                                 delay(20);
    751.                                                 lcd_pos(1,0);
    752.                                                 i=0;
    753.                                                 while(dis2!='\0')
    754.                                                 {
    755.                                                         write_dat(dis2);
    756.                                                         i++;
    757.                                                 }

    758.                                                 delay(20);
    759.                                                 lcd_pos(2,0);
    760.                                                 i=0;
    761.                                                 while(dis3!='\0')
    762.                                                 {
    763.                                                         write_dat(dis3);
    764.                                                         i++;
    765.                                                 }

    766.                                                 delay(20);
    767.                                                 lcd_pos(3,0);
    768.                                                 i=0;
    769.                                                 while(dis1!='\0')
    770.                                                 {
    771.                                                         write_dat(dis1);
    772.                                                         i++;
    773.                                                 }
    774.                                                 break;
    775.                                 }
    776.                         }
    777.                 }
    778.                 while(temp!=0x3c)
    779.                 {
    780.                         temp=P2;
    781.                         temp=temp&0x3c;        
    782.                 }
    783. }
    784. bit lcd_busy()//检测忙状态
    785. {                          
    786.     bit result;
    787.     LCD_RS = 0;
    788.     LCD_EN = 1;
    789.     delayNOP();
    790.     result = (bit)(P0&0x80);
    791.     LCD_EN = 0;
    792.     return(result);
    793. }

    794. void write_cmd(uchar cmd)//写指令数据到LCD
    795. {
    796.          LCD_RS=0;
    797.         LCD_RW=0;
    798.         LCD_EN=0;
    799.         P0=cmd;
    800.         delay1ms(5);
    801.         LCD_EN=1;
    802.         delay1ms(5);
    803.         LCD_EN=0;
    804. }
    805. void write_dat(uchar dat)//写显示数据到LCD
    806. {
    807.         LCD_RS=1;
    808.         LCD_RW=0;
    809.         LCD_EN=0;
    810.         P0=dat;
    811.         delay1ms(5);
    812.         LCD_EN=1;
    813.         delay1ms(5);
    814.         LCD_EN=0;
    815. }
    816. void lcd_pos(uchar X,uchar Y)//设定显示位置
    817. {
    818.         uchar pos;
    819.         if(X==0)
    820.         {X=0x80;}
    821.         else if(X==1)
    822.         {X=0x90;}
    823.         else if(X==2)
    824.         {X=0x88;}
    825.         else if(X==3)
    826.         {X=0x98;}
    827.         pos=X+Y;
    828.         write_cmd(pos);
    829. }
    830. void write_sfm1(uchar add,uchar date)//显示数据1,中断外部使用
    831. {
    832.         uchar shi,ge;
    833.         shi=date/10;
    834.         ge=date%10;                                       

    835.         write_cmd(0x88+add);

    836.         write_dat(0x30+shi);
    837.         write_dat(0x30+ge);
    838. }
    839. void lcd_init()//LCD初始化
    840. {
    841.         LCD_PSB=1;
    842.         write_cmd(0x30);
    843.         delay1ms(5);
    844.         write_cmd(0x0c);
    845.         delay1ms(5);
    846.         write_cmd(0x01);
    847.         delay1ms(5);
    848.         write_cmd(0x38);
    849.         delay1ms(5);
    850. }
    851. void Time0(void) interrupt 1 using 0
    852. {
    853.         TH0=(65536-46080)/256;
    854.         TL0=(65536-46080)%256;
    855.         delay1ms(4950);
    856.         water1++;
    857. }
    复制代码



    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2018-5-21 10:09
  • 4

    主题

    15

    帖子

    85

    积分

    菜鸟程序猿

    Rank: 2

    积分
    85
    发表于 2018-2-3 12:07:29 | 显示全部楼层
    应该在51的版块问,这里都是玩树莓派的
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

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