📄 keypwm.c
字号:
/**********************************************************
*Header:
*File Name:
*Author: 陈培炜,杨帆
*Data;2007
*Function:
*********************************************************/
#include <REG52.h>
#include "DS18B20.h"
#include "Lcd.h"
sbit pwmout = P1^0;
sbit led1 = P1^1;
sbit led2 = P1^2;
sbit led3 = P1^3;
sbit led4 = P1^4;
sbit led5 = P1^5;
sbit led6 = P1^6;
sbit led7 = P1^7;
unsigned char code alltime = 10000;
unsigned int tempreture = 0; //存放温度数值
unsigned int High = 5000; //存放高电平延时时间
unsigned int Low = 5000; //存放低电平延时时间
extern unsigned char ut; //外部设置的上限温度
extern unsigned char dt; //外部设置的下限温度
/**********************************************************
*Header:
*File Name:
*Author: 陈培炜,杨帆
*Data;2007
*Function: 用延时做PWM
*********************************************************/
void DelayPwm(unsigned int t)
{
unsigned int a;
for(a=t; a!=0; a--)
{
;
}
}
/**********************************************************
*Header:
*File Name:
*Author: 陈培炜,杨帆
*Data;2007
*Function: PWM高底电平输出
*********************************************************/
void Pwm(void)
{
pwmout = 1;
DelayPwm(High);
pwmout = 0;
DelayPwm(Low);
}
/**********************************************************
*Header:
*File Name:
*Author: 陈培炜,杨帆
*Data;2007
*Function: 定时器初始化
*********************************************************/
unsigned char TimerNum = 0x00;
void T0InterruptInitial(void)
{
TMOD = (TMOD & 0xf0) | 0x01; // 方式1,手动赋值赋值,定时长度65536 //
TH0 = TimerNum; // 定时0.001ms
TL0 = TimerNum;
}
/*************************************************
/*Header:DS18B20.h
/*File Name:main.c
/*Author: 陈培炜,杨帆
/*Data;2007
/*Function: 定时器中断程序
/************************************************/
void T0interrupt(void) interrupt 1
{
TH0 = TimerNum; // 定时0.001ms
TL0 = TimerNum;
tempreture = read0(); //在定时中断一到就读一次温度
if( tempreture>=30 && tempreture<=50 ) //如果读到的温度在30-50之间则计算高底电平延时时间
{
High = 25000-500*tempreture; //占空比(50-t)/20
Low = alltime - High;
}
else
{
High = 5000;
Low = 5000;
}
if(tempreture<=dt) //判断温度是否小于设定温度的下限值,如果小于,则LED亮
{
led1 = 0;
led2 = 0;
led3 = 0;
led4 = 0;
led5 = 0;
led6 = 0;
led7 = 0;
}
if(tempreture>=ut) //判断温度是否大于设定温度的上限值,如果大于,则LED灭
{
led1 = 1;
led2 = 1;
led3 = 1;
led4 = 1;
led5 = 1;
led6 = 1;
led7 = 1;
}
disp(tempreture,High); //显示温度值和占空比
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -