找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1710|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

單片機PWM調(diào)溫 無反應(yīng) 求幫助

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:795412 發(fā)表于 2020-7-2 10:17 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
主要通過Protues和Keil聯(lián)合仿真

單片機源程序如下:
  1. #include <reg52.h>
  2. //#include <at89x52.h>
  3. //#include <keyscan.h>
  4. extern void scan_full(void);
  5. extern unsigned char key_scan(void);
  6. extern bit key_ok;
  7. unsigned char pwm_set,key_value;
  8. unsigned char count;
  9. sbit PWM=P3^6;
  10. bit up,down,set_flag;
  11. unsigned char code BCD[]={0x3f,0x06,0x5b,0x4f, //此處是將0-F轉(zhuǎn)換成相應(yīng)的BCD碼
  12.                           0x66,0x6d,0x7d,0x07,
  13.                           0x7f,0x6f,0x77,0x7c,
  14.                           0x39,0x5e,0x79,0x71};
  15. void delay1(unsigned char t)
  16. {
  17. while(t--);
  18. }



  19. void pwm(void) interrupt 5//定時器2產(chǎn)生PWM波形
  20. {
  21.         TF2=0;                                        //定時器2的溢出標志要軟件清除,
  22.                                                         //但當RCLK或TCLK為1時由硬件清除
  23.         if((count>=pwm_set)&&(count<10))
  24.                 PWM=1;
  25.         else        PWM=0;       
  26.         count++;       
  27.         if(count==10)
  28.         count=0x00;
  29.        
  30. }


  31. void key_pwm(unsigned char x)//把鍵值轉(zhuǎn)化為PWM設(shè)置值
  32. {
  33.         switch(x)                                //把矩陣鍵盤轉(zhuǎn)化為獨立鍵盤
  34.         {
  35.                 case 1:up=1;break;
  36.                 case 2:down=1;break;
  37.                 case 3:set_flag=!set_flag;break;
  38.                 default:break;
  39.         }
  40.        
  41.         if(up&&set_flag)                //設(shè)置PWM參數(shù):pwm_set
  42.         {
  43.                 pwm_set++;
  44.                 up=0;
  45.                 if(pwm_set>=10)
  46.                 pwm_set=0x00;
  47.         }
  48.         if(down&&set_flag)
  49.         {
  50.                 pwm_set--;
  51.                 down=0;
  52.                 if(pwm_set==0xff)
  53.                 pwm_set=9;
  54.         }
  55.         if(!set_flag)
  56.         {
  57.                 up=0;
  58.                 down=0;
  59.         }
  60. }


  61. void main(void)
  62. {
  63.         TH2=0xb1;        //定時20MS
  64.         TL2=0xe0;
  65.         RCAP2H=0xb1;//定時器2溢出時會把這個單元的內(nèi)容送到TH2和TL2中
  66.         RCAP2L=0xe0;
  67.         EA=1;
  68.         ET2=1;
  69.         TR2=1;
  70.         while(1)
  71.         {
  72.                 scan_full();        //看是否有鍵按下
  73.                 if(key_ok)                //有鍵按下,則判斷到底是哪個鍵按下
  74.                 {
  75.                         key_value=key_scan();//鍵值送key_value暫存
  76.                         P0=~BCD[key_value];         /*此三句是將鍵值顯示出來*/
  77.                           P2=0xfe;                        /**                                                 */
  78.                         delay1(200);                /*************************/
  79.                         key_pwm(key_value);  //調(diào)用鍵值轉(zhuǎn)PWM設(shè)置參數(shù)函數(shù)
  80.                         key_value=0x00;                 //清除鍵值,以免一次按下,多次響應(yīng)
  81.                 }
  82.                 P0=~BCD[pwm_set];                /***此三句是將pwm_set值顯示出來*/
  83.                 P2=0xfd;                                /*******                                        */
  84.                 delay1(200);                        /****************************/
  85.         }
  86. }
復(fù)制代碼

所有資料51hei提供下載:
PWM調(diào)溫.zip (55.67 KB, 下載次數(shù): 3)




51hei圖片20200702095442.png (121.91 KB, 下載次數(shù): 52)

51hei圖片20200702095442.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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