欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7886|回復: 7
收起左側

51單片機pwm電風扇DC設計

  [復制鏈接]
ID:403791 發表于 2020-1-13 11:12 | 顯示全部樓層 |閱讀模式
這是本人的單片機接口技術課程設計
題目如下:
通過89C51單片機控制家用電風扇的運行。
1)電風扇有三種風速選擇:高、中、低;
2)運轉時間設定;
3)三種運行形式:
  (1)正常:電扇連續運轉;
  (2)自然:電扇以運轉4秒、間斷4秒的方式工作,模擬產生自然風;
  (3)睡眠:指風扇運轉斷8秒,間斷8秒,產生輕柔的微風。
匯編語言和C語言代碼實現功能相同
以下是C語言代碼:
PROTEUS 仿真圖如圖所示:
完整工程在附件里面:
  1. #include<reg51.h>

  2. #define uint unsigned int

  3. #define uchar unsigned char


  4. sbit Motor=P2^0;// P2.0輸出pwm控制電機


  5. uchar time; // 定義占空比的變量
  6. uint time1;

  7. uchar speed;//定義速度變量
  8. uint worktime;//定義持續時間變量

  9. bit flag;


  10. void Delay_ms(unsigned int k)                         
  11. {
  12.         uchar i;
  13.         while(k--)
  14.         {
  15.                 for(i=0;i<125;i++);       
  16.         }                                                                                             
  17. }


  18. void key() //獨立按鍵程序
  19. {
  20.         static uchar key_new;
  21.         P1 |= 0xff;                     //對應的按鍵IO口輸出為1
  22.         if((P1 & 0x3f) != 0x3f)                //按鍵按下
  23.         {
  24.                 Delay_ms(5);                    //按鍵消抖動

  25.                 if(((P1 & 0xff) != 0xff) && (key_new == 1))
  26.                 {                                                //確認是按鍵按下
  27.                         key_new = 0;                                                        //防止重復讀取按鍵

  28.                                                 if((~P1)&0x01){//速度調節
  29.                                                         speed=100;
  30.                                                         P0=~0x07;//全亮
  31.                                                         }                               
  32.                                                 if((~P1)&0x02){
  33.                                                         speed=50;
  34.                                                         P0=~0x03;//亮兩個
  35.                                                        
  36.                                                 }
  37.                                                 if((~P1)&0x04){
  38.                                                         speed=30;
  39.                                                         P0=~0x01;//亮一個
  40.                                                         }
  41.                                                
  42.                                                 if((~P1)&0x08){
  43.                                                         flag=1;
  44.                                                         ET0=0;//關閉定時器0中斷         
  45.                                                         TR0=0;//關閉定時器0
  46.                                                         P3=0x88;
  47.                                                         }

  48.                                                 if((~P1)&0x10){
  49.                                                         worktime=4000;//it means 4 sec

  50.                                                         ET0=1;//開定時器0中斷         
  51.                                                         TR0=1;//啟動定時器0
  52.                                                         P3=0x83;
  53.                                                        
  54.                                                         }


  55.                                                 if((~P1)&0x20){
  56.                                                         worktime=8000;//2 sec
  57.                                                         ET0=1;//開定時器0中斷         
  58.                                                         TR0=1;//啟動定時器0
  59.                                                         P3=0xc6;
  60.                                                         }


  61.                 }                       
  62.         }
  63.         else
  64.                 key_new = 1;      
  65. }



  66. void main(){



  67.                         TMOD=0x11;//定時器0工作方式1,定時器1工作方式1
  68.          
  69.                         TH1=0xff;//(65536-10)/256;//賦初值定時
  70.                          
  71.                         TL1=0xf6;//(65536-10)%256;//0.01ms

  72.                         TH0=0xfc;//(65536-1000)/256;//賦初值定時/用于定工作時間
  73.                          
  74.                         TL0=0x18;//(65536-1000)%256;//1ms
  75.                          
  76.                         EA=1;//開總中斷
  77.                          
  78.                         ET1=1;//開定時器1中斷         
  79.                         TR1=1;//啟動定時器1
  80.                        
  81.                         P0=0xff;//初始化按鍵
  82.                        
  83.                         speed=50;
  84.                         P0=0xa4;
  85.                         flag=1;
  86.                         P3=0x88;
  87.                
  88.                          
  89.                         while(1){
  90.                                 key();               
  91.                         }       
  92. }


  93. void tim1() interrupt 3

  94. {

  95.         TR1=0;//賦初值時,關閉定時器
  96.          
  97.         TH1=0xff;//(65536-10)/256;//賦初值定時
  98.          
  99.         TL1=0xf6;//(65536-10)%256;//0.01ms
  100.          
  101.         TR1=1;//打開定時器
  102.          
  103.          
  104.        
  105.          
  106.         if(time>=100) //1khz,方波頻率
  107.          
  108.         time=0;

  109.          
  110.                 if((time<=speed)&&flag) //占空比%30,可改
  111.                  
  112.                 Motor=1;
  113.                  
  114.                 else
  115.        
  116.                 Motor=0;
  117.                 time++;
  118. }


  119. void tim0() interrupt 1
  120. {
  121.                 TR0=0;//關閉定時器0

  122.                 TH0=0xfc;//(65536-1000)/256;//賦初值定時/用于定工作時間                 

  123.                 TL0=0x18;//(65536-1000)%256;//1ms

  124.                 TR0=1;//啟動定時器1
  125.                
  126.                 if(time1>=worktime) {
  127.                 time1=0;
  128.                 flag=~flag;

  129.                                                 }

  130.                 time1++;
  131. }

