找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5129|回复: 2
收起左侧

51单片机产生可变占空比的pwm波Proteus仿真与源程序

[复制链接]
ID:359769 发表于 2018-10-4 11:13 | 显示全部楼层 |阅读模式
用51单片机产生可变占空比的pwm波,并在LCD上显示波形

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png

单片机源程序如下:
  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);//打印输出结果
  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, 下载次数: 127)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:851900 发表于 2021-3-29 16:45 | 显示全部楼层
已下载,要是和keil程序一起打包就好了
回复

使用道具 举报

ID:428114 发表于 2021-3-29 19:11 | 显示全部楼层
效果不好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表