標題:
51單片機產(chǎn)生可變占空比的pwm波Proteus仿真與源程序
[打印本頁]
作者:
keke123456
時間:
2018-10-4 11:13
標題:
51單片機產(chǎn)生可變占空比的pwm波Proteus仿真與源程序
用51單片機產(chǎn)生可變占空比的pwm波,并在LCD上顯示波形
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png
(26.4 KB, 下載次數(shù): 62)
下載附件
2018-10-6 22:09 上傳
單片機源程序如下:
#include <reg52.h>
#include <stdio.h>
#include <math.h>
#include "1602.h"
#include "delay.h"
#include "key.h"
#include "pwm.h"
// 報警燈
sbit LED_BLOW = P1^2;
sbit LED_PVER = P1^3;
extern count;
unsigned char DisTempData[16];
int last_state = 0;
#define MAX_DUTY 80
#define MIN_DUTY 20
main()
{
// LCD 初始化
lcd_init();
// 顯示
print_string("kemao");
// PWM初始化
timer0_init();
// 初始化為50%
count = 5;
// 初始化LED
LED_BLOW = 0;
LED_PVER = 0;
key1 = 1;
key2 = 1;
while(1)
{
// 按鍵掃描
switch(scan())
{
case 1:
count++;
break;
case 2:
count--;
break;
default:
break;
}
// 邊界處理
if (count > 10)
{
count = 10;
}
if (count < 0)
{
count = 0;
}
// 占空比閾值判斷
if (last_state != count)
{
// 大于閾值
if (count*10 > MAX_DUTY)
{
write_com(0x01); //screen clear
print_string("kemao--over");
LED_BLOW = 0;
LED_PVER = 1;
}
// 小于閾值
else if (count*10 < MIN_DUTY)
{
write_com(0x01); //screen clear
print_string("kemao--blow");
LED_BLOW = 1;
LED_PVER = 0;
}
// 正常
else
{
write_com(0x01); //screen clear
print_string(" keamo--ok");
LED_BLOW = 1;
LED_PVER = 1;
}
sprintf(DisTempData,"DUTY = %d ",count*10);//打印輸出結(jié)果
write_com(0xc0); //DDRAM AD set to 00h,
print_string(DisTempData);
}
last_state = count;
}
}
復制代碼
所有資料51hei提供下載:
protues仿真.rar
(38.02 KB, 下載次數(shù): 127)
2018-10-4 11:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
keil程序.rar
(35.39 KB, 下載次數(shù): 93)
2018-10-4 11:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
電路原理圖.rar
(123.25 KB, 下載次數(shù): 49)
2018-10-4 11:13 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
康斯坦丁kaka
時間:
2021-3-29 16:45
已下載,要是和keil程序一起打包就好了
作者:
apple_01
時間:
2021-3-29 19:11
效果不好
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1