復制代碼
以下是匯編語言代碼:


  1.         ORG  0000H

  2.         lJMP MAIN

  3.         ORG  000BH

  4.         AJMP tim0

  5.         ORG  0001BH

  6.         AJMP tim1

  7.         ORG  0030H

  8.         Motor  bit  P2.0

  9.         HighSpeed bit P1.0
  10.         MediumSpeed bit P1.1
  11.         LowSpeed bit P1.2

  12.         NormalMode bit P1.3
  13.         NatureMode bit P1.4
  14.         SleepMode bit P1.5
  15.        
  16.        

  17.         speed EQU 31H

  18.         worktime EQU  32h

  19.         flag EQU  33h

  20. MAIN:                       
  21.                 MOV   SP,#60H;

  22.                 MOV   TMOD,#11H
  23.                
  24.                 MOV   TH1,#0FFH;time for frequency
  25.                 MOV   TL1,#0F6H
  26.                        
  27.                 MOV   TH0,#3CH;time for work basic 50ms(65536-50000)
  28.                 MOV   TL0,#0B0H


  29.                 MOV   P1,#0FFH; set io in mode
  30.                
  31.                 SETB  EA;
  32.                 SETB  ET1;
  33.                 SETB  TR1;
  34.                
  35.                 MOV  speed,#50;preset the mode
  36.                 MOV  flag,#0FFH

  37.                 mov  R0,#0
  38.                 mov  R1,#0

  39.                
  40.                 MOV P0,#04H;display the mode
  41.                 MOV P3,#088H

  42. LOOP0:
  43.             
  44.                 MOV R2,P1

  45.                 CJNE R2,#0FFH,processkey

  46.                 SJMP LOOP0       


  47. processkey:;read the key
  48.                 call DELAY

  49.                 MOV R2,P1
  50.                 CJNE R2,#0FFH,PROCESS;judge again

  51.                 SJMP LOOP0;if not go back to the main programm

  52. PROCESS:
  53.                 JB HighSpeed,K0

  54.                 MOV speed,#100
  55.                 MOV P0,#0H;all the led light up
  56.                
  57.         K0:        JB MediumSpeed,K1

  58.                 MOV speed,#50
  59.                 MOV P0,#04H;light up two lights
  60.        
  61.                
  62.         K1:       
  63.                 JB LowSpeed,K2;

  64.                 MOV speed,#20
  65.                 MOV P0,#06H;light up one light
  66.                
  67.         K2:       
  68.                 JB  NormalMode,K3
  69.                 MOV flag,#0ffH
  70.                 CLR ET0
  71.                 CLR TR0
  72.                 MOV P3,#88H
  73.                
  74.         K3:       
  75.                 JB  NatureMode,K4
  76.                 MOV worktime,#20;two seconds
  77.                 SETB ET0
  78.                 SETB TR0
  79.                 MOV P3,#83H

  80.                
  81.         K4:        JB SleepMode,LOOP0
  82.                 MOV worktime,#40;fout seconds
  83.                 SETB ET0
  84.                 SETB TR0
  85.                 MOV P3,#0C6H
  86.                
  87.                 SJMP LOOP0



  88. tim0:   ;generate the work time  
  89.         clr   tr0
  90.         MOV   TH0,#3CH;time for work basic 50ms(65536-50000)
  91.     MOV   TL0,#0B0H
  92.         setb  tr0
  93.        
  94.         PUSH ACC
  95.         MOV A, worktime
  96.        
  97.         SUBB A,R0
  98.                 jnc loop1
  99.                 mov R0,#0       
  100.        
  101.                 mov A,flag;
  102.                 cpl A
  103.                 mov flag,A
  104.                
  105.         loop1:
  106.                 inc R0;
  107.         POP ACC
  108.                 RETI
  109.                
  110.                
  111.                
  112. tim1:
  113.         clr   tr1
  114.         MOV   TH1,#0xff;time for pwm basic 0.01ms(65536-10)
  115.     MOV   TL1,#0xf6
  116.         setb  tr1
  117.        
  118.         PUSH ACC       
  119.         mov A,#100
  120.         subb A,R1
  121.         jnc loop2
  122.         mov R1,#0;       
  123. loop2:
  124.         mov A,flag;
  125.         jz loop3
  126.                 mov A,speed;
  127.                 subb A,R1;
  128.                 jnc loop4
  129. loop3:
  130.         clr Motor
  131.         SJMP OUT1       
  132. loop4:
  133.         setb Motor;
  134. OUT1:

  135.         POP ACC
  136.         inc R1
  137.         RETI

  138. DELAY:
  139.     MOV  R7,#10
  140. DE: MOV  R6,#10
  141.     DJNZ R6,$
  142.         DJNZ R7,DE
  143.         RET
  144.                
  145.         END
復制代碼



15家用電風扇.zip

105.76 KB, 下載次數: 155, 下載積分: 黑幣 -5

完整工程

評分

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

查看全部評分

回復

使用道具 舉報

ID:403791 發表于 2020-1-13 11:15 | 顯示全部樓層
仿真圖如下
1.png
回復

使用道具 舉報

ID:684871 發表于 2020-1-14 13:51 來自觸屏版 | 顯示全部樓層
請問一定要用l298n嗎
回復

使用道具 舉報

ID:783281 發表于 2020-6-23 08:45 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:635522 發表于 2020-6-25 23:03 | 顯示全部樓層
感覺有點摸不到頭緒,里面程序邏輯有點問題嗷
回復

使用道具 舉報

ID:495287 發表于 2020-6-26 15:15 | 顯示全部樓層
路過幫頂,分享精神無限。
回復

使用道具 舉報

ID:768612 發表于 2020-6-26 20:51 | 顯示全部樓層
emmmmm這個里面沒啥,太失望了
回復

使用道具 舉報

ID:1075366 發表于 2023-5-4 22:16 | 顯示全部樓層
想知道如果使用單片機匯編語言,使用Keil uVision2軟件和protues一起使用該怎么做這個
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表