久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3281|回復: 2
打印 上一主題 下一主題
收起左側

單片機定時控制電機程序+PCB文件(控制板+驅動板)

[復制鏈接]
跳轉到指定樓層
樓主
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)


單片機源程序如下:
  1. #include "reg51.h"
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define T1MS 0x11   
  6. #define T2MS 0x19
  7. #define WT_30M          0x80
  8. #define WT_24M          0x81
  9. #define WT_20M          0x82
  10. #define WT_12M          0x83
  11. #define WT_6M           0x84
  12. #define WT_3M           0x85
  13. #define WT_2M           0x86
  14. #define WT_1M           0x87
  15. sfr  ADC_CONTR  =  0xbc;
  16. sfr  ADC_RES  =  0xbd;
  17. sfr  ADC_RESL  =  0xbe;
  18. sfr  ADCCFG  =  0xde;
  19. sbit  EADC  =  IE^5;
  20. sfr     IAP_DATA    =   0xC2;
  21. sfr     IAP_ADDRH   =   0xC3;
  22. sfr     IAP_ADDRL   =   0xC4;
  23. sfr     IAP_CMD     =   0xC5;
  24. sfr     IAP_TRIG    =   0xC6;
  25. sfr     IAP_CONTR   =   0xC7;
  26. sfr  AUXR  =  0x8e;
  27.    
  28. sfr P4M0=0xb4;
  29. sfr P4M1=0xb3;
  30. sfr P2M0=0x96;
  31. sfr P2M1=0x95;
  32. sfr P5M1=0xc9;
  33. sfr P5M0=0xca;
  34. sfr  P1M0  =  0x92;
  35. sfr  P1M1  =  0x91;
  36. bit M2wei=0,M3wei=1,M1wei=1,adcwei=0;
  37. sbit ACC_7 = ACC^7;
  38. sbit shoudong=P3^3;
  39. sbit M2kg=P3^4;
  40. sbit set=P3^5;
  41. sbit jia=P3^6;
  42. sbit jian=P3^7;
  43. sbit in=P2^2;
  44. sbit M3=P2^3;
  45. sbit M2=P2^4;
  46. sbit M1=P2^5;
  47. sbit M1hong=P1^0;
  48. sbit M1lv=P1^1;
  49. sbit M2hong=P1^2;
  50. sbit M2lv=P1^3;
  51. sbit M3hong=P1^4;
  52. sbit M3lv=P1^5;
  53. unsigned char data time[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  54. unsigned char code shuzi[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
  55. unsigned char xdata bb=0,pp=2,oo=6,ii=3,uu=0,ll=2,pp1=2,oo1=6,ii1=3,uu1=4,pp2=2,oo2=6,ii2=3,uu2=4,adc1=0,adc2=0,adc3=0;
  56. unsigned int  aa=0,aa1=0,qq=0,qq1=0,ww=0,dingshi=0,cc=0,cc1=0,cc2=0,cc3=0,cc4=0,cc5=0;
  57. unsigned char xdata trg=0,cont=0,read=0,trg1=0,cont1=0,read1=0,trg2=0,cont2=0,read2=0,trg3=0,cont3=0,read3=0,jian1=0,jian2=0,jian3=0,jian4=0,jiehuan=1;        
  58. float dian;
  59. unsigned int  vcc=0,res=0,chu=0,y=0,t=0,r=0,tvalue=0,v=0;
  60. unsigned char   fen=0,miao=0,miao1=0,miao2=0,miao3=0,miao4=0,miao5=0,miao6=0,anjianshijian=0;
  61. bit fg=0,fg1=0,fg2,fg3,wei=0,wei1=0,wei2=0,dianjiwei=1,wei3=0,shoudong1=0,shoudong2=0,shoudong3=0,shoudong4=0,shoudongwei=0;                                //溫度正負標志


  62. void delay1(uint i)
  63. {
  64.         uint j,k;
  65.         for(j=i;j>0;j--)
  66.                 for(k=125;k>0;k--);
  67. }

  68. void TM0() interrupt 1
  69. {
  70. aa++;
  71.         bb++;

  72.         switch(ll)
  73.                 { case 1:                         //顯示1   溫度顯示
  74.                         
  75.                         
  76.                         
  77. switch(bb)
  78. {
  79.         case 1:
  80.         P0=shuzi[pp];
  81.         P4=0x02;
  82.         break;
  83.         case 2:
  84.                 P0=shuzi[oo];
  85.         P4=0x04;
  86.         break;
  87.         case 3:
  88.         P0=shuzi[ii];
  89.         P4=0x08;
  90.         break;
  91.         case 4:
  92.         P0=shuzi[uu];
  93.         P4=0x10;
  94.         break;
  95.         case 5:
  96.         P0=shuzi[10];
  97.         P4=0x04;
  98.         break;
  99. }
  100. if(bb==6)
  101. {bb=0;}
  102. break;
  103.         case 2:  // 顯示2      定時顯示
  104.                
  105.                 switch(bb)
  106. {
  107.         case 1:
  108.         P0=shuzi[pp1];
  109.         P4=0x02;
  110.         break;
  111.         case 2:
  112.                 P0=shuzi[oo1];
  113.         P4=0x04;
  114.         break;
  115.         case 3:
  116.         P0=shuzi[ii1];
  117.         P4=0x08;
  118.         break;
  119.         case 4:
  120.         P0=shuzi[uu1];
  121.         P4=0x10;
  122.         break;
  123.         case 5:
  124.         P0=shuzi[10];
  125.         P4=0x04;
  126.         break;
  127. }
  128. if(bb==6)
  129. {bb=0;}
  130. break;

  131.         case 3:              //xianshi  3    定時顯示   分
  132.                                         read=jia^0xff;
  133.         trg=read&(read^cont);
  134.         cont=read;
  135.         if(trg==1)
  136.         {
  137.         ww++;
  138. fen=0;
  139. miao=0;
  140.                 if(ww>=31)
  141.                 {ww=1;}
  142.         }
  143.         read1=jian^0xff;
  144.         trg1=read1&(read1^cont1);
  145.         cont1=read1;
  146.         
  147.         if(trg1==1)
  148.         {
  149.                 fen=0;
  150. miao=0;
  151.                 delay1(15);
  152.         ww--;
  153.                 if(ww<=0)
  154.                 {ww=30;}
  155.         }
  156.                         switch(bb)
  157. {
  158.         case 1:
  159.         P0=shuzi[ww/10];       //  分延遲
  160.         P4=0x02;
  161.         break;
  162.         case 2:
  163.                 P0=shuzi[ww%10];
  164.         P4=0x04;
  165.         break;
  166.         case 3:
  167.         P0=shuzi[cc3/10];  
  168.         P4=0x00;
  169.         break;
  170.         case 4:
  171.         P0=shuzi[cc3%10];
  172.         P4=0x00;
  173.         break;
  174.         case 5:
  175.         P0=shuzi[10];
  176.         P4=0x00;
  177.         break;
  178. }
  179. if(bb==6)
  180. {bb=0;}
  181. break;
  182.         case 4:            //xianshi  4    定時顯示  秒
  183.         read=jia^0xff;
  184.         trg=read&(read^cont);
  185.         cont=read;
  186.         if(trg==1)
  187.         {
  188.         cc3++;

  189.                 if(cc3>=31)
  190.                 {cc3=1;}
  191.         }
  192.         read1=jian^0xff;
  193.         trg1=read1&(read1^cont1);
  194.         cont1=read1;
  195.         
  196.         if(trg1==1)
  197.         {
  198.         cc3--;
  199.                 if(cc3<=0)
  200.                 {cc3=30;}
  201.         }
  202.                         switch(bb)
  203. {
  204.         case 1:
  205.         P0=shuzi[ww/10];
  206.         P4=0x00;
  207.         break;
  208.         case 2:
  209.                 P0=shuzi[ww%10];
  210.         P4=0x00;
  211.         break;
  212.         case 3:
  213.         P0=shuzi[cc3/10];   //  秒
  214.         P4=0x08;
  215.         break;
  216.         case 4:
  217.         P0=shuzi[cc3%10];   //  秒
  218.         P4=0x10;
  219.         break;
  220.         case 5:
  221.         P0=shuzi[10];
  222.         P4=0x00;
  223.         break;
  224. }
  225. if(bb==6)
  226. {bb=0;}
  227. break;

  228.         case 5:                 //顯示5       溫度報警-
  229.                         read=jia^0xff;
  230.         trg=read&(read^cont);
  231.         cont=read;
  232.         if(trg==1)
  233.         {
  234.         cc++;
  235.                 if(cc>=70)
  236.                 {cc=35;}
  237.         }
  238.         read1=jian^0xff;
  239.         trg1=read1&(read1^cont1);
  240.         cont1=read1;
  241.         if(trg1==1)
  242.         {
  243.         cc--;
  244.                 if(cc<=34)
  245.                 {cc=69;}
  246.         }
  247.                         switch(bb)
  248. {
  249.         case 1:
  250.         P0=shuzi[cc/10];          //  溫度低溫恢復
  251.         P4=0x02;
  252.         break;
  253.         case 2:
  254.                 P0=shuzi[cc%10];
  255.         P4=0x04;
  256.         break;
  257.         case 3:
  258.         P0=shuzi[qq/10];
  259.         P4=0x00;
  260.         break;
  261.         case 4:
  262.         P0=shuzi[qq%10];
  263.         P4=0x00;
  264.         break;
  265.         case 5:
  266.         P0=shuzi[10];
  267.         P4=0x00;
  268.         break;
  269. }
  270. if(bb==6)
  271. {bb=0;}
  272. break;        
  273.         case 6:                          //顯示6         溫度報警+
  274.                                         read=jia^0xff;
  275.         trg=read&(read^cont);
  276.         cont=read;
  277.         if(trg==1)
  278.         {
  279.         qq++;

  280.                 if(qq>=100)
  281.                 {qq=70;}
  282.         }
  283.         read1=jian^0xff;
  284.         trg1=read1&(read1^cont1);
  285.         cont1=read1;
  286.         
  287.         if(trg1==1)
  288.         {
  289.                 delay1(15);
  290.         qq--;
  291.                 if(qq<=69)
  292.                 {qq=99;}
  293.         }
  294.                         switch(bb)
  295. {
  296.         case 1:
  297.         P0=shuzi[cc/10];
  298.         P4=0x00;
  299.         break;
  300.         case 2:
  301.         P0=shuzi[0];
  302.         P4=0x00;
  303.         break;
  304.         case 3:
  305.         P0=shuzi[qq/10];               //  溫度低溫恢復
  306.         P4=0x08;
  307.         break;
  308.         case 4:
  309.         P0=shuzi[qq%10];
  310.         P4=0x10;
  311.         break;
  312.         case 5:
  313.         P0=shuzi[10];
  314.         P4=0x00;
  315.         break;
  316. }
  317. if(bb==6)
  318. {bb=0;}
  319. break;        

  320. }
  321.         if(ll==7)
  322.         {ll=1;}
  323.         }
  324. void TM1() interrupt 3
  325. {         
  326.         
  327.         dingshi++;

  328. }
  329. void anjian(void)    //  設置按鍵
  330. {



  331.   read2=set^0xff;
  332.         trg2=read2&(read2^cont2);
  333.         cont2=read2;
  334.           if(trg2==1)
  335.                 {

  336.                         jian1=1;

  337.                 }
  338.                
  339.                 if(jian1==set)
  340.                 {  
  341.                 ll++;
  342.                         delay1(200);
  343.                         jian1=0;
  344.                 }
  345. }
  346. void M1kaiguan(void)      //  M1總開關
  347. {
  348.   read3=M2kg^0xff;
  349.         trg3=read3&(read3^cont3);
  350.         cont3=read3;
  351.                   if(trg3==1)
  352.                 {  
  353.                         jian2=1;

  354.                 }
  355.         

  356.                          if( M2kg==jian2  )
  357.                         {
  358.                                 
  359.                                         delay1(2000);
  360.                          jian2=0;
  361.                 M3wei=~M3wei;               
  362.                         }
  363.                         
  364.         if(M3wei==0)
  365. { M1=1;
  366.   M1hong=0;
  367.         M1lv=1;
  368.         

  369.         if(shoudong==0)
  370.         { shoudong1=1;
  371.         }
  372. if(shoudong1==1 )
  373. {
  374. M3=1;
  375. M3lv=1;   
  376. fen=0;
  377. miao=0;
  378. }
  379. if(shoudong==shoudong1)
  380. {
  381. M3=0;
  382. M3lv=0;   
  383.         fen=0;
  384.         miao=0;
  385. shoudong1=0;
  386. }
  387.         
  388.         
  389.         
  390.         
  391.         if(M1wei==1)
  392.         {
  393.         M2=1;
  394.         M2lv=1;
  395.         M2hong=0;
  396.         }
  397.         
  398.         else
  399.         {  
  400.         M2=0;
  401.         M2lv=0;
  402.         M2hong=1;
  403.         
  404.         }
  405. }
  406. else
  407. {
  408.   M1=0;
  409.         M1lv=0;
  410.         M1hong=0;
  411.         M2=0;
  412.         M2lv=0;
  413.         M2hong=0;
  414.         M3=0;
  415.         M3lv=0;
  416.         M3hong=0;
  417.         fen=0;
  418.         miao=0;
  419. }
  420.                 }


  421. void ADCInit()                 //   ADC初始化
  422. {
  423. ADCCFG = 0x2f;  // ?? ADC ??????? /2/16/16
  424. ADC_CONTR = 0x86;  // ?? ADC ?? , ???? 16 ??
  425. }
  426. int  ADCRead()            //  讀ADC
  427. {
  428. int res;
  429. ADC_CONTR |= 0x40;  // ?? AD ??
  430. _nop_();
  431. _nop_();
  432. while (!(ADC_CONTR & 0x20));  // ?? ADC ????
  433. ADC_CONTR &= ~0x20;  // ?????
  434.         res = (ADC_RES << 8) | ADC_RESL; // ?? ADC ??
  435. return res;
  436. }
  437. void IapIdle()            //  掉電保全  初始化
  438. {
  439.     IAP_CONTR = 0;                              //??IAP??
  440.     IAP_CMD = 0;                                //???????
  441.     IAP_TRIG = 0;                               //???????
  442.     IAP_ADDRH = 0x80;                           //???????IAP??
  443.     IAP_ADDRL = 0;
  444. }

  445. char IapRead(int addr)   //  讀數據
  446. {
  447.     char dat;

  448.     IAP_CONTR =WT_24M;                         //??IAP
  449.     IAP_CMD = 1;                                //??IAP???
  450.     IAP_ADDRL = addr;                           //??IAP???
  451.     IAP_ADDRH = addr >> 8;                      //??IAP???
  452.     IAP_TRIG = 0x5a;                            //?????(0x5a)
  453.     IAP_TRIG = 0xa5;                            //?????(0xa5)
  454.     _nop_();
  455.     dat = IAP_DATA;                             //?IAP??
  456.     IapIdle();                                  //??IAP??

  457.     return dat;
  458. }

  459. void IapProgram(int addr, char dat)  // 寫數據
  460. {
  461.     IAP_CONTR =WT_24M;                         //??IAP
  462.     IAP_CMD = 2;                                //??IAP???
  463.     IAP_ADDRL = addr;                           //??IAP???
  464.     IAP_ADDRH = addr >> 8;                      //??IAP???
  465.     IAP_DATA = dat;                             //?IAP??
  466.     IAP_TRIG = 0x5a;                            //?????(0x5a)
  467.     IAP_TRIG = 0xa5;                            //?????(0xa5)
  468.     _nop_();
  469.     IapIdle();                                  //??IAP??
  470. }

  471. void IapErase(int addr)   // 擦除數據
  472. {
  473.     IAP_CONTR =WT_24M;                         //??IAP
  474.     IAP_CMD = 3;                                //??IAP????
  475.     IAP_ADDRL = addr;                           //??IAP???
  476.     IAP_ADDRH = addr >> 8;                      //??IAP???
  477.     IAP_TRIG = 0x5a;                            //?????(0x5a)
  478.     IAP_TRIG = 0xa5;                            //?????(0xa5)
  479.     _nop_();                                    //
  480.     IapIdle();                                  //??IAP??
  481. }
  482. void shijian()   // 延遲讀數據  定時  分
  483. {

  484. if(fg==0)
  485. {
  486. miao4++;
  487.         if(miao4>=3)
  488. {
  489.         v=IapRead(0x01fa);
  490.         ww=v;
  491.         cc3=IapRead(0x01fb);
  492.         cc4=cc3;
  493.         miao4=0;
  494. fg=1;
  495. }
  496. }

  497. }
  498. void wendu()              //  讀溫度
  499. {
  500. if(fg1==0)
  501. {
  502. miao4++;
  503.         if(miao4>=3)
  504. {
  505. qq1=IapRead(0x04b0);
  506.         qq=qq1;
  507.         cc1=IapRead(0x04b1);
  508. cc=cc1;        
  509.         miao4=0;
  510. fg1=1;
  511. }
  512. }
  513. }

  514. void adcwendu()           // ADC 溫度抓取
  515. {
  516.         int res,vcc;
  517. res=ADCRead();
  518. vcc = (int)(4095L*2260/ res);  // ?? VREF ???? , ?????
  519. if(aa>=100)
  520. {
  521. uu=vcc%10;          //ADC顯示 個
  522. ii=vcc/10%10;              //ADC顯示  十
  523. oo=vcc/100%10;         //ADC顯示   百
  524. pp=vcc/1000%10;    //ADC顯示     千
  525.         aa=0;
  526. }
  527. adc1=vcc/1000%10;            // ADC 比較
  528. adc2=vcc/100%10;           // ADC 比較
  529. adc3=(adc1*10)+adc2;     // ADC 比較
  530. }

  531. int main()
  532. {

  533.         P1=0x00;
  534.   P5M1=0x00;
  535.         P5M0=0x00;
  536.         P4M0=0x1e;
  537.         P4M1=0x00;
  538. P2M0=0x38;
  539. P2M1=0x00;
  540. P1M0 = 0x3f;                                //??P1.0?ADC?
  541. P1M1 = 0x40;        
  542.         M1=0;
  543.         M2=0;
  544.         M3=0;
  545.         M1hong=0;
  546.         M2hong=0;
  547.         M3hong=0;
  548.         M1lv=0;
  549.         M2lv=0;
  550.         M3lv=0;
  551.          ADCInit();
  552.                
  553. miao4=0;        

  554.         while(1)
  555.         {
  556.                

  557.     TMOD = 0x00;  
  558.     TL0 = 0xa0;               
  559.     TH0 = 0xf6;                                
  560.                 TL1 = 0x80;
  561.     TH1 = 0x44;                                
  562.    
  563.     TR0 = 1;  
  564.     TR1=1;
  565.     ET0 = 1;
  566.     ET1=1;               
  567.     EA = 1;

  568.                
  569.                
  570.                
  571. shijian();           // 定時時間 分
  572. wendu();       // 溫度
  573. adcwendu();    //溫度

  574. anjian();           //按鍵 設置
  575.      //  12V總開關
  576. // 紅外感應接口

  577.                 if(dingshi>=42)               // 定時時間
  578. {
  579. miao++;
  580.         if(miao==60)
  581.                 {
  582.         fen++;
  583.                         miao=0;
  584.                         if(fen==30)
  585.                         {
  586.                         fen=0;
  587.                         }
  588.         
  589.         }
  590.         dingshi=0;
  591. }



  592.         
  593. M1kaiguan();         
  594. pp1=fen/10%10;     // 定時時間顯示   pp1
  595. oo1=fen%10;         // 定時時間顯示   oo1
  596. ii1=miao/10%10;             // 定時時間顯示 ii1
  597. uu1=miao%10;            // 定時時間顯示   uu1


  598. if(adc3>=qq  )    //溫度報警比對
  599. {
  600. adcwei=1;
  601.         }        
  602. if(adcwei==1)         //溫度   位
  603. {
  604.         M1wei=0;
  605. if(adc3<=cc ){adcwei=0;M1wei=1;}     //  溫度恢復
  606. }

  607. if(fen>=v)             //  分定時
  608. {
  609.   M3=1;
  610.         M3hong=0;
  611.         M3lv=1;
  612. if( miao!=miao1 )          // 電機運行倒計時  秒
  613. { miao1=miao;
  614. miao2++;
  615. }
  616. }


  617. if(miao2>=cc3)           //  秒比較
  618. {
  619.   M3=0;
  620.         M3hong=0;

  621. ^^^^限于篇幅余下內容請下載附件^^^^
  622.         
復制代碼

所有資料51hei提供下載:
控制板1008.rar (496.19 KB, 下載次數: 18)
驅動板1008.rar (7.9 MB, 下載次數: 17)
定時電機控制.docx (17.09 KB, 下載次數: 15)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1013588 發表于 2022-10-22 20:06 | 只看該作者
有沒有驗證過的,分享一下
回復

使用道具 舉報

板凳
ID:260656 發表于 2022-10-28 15:34 | 只看該作者
想問下樓主,從電路圖看,用PWM控制繼電器,能有什么作用呢?
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美网址在线观看 | 欧美一级在线观看 | 日本一区二区高清不卡 | 中文字幕亚洲欧美 | 一级日批片 | 午夜影院在线 | 精品久久久久久久久久久下田 | av入口| 天堂va在线 | 草草草草视频 | 国产日韩精品久久 | 欧美日韩国产精品激情在线播放 | 女同av亚洲女人天堂 | 亚洲欧美激情国产综合久久久 | 欧美激情免费在线 | 欧美1区2区 | 一区二区三区国产精品 | 亚洲色欧美另类 | 亚洲一区二区精品 | 丝袜 亚洲 欧美 日韩 综合 | 一区二区日韩精品 | 国产成人福利视频 | 精品福利一区 | 国产精品国产精品国产专区不片 | 国内精品久久久久久 | 欧美黄色片| 精品亚洲第一 | 欧美三级网站 | 久久久久久亚洲精品 | 日本不卡在线观看 | 国产精品3区 | 国产成人麻豆免费观看 | 99久久久久久99国产精品免 | 久久99视频这里只有精品 | 中文字幕欧美一区二区 | 精品国产99 | 中文字幕在线剧情 | 欧美黄色录像 | 国产97视频在线观看 | www中文字幕 | 成人在线电影网站 |