標題: 51單片機產(chǎn)生可變占空比的pwm波Proteus仿真與源程序 [打印本頁]

作者: keke123456    時間: 2018-10-4 11:13
標題: 51單片機產(chǎn)生可變占空比的pwm波Proteus仿真與源程序
用51單片機產(chǎn)生可變占空比的pwm波,并在LCD上顯示波形

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. #include <reg52.h>
  2. #include <stdio.h>
  3. #include <math.h>
  4. #include "1602.h"
  5. #include "delay.h"
  6. #include "key.h"
  7. #include "pwm.h"

  8. // 報警燈
  9. sbit LED_BLOW = P1^2;
  10. sbit LED_PVER = P1^3;
  11. extern count;
  12. unsigned char DisTempData[16];

  13. int last_state = 0;

  14. #define MAX_DUTY 80
  15. #define MIN_DUTY 20

  16. main()
  17. {
  18.     // LCD 初始化
  19.     lcd_init();

  20.     // 顯示
  21.     print_string("kemao");

  22.     // PWM初始化
  23.     timer0_init();

  24.     // 初始化為50%
  25.     count = 5;
  26.        
  27.         // 初始化LED
  28.           LED_BLOW = 0;
  29.     LED_PVER = 0;
  30.           key1 = 1;
  31.           key2 = 1;

  32.     while(1)
  33.     {

  34.         // 按鍵掃描
  35.         switch(scan())
  36.         {
  37.         case 1:
  38.             count++;
  39.             break;
  40.         case 2:
  41.             count--;
  42.             break;
  43.         default:
  44.             break;
  45.         }

  46.         // 邊界處理
  47.         if (count > 10)
  48.         {
  49.             count = 10;
  50.         }
  51.         if (count < 0)
  52.         {
  53.             count = 0;
  54.         }


  55.         // 占空比閾值判斷
  56.         if (last_state != count)
  57.         {
  58.             // 大于閾值
  59.             if (count*10 > MAX_DUTY)
  60.             {
  61.                 write_com(0x01);     //screen clear
  62.                 print_string("kemao--over");
  63.                                 LED_BLOW = 0;
  64.                                 LED_PVER = 1;
  65.             }
  66.             // 小于閾值
  67.             else if (count*10 < MIN_DUTY)
  68.             {
  69.                 write_com(0x01);     //screen clear
  70.                 print_string("kemao--blow");
  71.                                 LED_BLOW = 1;
  72.                                 LED_PVER = 0;

  73.             }
  74.             // 正常
  75.             else
  76.             {
  77.                 write_com(0x01);     //screen clear
  78.                 print_string(" keamo--ok");
  79.                                 LED_BLOW = 1;
  80.                                 LED_PVER = 1;
  81.             }

  82.             sprintf(DisTempData,"DUTY = %d ",count*10);//打印輸出結(jié)果
  83.             write_com(0xc0);    //DDRAM AD set to 00h,
  84.             print_string(DisTempData);

  85.         }

  86.         last_state = count;


  87.     }
  88. }
復制代碼

所有資料51hei提供下載:
protues仿真.rar (38.02 KB, 下載次數(shù): 127)
keil程序.rar (35.39 KB, 下載次數(shù): 93)
電路原理圖.rar (123.25 KB, 下載次數(shù): 49)





作者: 康斯坦丁kaka    時間: 2021-3-29 16:45
已下載,要是和keil程序一起打包就好了
作者: apple_01    時間: 2021-3-29 19:11
效果不好




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1