找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 6810|回復(fù): 6
收起左側(cè)

單片機豆?jié){機控制系統(tǒng)設(shè)計源碼加論文下載

[復(fù)制鏈接]
ID:192957 發(fā)表于 2017-4-24 13:55 | 顯示全部樓層 |閱讀模式
一個簡單的豆?jié){機控制系統(tǒng),有完整的程序源碼和設(shè)計論文。用51單片機做的下面是實物圖.
0.png

原理圖
0.png

豆?jié){機設(shè)計論文的目錄
前 言    1
第1章 緒論    1
第2章 設(shè)計方案    2
2.1 設(shè)計思路    2
2.2 設(shè)計原理    2
第3章 豆?jié){機的外部結(jié)構(gòu)設(shè)計    4
3.1 杯體    4
3.2 機頭    4
3.3 加熱管    4
3.4 防溢電極    5
3.5 溫度傳感器    5
3.6 防干燒電極    5
3.7 刀片    5
3.8 電機    5
第4章 系統(tǒng)硬件設(shè)計    6
4.1 單片機AT89C51簡介    6
4.1.1 主要特性    6
4.1.2 引腳圖    7
4.2 電源電路的設(shè)計    9
4.2.1 穩(wěn)壓器    10
4.2.2 整流器    11
4.3 溫度傳感器電路設(shè)計    11
4.3.1 溫度傳感器DS18B20測溫原理    11
4.3.2 溫度傳感器DS18B20引腳圖    13
4.3.3 溫度傳感器DS18B20電路設(shè)計    13
4.4 加熱和打漿電路設(shè)計    14
4.5 防干燒及防溢出電路的設(shè)計    15
4.6 報警電路設(shè)計    16
第5章 系統(tǒng)軟件設(shè)計    17
5.1 流程圖    17
5.2 溫度傳感器程序    18
5.3 加熱和打漿程序    23
5.4 防干燒防溢程序    25
5.5 報警電路程序    27
結(jié) 論    28
謝  辭    29
參考文獻    30
附 錄    31
外文資料翻譯    41

設(shè)計思路
由于以前的豆?jié){機,磨漿要過濾豆渣,豆?jié){熬煮也要自己動手,還要特別注意豆?jié){溢鍋的問題,程序繁瑣麻煩,給人們帶來不便,針對這些情況擬定開發(fā)家用豆?jié){機全自動控制電路裝置。
家用豆?jié){機先是接通電源,按下“啟動”鍵,加熱管進行加熱,并有溫度傳感器進行檢測,當(dāng)溫度達到80℃時,控制電路會停止加熱,電機會帶動刀片運行,進行對豆物的粉碎和磨漿。運行一段時間后停止,然后再次運行電機,如此反復(fù)4至6次。再次對豆?jié){進行加熱,當(dāng)達到一定溫度時,豆?jié){上溢,進入熬煮程序,最后進行報警,豆?jié){加工完成。
0.png
0.png
由單片機、電源電路、溫度傳感器、放干燒電路電路、防溢電路、打漿電路、加熱電路、報警電路等組成。先將黃豆放入豆?jié){機內(nèi),攪拌壺內(nèi)倒入適量的水,裝好攪拌機。接上電源,指示燈LED亮,提示已接通電源,處于待命狀態(tài)。按下啟動鍵,開始加熱,溫度達到80℃時,停止加熱;攪拌馬達運轉(zhuǎn),將黃豆粉碎,然后馬達停轉(zhuǎn),又開始加熱,直到豆?jié){沸騰煮熟,停止加熱,發(fā)出報警聲,提示豆?jié){已做好。

單片機源碼:
  1. ORG    0000H
  2. AJMP   MAIN
  3. ORG    0003H
  4. AJMP   FGS
  5. MAIN :SETB   IT0         ;選擇邊緣觸發(fā)方式
  6.     SETB   EX0          ;允許外部中斷0
  7.     SETB   EA            ;CPU允許中斷
  8. ;****功能選擇程序****                                                                                                
  9. GNXE:JNB   P2.0,GN1        ;富纖豆?jié){
  10. JNB   P2.1,GN2        ;濃香豆?jié){
  11. ;****富纖豆?jié){工作程序****
  12. GN1:  SETB     P1.0       ;啟動加熱
  13.        CLR      P2.3
  14.        MOV    R1,#1EH    ;設(shè)置循環(huán)30次(延時30分鐘)
  15. ACALL  AA0        ; 調(diào)用
  16. ACALL  WENDU
  17.        MOV    B,TPL         ;從30H中取溫度值
  18.        MOV    A,#50H         ;設(shè)定溫度為80度
  19.        DIV     AB        ;比較A、B大小,商存于A中
  20. CJNE    A,#00H,DJ1        
  21. DJNZ    R1,GN1
  22. ;****打漿程序*****
  23. DJ1:  CLR   P1.0              ;停止加熱
  24.       MOV  R0,#6             ;循環(huán)六次
  25.       SETB  P1.1              ;啟動打漿
  26. ACALL BB
  27. CLR   P1.1
  28. ACALL DD
  29. DJNZ  R0,DJ1
  30. ;****煮漿程序****
  31.     ZJ1:  SETB   P1.0              ;啟動加熱
  32.           MOV   R1,#1EH     ;設(shè)置循環(huán)30次(延時30分鐘)
  33.           ACALL  AA0                   ;調(diào)用
  34. JNB    P3.2, FYYZ1
  35. DJNZ   R1,  ZJ1
  36. ;****防溢延煮程序***
  37. FYYZ1:   CLR     P1.0                 ;停止加熱
  38.           ACALL   AA0                  ;等待一分鐘
  39.           SETB    P1.0             ;啟動加熱
  40.       MOV     R1,#8       ;設(shè)置循環(huán)8次(防溢延煮8分鐘)
  41.       ACALL   AA0                  ;調(diào)用
  42. JB       P3.2,FYYZ1
  43. DJNZ    R1,FYYZ1
  44. ACALL   BJ
  45. AJMP    MAIN
  46. ;*****濃香豆?jié){工作程序****
  47. GN2:  SETB    P1.0                ;啟動加熱
  48.        CLR     P2.4
  49.        MOV    R1,#1EH      ;設(shè)置循環(huán)30次(延時30分鐘)
  50. ACALL  AA0                 ;調(diào)用
  51.        MOV    B,TPL               ;從30H中取溫度值
  52.        MOV    A,#50H              ;設(shè)定溫度為80度
  53.        DIV     AB            ;比較A、B大小,商存于A中
  54. CJNE    A,#00H,DJ2
  55. DJNZ    R1,GN2
  56. ;****打漿程序*****
  57. DJ2:  CLR     P1.0                 ;停止加熱
  58. MOV    R0,#4                ;循環(huán)四次
  59.        SETB   P1.1                  ;啟動打漿
  60. ACALL   CC
  61. CLR      P1.1
  62. ACALL   DD
  63. DJNZ     R0,DJ2
  64. ;****煮漿程序****
  65. ZJ2:  SETB     P1.0                ;啟動加熱
  66.       MOV     R1,#1EH        ;設(shè)置循環(huán)30次(延時30分鐘)
  67. ACALL   AA0                 ;調(diào)用
  68. JB    P3.2,FYYZ2
  69. DJNZ    R1,ZJ2
  70. ;****防溢延煮程序****
  71. FYYZ2:  CLR     P1.0                 ;停止加熱
  72.        ACALL  AA0                 ;等待一分鐘
  73.        SETB    P1.0                 ;啟動加熱
  74.        MOV    R1,#8      ;設(shè)置循環(huán)8次(防溢延煮8分鐘)

  75. …………限于本文篇幅 余下代碼請從51黑電子下載附件…………
復(fù)制代碼


0.png

完整源碼及論文下載:
豆?jié){機.zip (1.02 MB, 下載次數(shù): 195)

回復(fù)

使用道具 舉報

ID:410499 發(fā)表于 2018-10-16 14:37 | 顯示全部樓層
樓主你這個是程序,能不能用的?
回復(fù)

使用道具 舉報

ID:369182 發(fā)表于 2019-12-20 15:44 | 顯示全部樓層
有完整仿真圖嗎
回復(fù)

使用道具 舉報

ID:243394 發(fā)表于 2019-12-20 19:41 | 顯示全部樓層
謝謝分亨
回復(fù)

使用道具 舉報

ID:607530 發(fā)表于 2019-12-21 17:37 | 顯示全部樓層
qq104542 發(fā)表于 2018-10-16 14:37
樓主你這個是程序,能不能用的?

這個是匯編
回復(fù)

使用道具 舉報

ID:253767 發(fā)表于 2019-12-22 08:14 | 顯示全部樓層
謝謝分享!!!
回復(fù)

使用道具 舉報

ID:667331 發(fā)表于 2019-12-23 12:42 | 顯示全部樓層
#include<reg51.h>
#include<intrins.h>
#define uchar  unsigned char
#define uint  unsigned int
sbit M0=P3^0;   //八路NPN達林頓連接晶體管連接6線步進電機
sbit M1=P3^1;
sbit M2=P3^2;
sbit M3=P3^3;
sbit sw0=P3^6;   //K1開始
sbit sw1=P3^7;   //K2
sbit key0=P1^0;   //K3
sbit key1=P1^1;    //K4
sbit f=P3^4;       //蜂鳴器
uchar Speed=1;  //分
uchar m;
uchar t=0;
uchar n=0;
uchar Date=0;
uchar Ledplay[6];
uchar bn=0;
uchar code  SEG7[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x38,0x77,0x40,0x00};
uchar code  Scan_bit[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar data  Dis_buf[]={0,0,10,10,10,10};
uchar z;
void Delayxms(uint t)        //延時ms            
{
    unsigned char i,j,k;
   for(k=0;k<t;k++)
  {
           _nop_();
                   _nop_();
                _nop_();
           i = 11;
           j = 190;
      do
          {
                   while (--j);
           } while (--i);
   }               
}
void Delay1us(uchar t)        //延時1us            
{
    uchar i;
   for(i=0;i<t;i++)
  {
           _nop_();
           _nop_();
           _nop_();         
   }               
}
void display(void)                        //數(shù)碼管顯示時間
{                                                
      uchar i;              
     for(i=0;i<6;i++)
    {
         P2=0xff;               //全部數(shù)碼管位選失能
                 P0=SEG7[Dis_buf[i]];        //第i個數(shù)碼管顯示
                 P2= Scan_bit[i];
                 Delayxms(1);
    }                                       
}

void Timer0_init(void)  //計時器
{
    TMOD=0x51;
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        EA=1;
        ET0=1;
        TR0= 1;
}
uchar cnt=100;        //秒
void Timer0_int(void) interrupt 1 using        1   //定時中斷
{
    t++;
        TH0=(65535-50000)/256;
        TL0=(65535-50000)%256;
        if(t==20)
        {
           t=0;
           Date=n;
           n=0;
           cnt--;
           if(cnt==0)
           {
             while(1)
                 {
                     f=0;
                         f=1;
                 }
                  
           }
        }
        if(key0==0)  //檢測K3按下
        {
           Delayxms(10);  //延時10ms
           if(key0==0)   
           {
              Speed++;
                  if(Speed>20)
                  {
                    Speed=20;
                  }
           }
           while(key0==0);
        }
        if(key1==0)    //檢測K4按下
        {
           Delayxms(10);
           if(key1==0)
          {
             Speed--;
                 if(Speed==0)
                 {
                    Speed=1;
                 }
          }
          while(key1==0);
        }
}        
void delay()                     
{  
    uchar i=5+Speed;
    while(--i!=0)
  {
     Dis_buf[0]=13;
         Dis_buf[1]=cnt%10;
         Dis_buf[2]=cnt/10;
         Dis_buf[3]=12;
     Dis_buf[4]=Speed%10;
         Dis_buf[5]=Speed/10;
         display();
  }                          
}
void R_rotation()
{
   M3=0;
   M0=1;
   delay();
   n++;
   M0=0;
   M1=1;
   delay();
   n++;
   M1=0;
   M2=1;
   delay();
   n++;
   M2=0;
   M3=1;
   delay();
   n++;
}
/*void F_rotation()
{
   M0=0;
   M3=1;
   delay();
   n++;
   M3=0;
   M2=1;
   delay();
   n++;
   M2=0;
   M1=1;
   delay();
   n++;
   M1=0;
   M0=1;
   delay();
   n++;
}*/
void main()
{  
   int flag = 0;
   Timer0_init();  //初始化
        while(1)
        {
                if(flag==1)
                        R_rotation();
                if(sw1==0)                //檢測K2是否按下               
                {
                        cnt=10;
                        flag=1;
                }
                if(sw0==0)                //檢測K1是否按下               
                {
                        cnt=20;
                        flag=1;
                }
        }
}
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表