找回密码
 立即注册

QQ登录

只需一步,快速开始

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

大神可否指点一下我的lcd仿真出现的问题

[复制链接]
跳转到指定楼层
楼主

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit RS = P2^0;  
  6. sbit RW = P2^1;
  7. sbit EN = P2^2;

  8. sbit k1=P3^2;
  9. sbit k2=P3^3;
  10. sbit k3=P3^4;
  11. sbit k4=P3^5;
  12. sbit k5=P3^6;//加速
  13. //sbit k6=P3^7;//减速

  14. sbit DQ = P3^7;

  15. sbit motor1_run = P2^3;
  16. sbit motor2_r   = P2^4;
  17. sbit motor2_l   = P2^5;


  18. sbit IN1 = P2^6;
  19. sbit IN2 = P2^7;

  20. unsigned int temp;                       

  21. unsigned char code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

  22. unsigned char code table1[] = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};




  23. #define st_mo  P1

  24. #define RS_CLR RS=0
  25. #define RS_SET RS=1

  26. #define RW_CLR RW=0
  27. #define RW_SET RW=1

  28. #define EN_CLR EN=0
  29. #define EN_SET EN=1

  30. #define DataPort P0
  31. #define KeyPort P3

  32. uchar code start[]="open";
  33. uchar code close[]="stop";
  34. uchar ccw[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; //
  35. uchar cw[]={0x09,0x01,0x03,0x02,0x06,0x04,0x0c,0x08}; //


  36. uchar i;

  37. uint value_h=320;
  38. uint value_l=200;

  39. uchar PWM=180;

  40. uint temp_data,temp_data2;

  41. /*------------------------------------------------

  42. ------------------------------------------------*/
  43. void DelayUs2x(uchar t)
  44. {   
  45. while(--t);
  46. }

  47. /*------------------------------------------------

  48. ------------------------------------------------*/
  49. void delay(unsigned char t)
  50. {
  51.     while(t--)   ;
  52. }

  53. void delayms(unsigned char ms)

  54. {
  55.     unsigned char i ;
  56.     while(ms--)
  57.      {
  58.         for(i = 0 ; i < 120 ; i++) ;
  59.      }
  60. }
  61. void ccw_motor()                      //逆时针旋转
  62. {  
  63.     uchar i;  
  64.     for(i=0;i<8;i++)
  65.         {   
  66.             for(i=0;i<8;i++)   
  67.                {   
  68.                    st_mo=ccw[i];   
  69.            delay(500);   
  70.         }  
  71.         }
  72. }

  73. void cw_motor()                     //顺时针旋转
  74. {  
  75.    uchar i;  
  76.    for(i=0;i<8;i++)
  77.       {   
  78.         for(i=0;i<8;i++)   
  79.          {   
  80.            st_mo=cw[i];   
  81.            delay(500);   
  82.          }  
  83.       }
  84. }
  85. /*------------------------------------------------
  86.          
  87. ------------------------------------------------*/
  88. bit LCD_Check_Busy(void)   //检查忙标志位函数(LCD)
  89. {
  90. DataPort= 0xFF;                                //DataPort为单位变量,初始值为0xFF
  91. RS_CLR;
  92. RW_SET;
  93. EN_CLR;
  94. _nop_();                                            //空操作,给硬件反应时间
  95. EN_SET;
  96. return (bit)(DataPort & 0x80);          //如果忙标志位BF=1,回到bit
  97. }
  98. /*------------------------------------------------
  99.               
  100. ------------------------------------------------*/
  101. void LCD_Write_Com(uchar com)
  102. {  
  103. while(LCD_Check_Busy());
  104. RS_CLR;
  105. RW_CLR;
  106. EN_SET;
  107. DataPort= com;
  108. _nop_();
  109. EN_CLR;
  110. }
  111. /*------------------------------------------------
  112.               
  113. ------------------------------------------------*/
  114. void LCD_Write_Data(uchar Data)        //写数据函数
  115. {
  116. while(LCD_Check_Busy());
  117. RS_SET;
  118. RW_CLR;
  119. EN_SET;
  120. DataPort= Data;
  121. _nop_();
  122. EN_CLR;
  123. }

  124. /*------------------------------------------------
  125.               
  126. ------------------------------------------------*/
  127. void LCD_Clear(void)                         //清屏
  128. {
  129. LCD_Write_Com(0x01);
  130. delayms(5);
  131. }
  132. /*------------------------------------------------
  133.             
  134. ------------------------------------------------*/
  135. void LCD_Write_String(uchar x,uchar y,uchar *s)    //显示字符串
  136. {     
  137. if (y == 0)
  138.         {     
  139.          LCD_Write_Com(0x80 + x);  
  140.         }
  141. else
  142.         {      
  143.         LCD_Write_Com(0xC0 + x);      
  144.         }        
  145. while (*s)
  146.         {     
  147. LCD_Write_Data( *s);     
  148. s ++;     
  149.         }
  150. }
  151. /*------------------------------------------------
  152.             
  153. ------------------------------------------------*/
  154. void LCD_Write_Char(uchar x,uchar y,uchar Data)
  155. {     
  156. if (y == 0)
  157.         {     
  158.         LCD_Write_Com(0x80 + x);     
  159.         }   
  160. else
  161.         {     
  162.         LCD_Write_Com(0xC0 + x);     
  163.         }        
  164. LCD_Write_Data( Data);  
  165. }

  166. /*------------------------------------------------
  167.             
  168. ------------------------------------------------*/
  169. void LCD_Init(void)
  170. {
  171.    LCD_Write_Com(0x38);     
  172.    delayms(5);
  173.    LCD_Write_Com(0x38);
  174.    delayms(5);
  175.    LCD_Write_Com(0x38);
  176.    delayms(5);
  177.    LCD_Write_Com(0x38);  
  178.    LCD_Write_Com(0x08);   
  179.    LCD_Write_Com(0x01);   
  180.    LCD_Write_Com(0x06);   
  181.    delayms(5);
  182.    LCD_Write_Com(0x0C);   
  183.    }
  184. unsigned char KeyScan(void)
  185. {
  186. unsigned char keyvalue;
  187. if(KeyPort!=0xff)
  188.    {
  189.     delayms(10);
  190.     if(KeyPort!=0xff)
  191.            {
  192.             keyvalue=KeyPort;
  193.             while(KeyPort!=0xff);
  194.                 switch(keyvalue)
  195.                 {
  196.                  case 0xfe:return 1;break;
  197.                  case 0xfd:return 2;break;
  198.                  case 0xfb:return 3;break;
  199.                  case 0xf7:return 4;break;
  200.                  case 0xef:return 5;break;
  201.                  case 0xdf:return 6;break;
  202.                  case 0xbf:return 7;break;
  203.                  case 0x7f:return 8;break;
  204.                  default:return 0;break;
  205.                 }
  206.           }
  207.    }
  208.    return 0;
  209. }
  210. /*****************DS18B20******************/
  211.   void Init_Ds18b20(void)     
  212.   {
  213.   DQ = 1;                    
  214.   delay(1);               
  215.   DQ = 0;                  
  216.   delay(250);               
  217.   DQ = 1;                    
  218.   delay(100);               
  219.   }
  220.   uchar Read_One_Byte()      
  221.   
  222.   {
  223.   uchar i   = 0;
  224.   uchar dat = 0;
  225.   for(i=8;i>0;i--)
  226.   {
  227.   DQ = 0;                  
  228.   
  229.   _nop_();               
  230.   dat >>= 1;               
  231.   DQ = 1;                  
  232.   delay(1);                 
  233.   if(DQ)                  
  234.   {
  235.   dat |= 0x80;           
  236.   }
  237.   delay(10);               
  238.   }
  239.   return (dat);
  240.   }
  241. void Write_One_Byte(uchar dat)
  242.   {
  243.   uchar i = 0;
  244.   for(i=8;i>0;i--)
  245.   {
  246.   DQ = 0;                       
  247.   _nop_();                     
  248.   DQ = dat&0x01;                 

  249.   delay(10);                    
  250.   DQ = 1;                       
  251.   dat >>= 1;
  252.   delay(1);
  253.   }
  254.   }
  255. uint Get_Tmp()               
  256.   {
  257.   float tt;
  258.   uchar a,b;
  259.   Init_Ds18b20();               
  260.   Write_One_Byte(0xcc);         
  261.   Write_One_Byte(0x44);         
  262.   Init_Ds18b20();               
  263.   Write_One_Byte(0xcc);         
  264.   Write_One_Byte(0xbe);         
  265.   a = Read_One_Byte();           
  266.   b = Read_One_Byte();           
  267.   temp = b;                     
  268.   temp <<= 8;                    
  269.   temp = temp|a;               
  270.   tt = temp*0.0625;            

  271.   temp = tt*10+0.5;            

  272.   return temp;
  273.   }

  274. void timer0() interrupt 1
  275. {
  276.     TR1=0 ;
  277.     TH0=0x9f ;
  278.     TL0=0xce ;
  279.     TH1=PWM ;
  280.     TR1=1 ;
  281.     IN1=0 ;
  282.     IN2=0 ;       
  283. }
  284. void timer1() interrupt 3
  285. {
  286.     TR1=0 ;
  287.     IN1=1 ;     
  288.           IN2=0 ;
  289.        
  290. }
  291. /*------------------------------------------------
  292.                  
  293. ------------------------------------------------*/
  294. void main(void)
  295. {
  296.                 uchar num;
  297.                 LCD_Init();
  298.                 LCD_Clear();
  299. //temperature

  300.           LCD_Write_Char(0,0,'T');LCD_Write_Char(1,0,':');LCD_Write_Char(4,0,0x2e);LCD_Write_Char(6,0,0xdf);
  301.           LCD_Write_Char(7,0,'W');LCD_Write_Char(8,0,':');
  302.           LCD_Write_Char(0,2,'H');LCD_Write_Char(1,2,':');LCD_Write_Char(4,2,0x2e);LCD_Write_Char(6,2,0xdf);
  303.           LCD_Write_Char(7,2,'D');LCD_Write_Char(8,2,':');LCD_Write_Char(11,2,0x2e);LCD_Write_Char(13,2,0xdf);
  304.           
  305.           
  306.        
  307.     IN1=0;
  308.           IN2=0;
  309.     //TMOD=0x21 ;
  310.           TMOD=0x11 ;
  311.     //TH0=0xff ;           
  312.     //TL0=0xce ;            
  313.                 TH0=0x9f ;           
  314.     TL0=0xce ;
  315.     TH1=PWM ;         
  316.     TL1=0 ;


  317.                 while(1)
  318.                 {
  319.                                 //delayms(200);
  320.                           temp_data=Get_Tmp();   //PWM温度调速
  321.                         if(temp_data>value_h){temp_data2=value_h;}
  322.                         else if(temp_data<value_l){temp_data2=value_l;}
  323.                         else{temp_data2=temp_data;}
  324.                        
  325.                         if((temp_data2>220) && (temp_data2<230)){PWM=165;}
  326.                         if((temp_data2>230) && (temp_data2<240)){PWM=170;}
  327.                         if((temp_data2>240) && (temp_data2<250)){PWM=175;}
  328.                         if((temp_data2>250) && (temp_data2<260)){PWM=180;}
  329.                         if((temp_data2>260) && (temp_data2<270)){PWM=185;}
  330.             if((temp_data2<280) && (temp_data2>270)){PWM=190;}
  331.                         if((temp_data2<290) && (temp_data2>280)){PWM=195;}
  332.                         if((temp_data2<300) && (temp_data2>290)){PWM=200;}
  333.                         if((temp_data2<310) && (temp_data2>300)){PWM=210;}
  334.                         if((temp_data2<320) && (temp_data2>310)){PWM=220;}
  335.                         LCD_Write_Com(0xc2);
  336.                         LCD_Write_Data(value_h/100+0x30);
  337.                         LCD_Write_Com(0xc3);
  338.                         LCD_Write_Data(((value_h/10)%10)+0x30);
  339.                         LCD_Write_Com(0xc5);
  340.                         LCD_Write_Data(value_h%10+0x30);
  341.                        
  342.                         LCD_Write_Com(0xc9);
  343.                         LCD_Write_Data(value_l/100+0x30);
  344.                         LCD_Write_Com(0xca);
  345.                         LCD_Write_Data(((value_l/10)%10)+0x30);
  346.                         LCD_Write_Com(0xcc);
  347.                         LCD_Write_Data(value_l%10+0x30);
  348.                                
  349.                         LCD_Write_Com(0x8d);
  350.                         LCD_Write_Data(PWM/100+0x30);
  351.                         LCD_Write_Com(0x8e);
  352.                         LCD_Write_Data((PWM/10)%10+0x30);
  353.                         LCD_Write_Com(0x8f);
  354.                         LCD_Write_Data(PWM%10+0x30);
  355.                                
  356.                         LCD_Write_Com(0x82);
  357.                         LCD_Write_Data(temp_data2/100+0x30);
  358.                         LCD_Write_Com(0x83);
  359.                         LCD_Write_Data(((temp_data2/10)%10)+0x30);
  360.                         LCD_Write_Com(0x85);
  361.                         LCD_Write_Data((temp_data2%10)+0x30);
  362.                                 if(motor1_run==0)
  363.                                 {
  364.                                     EA=1;
  365.                                     ET0=1;
  366.                                     ET1=1;
  367.                                     TR0=1 ;
  368.                                           LCD_Write_String(9,0,start);
  369.                                 }
  370.                                 else
  371.                                 {
  372.                                     EA=0;
  373.                                     ET0=0;
  374.                                     ET1=0;
  375.                                     TR0=0 ;
  376.                                           IN1=0 ;
  377.                                                                                   IN2=0 ;
  378.                                           LCD_Write_String(9,0,close);
  379.                                 }
  380.                                 if((motor2_l==0)&&(motor2_r==1))                             //顺时针程序
  381.                                 {   
  382.                                                 for(num=0;num<10;num++)   
  383.                                                 {     
  384.                                                                 cw_motor();   
  385.                                                 }
  386.                                 }
  387.                                 if((motor2_l==1)&&(motor2_r==0))                            //逆时针程序
  388.                                 {   
  389.                                                 for(num=0;num<10;num++)   
  390.                                                 {     
  391.                                                                 ccw_motor();   
  392.                                                 }
  393.                                 }
  394.                                 if(k1==0)   
  395.                                 {   
  396.                                                 delayms(50);
  397.                                           if(k1==0)   
  398.                                     {
  399.                                               value_h++;
  400.                 if(value_h>600){value_h=0;}
  401.                                                 }
  402.                                 }
  403.                                 if(k2==0)   
  404.                                 {   
  405.                                                 delayms(50);
  406.                                           if(k2==0)   
  407.                                     {
  408.                                              value_h--;
  409.                                              if(value_h<0){value_h=600;}
  410.                                                 }
  411.                                 }
  412.                                 if(k3==0)   
  413.                                 {   
  414.                                                 delayms(50);
  415.                                           if(k3==0)   
  416.                                     {
  417.                                               value_l++;
  418.                 if(value_l>500){value_l=0;}
  419.                                                 }
  420.                                 }
  421.                                 if(k4==0)   
  422.                                 {   
  423.                                                 delayms(50);
  424.                                           if(k4==0)   
  425.                                     {   
  426.                                                     
  427.                                                                 value_l--;
  428.                                                                 if(value_l<0){value_l=500;}
  429.                                                 }
  430.                                 }
  431.                                 if(k5==0)   
  432.                                 {   
  433.                                                 delayms(50);
  434.                                           if(k5==0)   
  435.                                     {
  436.                                                    PWM=PWM+10 ;
  437.                                                    if(PWM>255){PWM=150;}
  438.                                           }
  439.                                 }
  440. //                                if(k6==0)   
  441. //                                {   
  442. //                                        delayms(20);
  443. //                                        if(k6==0)   
  444. //                                        {  
  445. //                                                PWM=PWM-10 ;
  446. //                                                if(PWM<150){PWM=150;}       
  447. //                                        }
  448. //                                }
  449.                 }
  450. }
复制代码



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:96682 发表于 2021-11-25 20:07 来自手机 | 只看该作者
这代码是拼凑出来能不出问题么?
回复

使用道具 举报

板凳
ID:908826 发表于 2021-11-25 20:49 | 只看该作者
兄弟,建议你模块化编程,这样太乱了
回复

使用道具 举报

地板
ID:161164 发表于 2021-11-25 22:17 | 只看该作者
132,145行注释掉
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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