proteus 8进行仿真单片机出现假死现象

2019-07-18 08:55发布

QQ截图20180329200756.png
并且LCD1602元件也出现显示不全的现象。断电重启后能运行一会儿然后假死。只有重新制作仿真图才能多运行一会儿。求助于各位大佬这是怎么回事啊。谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
勇哥-lzu
1楼-- · 2019-07-18 14:47
程序跑飞了吧   贴上代码看一下 最佳答案
jjy1039
2楼-- · 2019-07-18 17:24
程序调试了吗,先调试程序吧,仿真的硬件一般不会有什么问题
li12345l
3楼-- · 2019-07-18 18:18
jjy1039 发表于 2018-3-30 15:14
程序调试了吗,先调试程序吧,仿真的硬件一般不会有什么问题

不知道程序哪里有问题- -
li12345l
4楼-- · 2019-07-18 21:04
 精彩回答 2  元偷偷看……
li12345l
5楼-- · 2019-07-19 00:43
 精彩回答 2  元偷偷看……
li12345l
6楼-- · 2019-07-19 01:58
勇哥-lzu 发表于 2018-3-30 18:10
程序跑飞了吧   贴上代码看一下
  1. 勇哥-lzu 发表于 2018-3-30 18:10
  2. 程序跑飞了吧   贴上代码
  3. 好的
  4. #include <reg52.h>                                  
  5. #include <intrins.h>

  6. #define uchar unsigned char       
  7. #define uint  unsigned int       

  8. sfr ISP_DATA  = 0xe2;                       
  9. sfr ISP_ADDRH = 0xe3;                       
  10. sfr ISP_ADDRL = 0xe4;                       
  11. sfr ISP_CMD   = 0xe5;                       
  12. sfr ISP_TRIG  = 0xe6;                       
  13. sfr ISP_CONTR = 0xe7;                       

  14. sbit LcdRs_P   = P1^2;   
  15. sbit LcdRw_P   = P1^3;   
  16. sbit LcdEn_P   = P1^4;   
  17. sbit Buzzer_P  = P1^5;   
  18. sbit DHT11_P   = P1^6;                
  19. sbit DHT11_1_P   = P1^7;       
  20. sbit KeySet_P  = P3^2;               
  21. sbit KeyDown_P = P3^3;               
  22. sbit KeyUp_P   = P3^4;               
  23. sbit LedTH_P   = P2^0;               
  24. sbit LedTL_P   = P2^1;               
  25. sbit LedHH_P   = P2^2;               
  26. sbit LedHL_P   = P2^3;       
  27. sbit W_P                                = P2^4;               
  28. sbit W_P_1                        = P2^5;       


  29. uchar temp;                                       
  30. uchar humi;                                       
  31. uchar temp_1;                               
  32. uchar humi_1;                               

  33. uchar AlarmTL;                       
  34. uchar AlarmTH;                       
  35. uchar AlarmHL;               
  36. uchar AlarmHH;                       




  37. void ISP_Disable()
  38. {
  39.         ISP_CONTR = 0;
  40.         ISP_ADDRH = 0;
  41.         ISP_ADDRL = 0;
  42. }


  43. unsigned char EEPROM_Read(unsigned int add)
  44. {
  45.         ISP_DATA  = 0x00;
  46.         ISP_CONTR = 0x83;
  47.         ISP_CMD   = 0x01;
  48.         ISP_ADDRH = (unsigned char)(add>>8);
  49.         ISP_ADDRL = (unsigned char)(add&0xff);
  50.         ISP_TRIG  = 0x46;          
  51.         ISP_TRIG  = 0xB9;
  52.         _nop_();
  53.         ISP_Disable();
  54.         return (ISP_DATA);
  55. }


  56. void EEPROM_Write(unsigned int add,unsigned char ch)
  57. {
  58.         ISP_CONTR = 0x83;
  59.         ISP_CMD   = 0x02;
  60.         ISP_ADDRH = (unsigned char)(add>>8);
  61.         ISP_ADDRL = (unsigned char)(add&0xff);
  62.         ISP_DATA  = ch;
  63.         ISP_TRIG  = 0x46;
  64.         ISP_TRIG  = 0xB9;
  65.         _nop_();
  66.         ISP_Disable();
  67. }


  68. void Sector_Erase(unsigned int add)          
  69. {
  70.         ISP_CONTR = 0x83;
  71.         ISP_CMD   = 0x03;
  72.         ISP_ADDRH = (unsigned char)(add>>8);
  73.         ISP_ADDRL = (unsigned char)(add&0xff);
  74.         ISP_TRIG  = 0x46;
  75.         ISP_TRIG  = 0xB9;
  76.         _nop_();
  77.         ISP_Disable();
  78. }


  79. void DelayMs(uint time)
  80. {
  81.         uint i,j;
  82.         for(i=0;i<time;i++)
  83.                 for(j=0;j<112;j++);
  84. }



  85. void LcdWriteCmd(uchar cmd)
  86. {
  87.         LcdRs_P = 0;
  88.         LcdRw_P = 0;
  89.         LcdEn_P = 0;
  90.         P0=cmd;
  91.         DelayMs(2);
  92.         LcdEn_P = 1;   
  93.         DelayMs(2);
  94.         LcdEn_P = 0;       
  95. }



  96. void LcdWriteData(uchar dat)
  97. {
  98.         LcdRs_P = 1;
  99.         LcdRw_P = 0;
  100.         LcdEn_P = 0;
  101.         P0=dat;
  102.         DelayMs(2);
  103.         LcdEn_P = 1;   
  104.         DelayMs(2);
  105.         LcdEn_P = 0;
  106. }


  107. void LcdInit()
  108. {
  109.         LcdWriteCmd(0x38);        
  110.         LcdWriteCmd(0x0C);        
  111.         LcdWriteCmd(0x06);        
  112.         LcdWriteCmd(0x01);        
  113. }



  114. void LcdGotoXY(uchar line,uchar column)
  115. {
  116.        
  117.         if(line==0)        
  118.                 LcdWriteCmd(0x80+column);
  119.        
  120.         if(line==1)        
  121.                 LcdWriteCmd(0x80+0x40+column);
  122. }



  123. void LcdPrintStr(uchar *str)
  124. {
  125.         while(*str!='')                
  126.                 LcdWriteData(*str++);
  127. }



  128. void LcdPrintNum(uchar num)
  129. {
  130.         LcdWriteData(num/10+48);       
  131.         LcdWriteData(num%10+48);
  132. }


  133. void LcdShowInit()
  134. {
  135.         LcdGotoXY(0,0);                                                               
  136.         LcdPrintStr("  DHT11 System  ");
  137.         LcdGotoXY(1,0);                                                          
  138.         LcdPrintStr("T:   C   H:  %RH");
  139.         LcdGotoXY(1,4);                                                               
  140.         LcdWriteData(0xdf);       
  141. }




  142. void Delay10us()
  143. {
  144.         _nop_();       
  145.         _nop_();
  146.         _nop_();
  147.         _nop_();
  148.         _nop_();
  149.         _nop_();
  150.         _nop_();
  151.         _nop_();
  152.         _nop_();
  153.         _nop_();
  154. }



  155. uchar DhtReadByte(void)
  156. {   
  157.         bit bit_i;
  158.         uchar j;
  159.         uchar dat=0;

  160.         for(j=0;j<8;j++)   
  161.         {
  162.                 while(!DHT11_P);       
  163.                 Delay10us();                       
  164.                 Delay10us();
  165.                 Delay10us();
  166.                 if(DHT11_P==1)       
  167.                 {
  168.                         bit_i=1;
  169.                         while(DHT11_P);
  170.                 }
  171.                 else
  172.                 {
  173.                         bit_i=0;
  174.                 }
  175.                 dat<<=1;                                  
  176.                 dat|=bit_i;   
  177.         }
  178.         return(dat);  
  179. }


  180. void ReadDhtData()
  181. {             
  182.         uchar HumiHig;               
  183.         uchar HumiLow;               
  184.         uchar TemHig;               
  185.         uchar TemLow;               
  186.         uchar check;               
  187.        
  188.         DHT11_P=0;                               
  189.         DelayMs(20);               
  190.         DHT11_P=1;                       

  191.         Delay10us();                        
  192.         Delay10us();
  193.         Delay10us();

  194.         while(!DHT11_P);       
  195.         while(DHT11_P);               


  196.         HumiHig = DhtReadByte();        
  197.         HumiLow = DhtReadByte();
  198.         TemHig  = DhtReadByte();
  199.         TemLow  = DhtReadByte();
  200.         check   = DhtReadByte();

  201.         DHT11_P=1;                               

  202.         if(check==HumiHig + HumiLow + TemHig + TemLow)                
  203.         {
  204.                 temp=TemHig;                        
  205.                 humi=HumiHig;                       
  206.         }
  207. }

  208. uchar Dht_1ReadByte(void)
  209. {   
  210.         bit bit_i;
  211.         uchar j;
  212.         uchar dat_1=0;

  213.         for(j=0;j<8;j++)   
  214.         {
  215.                 while(!DHT11_1_P);       
  216.                 Delay10us();                       
  217.                 Delay10us();
  218.                 Delay10us();
  219.                 if(DHT11_1_P==1)               
  220.                 {
  221.                         bit_i=1;
  222.                         while(DHT11_1_P);
  223.                 }
  224.                 else
  225.                 {
  226.                         bit_i=0;
  227.                 }
  228.                 dat_1<<=1;                                  
  229.                 dat_1|=bit_i;   
  230.         }
  231.         return(dat_1);  
  232. }



  233. void ReadDht_1Data()
  234. {             
  235.         uchar HumiHig_1;               
  236.         uchar HumiLow_1;               
  237.         uchar TemHig_1;                       
  238.         uchar TemLow_1;                       
  239.         uchar check_1;                       
  240.        
  241.         DHT11_1_P=0;                               
  242.         DelayMs(20);                       
  243.         DHT11_1_P=1;                               

  244.         Delay10us();         
  245.         Delay10us();
  246.         Delay10us();

  247.         while(!DHT11_1_P);       
  248.         while(DHT11_1_P);       

  249.         HumiHig_1 = Dht_1ReadByte();        
  250.         HumiLow_1 = Dht_1ReadByte();
  251.         TemHig_1  = Dht_1ReadByte();
  252.         TemLow_1  = Dht_1ReadByte();        
  253.         check_1   = Dht_1ReadByte();

  254.         DHT11_1_P=1;                       

  255.         if(check_1==HumiHig_1 + HumiLow_1 + TemHig_1 + TemLow_1)
  256.         {
  257.                 temp_1=TemHig_1;                        
  258.                 humi_1=HumiHig_1;                       
  259.         }
  260. }



  261. void AlarmJudge(void)
  262. {
  263.         uchar i;

  264.         if(temp>AlarmTH)                               
  265.         {
  266.                 if(temp>temp_1)                       
  267.                 {
  268.                         W_P_1        =        0;
  269.                         LedTH_P=1;
  270.                         LedTL_P=1;
  271.                 }
  272.                 else
  273.                 {
  274.                         LedTH_P=0;
  275.                         LedTL_P=1;
  276.                         W_P_1        =        1;
  277.                 }
  278.         }
  279.         else if(temp<AlarmTL)               
  280.         {
  281.                 if(temp<temp_1)                               
  282.                 {
  283.                         W_P_1        =                0;
  284.                         LedTL_P        =        1;
  285.                         LedTH_P        =        1;
  286.                 }
  287.                 else
  288.                 {
  289.                         LedTL_P=        0;
  290.                         LedTH_P=        1;
  291.                         W_P_1        =                1;
  292.                 }
  293.         }
  294.         else                                                                               
  295.         {
  296.                 LedTH_P=        1;
  297.                 LedTL_P=        1;
  298.                 W_P_1=                1;
  299.         }

  300.         if(humi>AlarmHH)                          
  301.         {
  302.                 if(humi>humi_1)
  303.                 {
  304.                         W_P                =                0;
  305.                         LedHH_P=        1;
  306.                         LedHL_P=        1;
  307.                 }
  308.                 else
  309.                 {
  310.                         W_P                =                1;
  311.                         LedHH_P=        0;
  312.                         LedHL_P=        1;
  313.                 }
  314.         }
  315.         else if(humi<AlarmHL)               
  316.         {
  317.                 if(humi<humi_1)
  318.                 {
  319.                         W_P                =                0;
  320.                         LedHL_P=        1;
  321.                         LedHH_P=        1;
  322.                 }
  323.                 else
  324.                 {
  325.                         W_P                =                1;
  326.                         LedHL_P=        0;
  327.                         LedHH_P=        1;
  328.                 }
  329.         }
  330.         else                                                                          
  331.         {
  332.                 LedHH_P=1;
  333.                 LedHL_P=1;
  334.                 W_P        =        1;
  335.         }

  336.         if((LedHH_P==0)||(LedHL_P==0)||(LedTH_P==0)||(LedTL_P==0)||(W_P==0)||(W_P_1==0))        
  337.         {
  338.                 for(i=0;i<3;i++)
  339.                 {
  340.                         Buzzer_P=0;
  341.                         DelayMs(100);
  342.                         Buzzer_P=1;
  343.                         DelayMs(100);
  344.                 }
  345.         }
  346. }



  347. void KeyScanf()
  348. {
  349.         if(KeySet_P==0)               
  350.         {
  351.                

  352.                 LcdWriteCmd(0x01);                               
  353.                 LcdGotoXY(0,0);
  354.                 LcdPrintStr("Temp:   -       ");
  355.                 LcdGotoXY(1,0);
  356.                 LcdPrintStr("Humi:   -       ");
  357.                
  358.                 LcdGotoXY(0,6);                                                
  359.                 LcdPrintNum(AlarmTL);       
  360.                 LcdGotoXY(0,9);                                                
  361.                 LcdPrintNum(AlarmTH);

  362.                 LcdGotoXY(1,6);                                                
  363.                 LcdPrintNum(AlarmHL);       
  364.                 LcdGotoXY(1,9);                                                 
  365.                 LcdPrintNum(AlarmHH);

  366.                 LcdGotoXY(0,7);                                                
  367.                 LcdWriteCmd(0x0F);                       
  368.                
  369.                 DelayMs(10);                                                 
  370.                 while(!KeySet_P);                                        
  371.                 DelayMs(10);                                          


  372.                 while(KeySet_P)                                       
  373.                 {
  374.                         if(KeyDown_P==0)                               
  375.                         {
  376.                                 if(AlarmTL>0)                                       
  377.                                         AlarmTL--;
  378.                                 LcdGotoXY(0,6);                                
  379.                                 LcdPrintNum(AlarmTL);                 
  380.                                 LcdGotoXY(0,7);                               
  381.                                 DelayMs(350);                                       
  382.                         }
  383.                         if(KeyUp_P==0)                                 
  384.                         {
  385.                                 if(AlarmTL<99)                         
  386.                                         AlarmTL++;
  387.                                 LcdGotoXY(0,6);                                 
  388.                                 LcdPrintNum(AlarmTL);
  389.                                 LcdGotoXY(0,7);                               
  390.                                 DelayMs(350);                                       
  391.                         }       
  392.                 }

  393.                 LcdGotoXY(0,10);
  394.                 DelayMs(10);                                                 
  395.                 while(!KeySet_P);                                        
  396.                 DelayMs(10);                                                 


  397.                                
  398.                 while(KeySet_P)                                         
  399.                 {
  400.                         if(KeyDown_P==0)                               
  401.                         {
  402.                                 if(AlarmTH>0)                                 
  403.                                         AlarmTH--;
  404.                                 LcdGotoXY(0,9);                          
  405.                                 LcdPrintNum(AlarmTH);
  406.                                 LcdGotoXY(0,10);                       
  407.                                 DelayMs(350);                                       
  408.                         }
  409.                         if(KeyUp_P==0)                          
  410.                         {
  411.                                 if(AlarmTH<99)                                
  412.                                         AlarmTH++;
  413.                                 LcdGotoXY(0,9);                               
  414.                                 LcdPrintNum(AlarmTH);
  415.                                 LcdGotoXY(0,10);                       
  416.                                 DelayMs(350);                                       
  417.                         }                                                                 
  418.                 }

  419.                 LcdGotoXY(1,7);
  420.                 DelayMs(10);                                                 
  421.                 while(!KeySet_P);                                        
  422.                 DelayMs(10);                                          
  423.                
  424.                

  425.                 while(KeySet_P)                                                
  426.                 {
  427.                         if(KeyDown_P==0)                               
  428.                         {
  429.                                 if(AlarmHL>0)                                        
  430.                                         AlarmHL--;
  431.                                 LcdGotoXY(1,6);                               
  432.                                 LcdPrintNum(AlarmHL);
  433.                                 LcdGotoXY(1,7);                               
  434.                                 DelayMs(350);
  435.                         }
  436.                         if(KeyUp_P==0)                                        
  437.                         {
  438.                                 if(AlarmHL<99)                         
  439.                                         AlarmHL++;
  440.                                 LcdGotoXY(1,6);                          
  441.                                 LcdPrintNum(AlarmHL);
  442.                                 LcdGotoXY(1,7);                         
  443.                                 DelayMs(350);                                       
  444.                         }       
  445.                 }

  446.                 LcdGotoXY(1,10);
  447.                 DelayMs(10);                                                 
  448.                 while(!KeySet_P);                                        
  449.                 DelayMs(10);                                                 
  450.                

  451.                 while(KeySet_P)                                                
  452.                 {
  453.                         if(KeyDown_P==0)                                
  454.                         {
  455.                                 if(AlarmHH>0)                                 
  456.                                         AlarmHH--;
  457.                                 LcdGotoXY(1,9);                          
  458.                                 LcdPrintNum(AlarmHH);
  459.                                 LcdGotoXY(1,10);                       
  460.                                 DelayMs(350);
  461.                         }
  462.                         if(KeyUp_P==0)                                        
  463.                         {
  464.                                 if(AlarmHH<99)                               
  465.                                         AlarmHH++;
  466.                                 LcdGotoXY(1,9);                                
  467.                                 LcdPrintNum(AlarmHH);
  468.                                 LcdGotoXY(1,10);                        
  469.                                 DelayMs(350);                                       
  470.                         }       
  471.                 }

  472.                 LcdWriteCmd(0x0C);                         
  473.                 LcdShowInit();                                               

  474.                 DelayMs(10);                                         
  475.                 while(!KeySet_P);                                
  476.                 DelayMs(10);                                                 

  477.                 Sector_Erase(0x2000);                                                
  478.                 EEPROM_Write(0x2000,AlarmTL);               
  479.                 EEPROM_Write(0x2001,AlarmTH);       
  480.                 EEPROM_Write(0x2002,AlarmHL);       
  481.                 EEPROM_Write(0x2003,AlarmHH);               
  482.         }       
  483. }



  484. void main()
  485. {
  486.         uchar i;

  487.         LcdInit();                                                               
  488.         LcdShowInit();                                

  489.         AlarmTL=EEPROM_Read(0x2000);       
  490.         AlarmTH=EEPROM_Read(0x2001);       
  491.         AlarmHL=EEPROM_Read(0x2002);       
  492.         AlarmHH=EEPROM_Read(0x2003);       

  493.         if((AlarmTL==0)||(AlarmTL>100))       
  494.                 AlarmTL=20;
  495.         if((AlarmTH==0)||(AlarmTH>100))       
  496.                 AlarmTH=35;
  497.         if((AlarmHL==0)||(AlarmHL>100))       
  498.                 AlarmHL=40;
  499.         if((AlarmHH==0)||(AlarmHH>100))       
  500.                 AlarmHH=55;
  501.                
  502.        
  503.         while(1)
  504.         {
  505.                 ReadDhtData();                                 // 读DHT11(内)数据
  506.                 DelayMs(100);
  507.                 ReadDht_1Data();                         // 读DHT11(外)数据
  508.                 LcdGotoXY(1,2);                                
  509.                 LcdPrintNum(temp);               
  510.                 LcdGotoXY(1,11);                       
  511.                 LcdPrintNum(humi);               
  512.                
  513.                 AlarmJudge();                                        // 报警

  514.                 for(i=0;i<25;i++)
  515.                 {
  516.                         KeyScanf();                                       
  517.                         DelayMs(50);                       
  518.                 }
  519.         }
  520. }
复制代码

一周热门 更多>