找回密码
 立即注册

QQ登录

只需一步,快速开始

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

这个程序要怎么改,才有真正的结果

[复制链接]
跳转到指定楼层
楼主
100黑币
我按照教材连得图和打得程序,结果仿真结果是液晶屏里在不停的跳动



  1. #include<reg51.h>
  2. #include<math.h>
  3. #define uchar unsigned char
  4. #define uint   unsigned int                             
  5. #define lcd_data P0         
  6. sbit DQ = P1^7;                                                
  7. sbit lcd_RS=P2^0;                                                               
  8. sbit lcd_RW=P2^1;                                                        
  9. sbit lcd_EN=P2^2;                                       
  10. sbit PWM=P3^7;                                             
  11. sbit D=P3^6;                                   
  12. uchar t[2],speed,temperature;                                                                                 
  13. uchar DS18B20_is_ok;                                                
  14. uchar TempBuffer1[12]={0x20,0x20,0x20,0x20,0xdf,0x43,'\0'};
  15. uchar tab[16]={0x20,0x20,0x20,0x54,0x20,0x4d,0x6f,0x6e,0x69,0x74,0x6f,0x72,'\0'};                                                                                                                                                                                                   
  16. /*********LCD显示子程序**********/
  17. void delay_20ms(void)
  18. {
  19.     uint i,temp;
  20.     for(i=20;i>0;i--)
  21.     {
  22.       temp=248;
  23.           while(--temp);
  24.           temp=248;
  25.           while(--temp);
  26.     }
  27. }   
  28. void delay_38us(void)
  29. {
  30.    uchar temp;
  31.    temp=18;
  32.    while(--temp);  
  33. }
  34. void delay_1520us(void)
  35. {
  36.     uint i,temp;
  37.         for(i=3;i>0;i--)
  38.         {
  39.          temp=252;
  40.           while(--temp);
  41.     }
  42. }
  43. uchar lcd_rd_status()
  44. {
  45.    uchar tmp_sts;
  46.    lcd_data=0xff;
  47.    lcd_RW=1;
  48.    lcd_RS=0;
  49.    lcd_EN=1;

  50.    tmp_sts=lcd_data;
  51.     lcd_EN=0;
  52.         lcd_RW=0;
  53.         return tmp_sts;
  54. }
  55. void lcd_wr_com(uchar command)
  56. {   
  57. while(0x80&lcd_rd_status());
  58. lcd_RW=0;
  59. lcd_RS=0;
  60. lcd_data=command;
  61. lcd_EN=1;
  62. lcd_EN=0;        
  63. }
  64. void lcd_wr_data(uchar sjdata)
  65. {
  66.    while(0x80&lcd_rd_status());
  67. lcd_RW=0;
  68. lcd_RS=1;
  69. lcd_data=sjdata;
  70. lcd_EN=1;
  71. lcd_EN=0;
  72. lcd_RS=0;
  73. }
  74. void Init_lcd(void)
  75. {
  76.    delay_20ms();
  77.    lcd_wr_com(0x38);
  78.    delay_38us();
  79.    lcd_wr_com(0x0c);
  80.    delay_38us();
  81.    lcd_wr_com(0x01);
  82.    delay_1520us();
  83.    lcd_wr_com(0x06);
  84. }
  85. void GotoXY(uchar x,  uchar y)
  86. {
  87.         if(y==0)
  88.         lcd_wr_com(0x80|x);
  89.         if(y==1)
  90.         lcd_wr_com(0xc0|x);
  91. }
  92. void Print(uchar *str)
  93. {
  94. while(*str!="\0")
  95. {
  96. lcd_wr_data(*str);
  97. str++;
  98. }
  99. }
  100. void LCD_Print(uchar x,uchar y,uchar *str)
  101. {
  102. GotoXY        (x,y);
  103. Print(str);
  104. }
  105. /**************系统显示子函数************/
  106. void covert1()
  107. {
  108. uchar x=0x00;
  109. if(t[1]>0x07)
  110. {
  111. TempBuffer1[0]=0x2d;
  112. t[1]=~t[1];
  113. t[0]=~t[0];
  114. x=t[0]+1;
  115. t[0]=x;
  116. if(x>255)
  117. t[1]++;
  118. }
  119. else
  120. TempBuffer1[0]=0x2b;
  121. t[1]<<=4;
  122. t[1]=t[1]&0x70;
  123. x=t[0];
  124. x>>=4;
  125. x=x&0x0f;
  126. t[1]=t[1]|x;
  127. temperature=t[1];
  128. TempBuffer1[1]=t[1]/100+0x30;
  129. if(TempBuffer1[1]==0x30)
  130. TempBuffer1[1]=0xfe;
  131. TempBuffer1[2]=(t[1]%100)/10+0x30;
  132. TempBuffer1[3]=(t[1]%100)%10+0x30;
  133. }
  134. /************DS18B20函数***************/
  135. void delay_DS18B20(uint i)
  136. {
  137. while(i--);        
  138. }
  139. void Init_DS18B20(void)
  140. {
  141. uchar x=0;
  142. DQ= 1;
  143. delay_DS18B20(8);
  144.   DQ= 0;
  145. delay_DS18B20(80);
  146.   DQ= 1;
  147. delay_DS18B20(14);
  148.   x=DQ;
  149. delay_DS18B20(20);
  150. }
  151. uchar ReadOneChar(void)
  152. {
  153. unsigned char i=0;
  154. unsigned char dat0=0;
  155. for(i=8;i>0;i--)
  156. {
  157.   DQ=0;
  158.   dat0>>=1;
  159.   DQ=1;
  160.   if(DQ)
  161.   dat0|=0x80;
  162.   delay_DS18B20(4);
  163.   }
  164.   return(dat0);
  165.   }
  166. void WriteOneChar (uchar dat1)
  167. {
  168. uchar i=0;
  169. for(i=8;i>0;i--)
  170. {
  171. DQ=0;
  172. DQ=dat1&0x01;
  173. delay_DS18B20(5);
  174. DQ=1;
  175. dat1>>=1;
  176. }
  177. }
  178. void ReadTemperature()
  179. {
  180.   delay_DS18B20(80);
  181.   Init_DS18B20();
  182.   WriteOneChar(0xCC);
  183.   WriteOneChar(0x44);
  184.   delay_DS18B20(80);
  185.   Init_DS18B20();
  186.   WriteOneChar(0xCC);
  187.   WriteOneChar(0xBE);
  188.    delay_DS18B20(80);
  189.    t[0]=ReadOneChar();
  190.    t[1]=ReadOneChar();
  191. }
  192. void delay_motor(uchar i)
  193. {
  194. uchar j,k;
  195. for(j=i;j>0;j--)
  196. for(k=200;k>0;k--);
  197. }
  198. /***********电动机转动程序*************/               
  199. void motor(uchar tmp)
  200. {
  201.   uchar x;
  202.   if(TempBuffer1[0]==0x2b )
  203.   {
  204.    if(tmp<25)
  205.    {
  206.     D=0;
  207.         PWM=0;
  208.         }
  209.         else if (tmp>50)
  210.         {
  211.     D=0;
  212.         PWM=1;
  213.         x=250;
  214.         delay_motor(x);
  215.         PWM=0;
  216.         x=5;
  217.         delay_motor(x);
  218.         }
  219.         else
  220.         {
  221.         D=0;
  222.         PWM=1;
  223.         x=5*tmp;
  224.         delay_motor(x);
  225.         PWM=0;
  226.         x=255-5*tmp;
  227.         delay_motor(x);
  228.         }
  229.         }
  230.          else if(TempBuffer1[0]==0x2d)
  231.          {
  232.           D=1;
  233.           PWM=0;
  234.           x=5*tmp;
  235.           delay_motor(x);
  236.       PWM=1;
  237.           x=255-5*tmp;
  238.           delay_motor(x);
  239.           }
  240.           }
  241.           void delay(unsigned int x)
  242.           {
  243.           unsigned char i;
  244.           while(x--)
  245.           {
  246.            for(i=0;i<123;i++){;}
  247.            }
  248.            }
  249. /***********主要功能函数*************/   
  250. void main(void)
  251. {
  252. delay_20ms();
  253. ReadTemperature();
  254. Init_lcd();
  255. LCD_Print(0,0,tab);
  256. delay(1000);
  257. while(1)
  258. {
  259.   ReadTemperature();
  260.   delay_DS18B20(100);
  261.   covert1();
  262.   LCD_Print(4,1,TempBuffer1);
  263.   motor(temperature);
  264.   }
  265. }
复制代码

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

使用道具 举报

沙发
ID:204609 发表于 2017-6-14 13:21 | 只看该作者
感觉你的复位电路有问题  电阻阻值变小一点试试
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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